summaryrefslogtreecommitdiff
path: root/libavcodec/imgconvert.c
diff options
context:
space:
mode:
authorAurelien Jacobs <aurel@gnuage.org>2007-09-24 13:21:41 +0000
committerAurelien Jacobs <aurel@gnuage.org>2007-09-24 13:21:41 +0000
commitb70335a28d88068cf0dea8789308d6670cb0162e (patch)
tree004ba5c06541cd45a9b61f320b5c0d0d09594956 /libavcodec/imgconvert.c
parent1136d34a44bba555601dda248b2d09f6c35394d3 (diff)
add support for yuva420p colorspace (yuv420p + alpha)
Originally committed as revision 10565 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/imgconvert.c')
-rw-r--r--libavcodec/imgconvert.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
index 05af023086..d1f9bbac0b 100644
--- a/libavcodec/imgconvert.c
+++ b/libavcodec/imgconvert.c
@@ -129,6 +129,16 @@ static const PixFmtInfo pix_fmt_info[PIX_FMT_NB] = {
.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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
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;