[FFmpeg-cvslog] lavc/dpx: Support decoding 12 bit colourspace with transparency information.

Carl Eugen Hoyos git at videolan.org
Wed Jun 15 17:46:47 CEST 2016


ffmpeg | branch: master | Carl Eugen Hoyos <cehoyos at ag.or.at> | Wed Jun 15 17:45:51 2016 +0200| [aec96e233f60cc0c0477b5e96750c323ea636d36] | committer: Carl Eugen Hoyos

lavc/dpx: Support decoding 12 bit colourspace with transparency information.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=aec96e233f60cc0c0477b5e96750c323ea636d36
---

 libavcodec/dpx.c |   16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c
index b439e10..e4dd1b0 100644
--- a/libavcodec/dpx.c
+++ b/libavcodec/dpx.c
@@ -264,11 +264,13 @@ static int decode_frame(AVCodecContext *avctx,
         avctx->pix_fmt = AV_PIX_FMT_GBRAP10;
         break;
     case 50120:
-    case 51120:
     case 50121:
-    case 51121:
         avctx->pix_fmt = AV_PIX_FMT_GBRP12;
         break;
+    case 51120:
+    case 51121:
+        avctx->pix_fmt = AV_PIX_FMT_GBRAP12;
+        break;
     case 6161:
         avctx->pix_fmt = AV_PIX_FMT_GRAY16BE;
         break;
@@ -338,9 +340,10 @@ static int decode_frame(AVCodecContext *avctx,
         break;
     case 12:
         for (x = 0; x < avctx->height; x++) {
-            uint16_t *dst[3] = {(uint16_t*)ptr[0],
+            uint16_t *dst[4] = {(uint16_t*)ptr[0],
                                 (uint16_t*)ptr[1],
-                                (uint16_t*)ptr[2]};
+                                (uint16_t*)ptr[2],
+                                (uint16_t*)ptr[3]};
             for (y = 0; y < avctx->width; y++) {
                 *dst[2] = read16(&buf, endian) >> 4;
                 dst[2]++;
@@ -348,11 +351,10 @@ static int decode_frame(AVCodecContext *avctx,
                 dst[0]++;
                 *dst[1] = read16(&buf, endian) >> 4;
                 dst[1]++;
-                // For 12 bit, ignore alpha
                 if (elements == 4)
-                    buf += 2;
+                    *dst[3]++ = read16(&buf, endian) >> 4;
             }
-            for (i = 0; i < 3; i++)
+            for (i = 0; i < elements; i++)
                 ptr[i] += p->linesize[i];
             // Jump to next aligned position
             buf += need_align;



More information about the ffmpeg-cvslog mailing list