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;