changeset 5363:1a25f2f6316e libavcodec

add YUV440P and YUVJ440P support patch by Andreas ªÓman: \andreas olebyn nu/ original thread: [FFmpeg-devel] half vertical chroma resolution from JPEGs.. date: 07/03/2007 01:29 PM
author benoit
date Wed, 18 Jul 2007 08:11:16 +0000
parents e0b7c248c33e
children 50454f3b0e88
files imgconvert.c mjpegdec.c
diffstat 2 files changed, 38 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/imgconvert.c	Wed Jul 18 06:45:47 2007 +0000
+++ b/imgconvert.c	Wed Jul 18 08:11:16 2007 +0000
@@ -120,6 +120,14 @@
         .depth = 8,
         .x_chroma_shift = 2, .y_chroma_shift = 0,
     },
+    [PIX_FMT_YUV440P] = {
+        .name = "yuv440p",
+        .nb_channels = 3,
+        .color_type = FF_COLOR_YUV,
+        .pixel_type = FF_PIXEL_PLANAR,
+        .depth = 8,
+        .x_chroma_shift = 0, .y_chroma_shift = 1,
+    },
 
     /* JPEG YUV */
     [PIX_FMT_YUVJ420P] = {
@@ -146,6 +154,14 @@
         .depth = 8,
         .x_chroma_shift = 0, .y_chroma_shift = 0,
     },
+    [PIX_FMT_YUVJ440P] = {
+        .name = "yuvj440p",
+        .nb_channels = 3,
+        .color_type = FF_COLOR_YUV_JPEG,
+        .pixel_type = FF_PIXEL_PLANAR,
+        .depth = 8,
+        .x_chroma_shift = 0, .y_chroma_shift = 1,
+    },
 
     /* RGB formats */
     [PIX_FMT_RGB24] = {
@@ -417,9 +433,11 @@
     case PIX_FMT_YUV444P:
     case PIX_FMT_YUV410P:
     case PIX_FMT_YUV411P:
+    case PIX_FMT_YUV440P:
     case PIX_FMT_YUVJ420P:
     case PIX_FMT_YUVJ422P:
     case PIX_FMT_YUVJ444P:
+    case PIX_FMT_YUVJ440P:
         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;
@@ -1438,6 +1456,20 @@
     }
 }
 
+/* 1x1 -> 1x2 */
+static void grow12(uint8_t *dst, int dst_wrap,
+                   const uint8_t *src, int src_wrap,
+                   int width, int height)
+{
+    for(;height > 0; height-=2) {
+        memcpy(dst, src, width);
+        dst += dst_wrap;
+        memcpy(dst, src, width);
+        dst += dst_wrap;
+        src += src_wrap;
+    }
+}
+
 /* 1x1 -> 2x2 */
 static void grow22(uint8_t *dst, int dst_wrap,
                    const uint8_t *src, int src_wrap,
@@ -2390,6 +2422,9 @@
         case 0xf0:
             resize_func = grow21;
             break;
+        case 0x0f:
+            resize_func = grow12;
+            break;
         case 0xe0:
             resize_func = grow41;
             break;
--- a/mjpegdec.c	Wed Jul 18 06:45:47 2007 +0000
+++ b/mjpegdec.c	Wed Jul 18 08:11:16 2007 +0000
@@ -298,6 +298,9 @@
         else
             s->avctx->pix_fmt = PIX_FMT_GRAY8;
         break;
+    case 0x121111:
+        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV440P : PIX_FMT_YUVJ440P;
+        break;
     case 0x211111:
     case 0x221212:
         s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P;