prores: store and retrieve extended colourspace information
authorKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 28 Feb 2012 18:44:07 +0000 (19:44 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 29 Feb 2012 08:29:02 +0000 (09:29 +0100)
Based on the patch by Phil Barrett.

libavcodec/proresdec.c
libavcodec/proresenc.c
tests/ref/vsynth1/prores
tests/ref/vsynth2/prores

index da90912..a399576 100644 (file)
@@ -165,6 +165,10 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf,
         ctx->picture.top_field_first  = ctx->frame_type & 1;
     }
 
         ctx->picture.top_field_first  = ctx->frame_type & 1;
     }
 
+    avctx->color_primaries = buf[14];
+    avctx->color_trc       = buf[15];
+    avctx->colorspace      = buf[16];
+
     ctx->alpha_info = buf[17] & 0xf;
     if (ctx->alpha_info)
         av_log_missing_feature(avctx, "alpha channel", 0);
     ctx->alpha_info = buf[17] & 0xf;
     if (ctx->alpha_info)
         av_log_missing_feature(avctx, "alpha channel", 0);
index c10f599..8e6f93f 100644 (file)
@@ -689,9 +689,9 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     bytestream_put_be16  (&buf, avctx->height);
     bytestream_put_byte  (&buf, ctx->chroma_factor << 6); // frame flags
     bytestream_put_byte  (&buf, 0);             // reserved
     bytestream_put_be16  (&buf, avctx->height);
     bytestream_put_byte  (&buf, ctx->chroma_factor << 6); // frame flags
     bytestream_put_byte  (&buf, 0);             // reserved
-    bytestream_put_byte  (&buf, 0);             // primaries
-    bytestream_put_byte  (&buf, 0);             // transfer function
-    bytestream_put_byte  (&buf, 6);             // colour matrix - ITU-R BT.601-4
+    bytestream_put_byte  (&buf, avctx->color_primaries);
+    bytestream_put_byte  (&buf, avctx->color_trc);
+    bytestream_put_byte  (&buf, avctx->colorspace);
     bytestream_put_byte  (&buf, 0x40);          // source format and alpha information
     bytestream_put_byte  (&buf, 0);             // reserved
     bytestream_put_byte  (&buf, 0x03);          // matrix flags - both matrices are present
     bytestream_put_byte  (&buf, 0x40);          // source format and alpha information
     bytestream_put_byte  (&buf, 0);             // reserved
     bytestream_put_byte  (&buf, 0x03);          // matrix flags - both matrices are present
index b496d99..67ae0dc 100644 (file)
@@ -1,4 +1,4 @@
-c050b1a4905175211ead9979562366ff *./tests/data/vsynth1/prores.mov
+2566517b15c62887bd94daaab1b1a85b *./tests/data/vsynth1/prores.mov
 3859037 ./tests/data/vsynth1/prores.mov
 0a4153637d0cc0a88a8bcbf04cfaf8c6 *./tests/data/prores.vsynth1.out.yuv
 stddev:    3.17 PSNR: 38.09 MAXDIFF:   39 bytes:  7603200/  7603200
 3859037 ./tests/data/vsynth1/prores.mov
 0a4153637d0cc0a88a8bcbf04cfaf8c6 *./tests/data/prores.vsynth1.out.yuv
 stddev:    3.17 PSNR: 38.09 MAXDIFF:   39 bytes:  7603200/  7603200
index da5a97e..44bd405 100644 (file)
@@ -1,4 +1,4 @@
-ecd11fa69712902143c0c54b193c9313 *./tests/data/vsynth2/prores.mov
+28755ce05e812adbb8b7c180318ffba8 *./tests/data/vsynth2/prores.mov
 3884722 ./tests/data/vsynth2/prores.mov
 ca2f6c1162635dedfa468c90f1fdc0ef *./tests/data/prores.vsynth2.out.yuv
 stddev:    0.92 PSNR: 48.77 MAXDIFF:   10 bytes:  7603200/  7603200
 3884722 ./tests/data/vsynth2/prores.mov
 ca2f6c1162635dedfa468c90f1fdc0ef *./tests/data/prores.vsynth2.out.yuv
 stddev:    0.92 PSNR: 48.77 MAXDIFF:   10 bytes:  7603200/  7603200