Mercurial > libavcodec.hg
diff imgconvert.c @ 5706:3e8764a25c53 libavcodec
add support for yuva420p colorspace (yuv420p + alpha)
author | aurel |
---|---|
date | Mon, 24 Sep 2007 13:21:41 +0000 |
parents | 1a25f2f6316e |
children | 8b211f34a3eb |
line wrap: on
line diff
--- a/imgconvert.c Mon Sep 24 13:01:15 2007 +0000 +++ b/imgconvert.c Mon Sep 24 13:21:41 2007 +0000 @@ -129,6 +129,16 @@ .x_chroma_shift = 0, .y_chroma_shift = 1, }, + /* YUV formats with alpha plane */ + [PIX_FMT_YUVA420P] = { + .name = "yuva420p", + .nb_channels = 4, + .color_type = FF_COLOR_YUV, + .pixel_type = FF_PIXEL_PLANAR, + .depth = 8, + .x_chroma_shift = 1, .y_chroma_shift = 1, + }, + /* JPEG YUV */ [PIX_FMT_YUVJ420P] = { .name = "yuvj420p", @@ -444,10 +454,25 @@ picture->data[0] = ptr; picture->data[1] = picture->data[0] + size; picture->data[2] = picture->data[1] + size2; + picture->data[3] = NULL; picture->linesize[0] = width; picture->linesize[1] = w2; picture->linesize[2] = w2; + picture->linesize[3] = 0; return size + 2 * size2; + case PIX_FMT_YUVA420P: + w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; + h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; + size2 = w2 * h2; + picture->data[0] = ptr; + picture->data[1] = picture->data[0] + size; + picture->data[2] = picture->data[1] + size2; + picture->data[3] = picture->data[1] + size2 + size2; + picture->linesize[0] = width; + picture->linesize[1] = w2; + picture->linesize[2] = w2; + picture->linesize[3] = width; + return 2 * size + 2 * size2; case PIX_FMT_NV12: case PIX_FMT_NV21: w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; @@ -456,15 +481,18 @@ picture->data[0] = ptr; picture->data[1] = picture->data[0] + size; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width; picture->linesize[1] = w2; picture->linesize[2] = 0; + picture->linesize[3] = 0; return size + 2 * size2; case PIX_FMT_RGB24: case PIX_FMT_BGR24: picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width * 3; return size * 3; case PIX_FMT_RGB32: @@ -474,6 +502,7 @@ picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width * 4; return size * 4; case PIX_FMT_GRAY16BE: @@ -486,18 +515,21 @@ picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width * 2; return size * 2; case PIX_FMT_UYVY422: picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width * 2; return size * 2; case PIX_FMT_UYYVYY411: picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width + width/2; return size + size/2; case PIX_FMT_RGB8: @@ -508,6 +540,7 @@ picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width; return size; case PIX_FMT_RGB4: @@ -515,6 +548,7 @@ picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width / 2; return size / 2; case PIX_FMT_MONOWHITE: @@ -522,6 +556,7 @@ picture->data[0] = ptr; picture->data[1] = NULL; picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = (width + 7) >> 3; return picture->linesize[0] * height; case PIX_FMT_PAL8: @@ -529,6 +564,7 @@ picture->data[0] = ptr; picture->data[1] = ptr + size2; /* palette is stored here as 256 32 bit words */ picture->data[2] = NULL; + picture->data[3] = NULL; picture->linesize[0] = width; picture->linesize[1] = 4; return size2 + 256 * 4;