avcodec/dpx: support for 8 and 16 bit luma only files
authorPaul B Mahol <onemda@gmail.com>
Mon, 7 Oct 2013 10:10:39 +0000 (10:10 +0000)
committerPaul B Mahol <onemda@gmail.com>
Mon, 7 Oct 2013 11:45:46 +0000 (11:45 +0000)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
libavcodec/dpx.c
libavcodec/dpxenc.c

index e956f6d..4b997e4 100644 (file)
@@ -149,6 +149,9 @@ static int decode_frame(AVCodecContext *avctx,
         avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
 
     switch (descriptor) {
+    case 6:  // Y
+        elements = 1;
+        break;
     case 51: // RGBA
         elements = 4;
         break;
@@ -191,6 +194,10 @@ static int decode_frame(AVCodecContext *avctx,
     }
 
     switch (1000 * descriptor + 10 * bits_per_color + endian) {
+    case 6081:
+    case 6080:
+        avctx->pix_fmt = AV_PIX_FMT_GRAY8;
+        break;
     case 50081:
     case 50080:
         avctx->pix_fmt = AV_PIX_FMT_RGB24;
@@ -211,6 +218,12 @@ static int decode_frame(AVCodecContext *avctx,
     case 51121:
         avctx->pix_fmt = AV_PIX_FMT_GBRP12;
         break;
+    case 6161:
+        avctx->pix_fmt = AV_PIX_FMT_GRAY16BE;
+        break;
+    case 6160:
+        avctx->pix_fmt = AV_PIX_FMT_GRAY16LE;
+        break;
     case 50161:
         avctx->pix_fmt = AV_PIX_FMT_RGB48BE;
         break;
index 997e3d6..875862d 100644 (file)
@@ -43,6 +43,11 @@ static av_cold int encode_init(AVCodecContext *avctx)
     s->planar             = !!(desc->flags & AV_PIX_FMT_FLAG_PLANAR);
 
     switch (avctx->pix_fmt) {
+    case AV_PIX_FMT_GRAY16BE:
+    case AV_PIX_FMT_GRAY16LE:
+    case AV_PIX_FMT_GRAY8:
+        s->descriptor = 6;
+        break;
     case AV_PIX_FMT_GBRP10BE:
     case AV_PIX_FMT_GBRP10LE:
     case AV_PIX_FMT_GBRP12BE:
@@ -242,7 +247,9 @@ AVCodec ff_dpx_encoder = {
     .init           = encode_init,
     .encode2        = encode_frame,
     .pix_fmts       = (const enum AVPixelFormat[]){
+        AV_PIX_FMT_GRAY8,
         AV_PIX_FMT_RGB24,    AV_PIX_FMT_RGBA,
+        AV_PIX_FMT_GRAY16LE, AV_PIX_FMT_GRAY16BE,
         AV_PIX_FMT_RGB48LE,  AV_PIX_FMT_RGB48BE,
         AV_PIX_FMT_RGBA64LE, AV_PIX_FMT_RGBA64BE,
         AV_PIX_FMT_GBRP10LE, AV_PIX_FMT_GBRP10BE,