[FFmpeg-cvslog] avcodec/prores_aw : only set color prim, trc, space values if supported

Martin Vignali git at videolan.org
Tue Dec 4 16:19:20 EET 2018


ffmpeg | branch: master | Martin Vignali <martin.vignali at gmail.com> | Sun Dec  2 21:39:18 2018 +0100| [bbbbf237597e116f6af9094b57e979a7acc4afcb] | committer: Martin Vignali

avcodec/prores_aw : only set color prim, trc, space values if supported

set to unspecified if frame have another value

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

 libavcodec/proresenc_anatoliy.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c
index 8047f1c242..b9524b3d99 100644
--- a/libavcodec/proresenc_anatoliy.c
+++ b/libavcodec/proresenc_anatoliy.c
@@ -52,6 +52,12 @@ static const int qp_start_table[5] = {  8, 3, 2, 1, 1};
 static const int qp_end_table[5]   = { 13, 9, 6, 6, 5};
 static const int bitrate_table[5]  = { 1000, 2100, 3500, 5400, 7000};
 
+static const int valid_primaries[9]  = { AVCOL_PRI_RESERVED0, AVCOL_PRI_BT709, AVCOL_PRI_UNSPECIFIED, AVCOL_PRI_BT470BG,
+                                         AVCOL_PRI_SMPTE170M, AVCOL_PRI_BT2020, AVCOL_PRI_SMPTE431, AVCOL_PRI_SMPTE432,INT_MAX };
+static const int valid_trc[4]        = { AVCOL_TRC_RESERVED0, AVCOL_TRC_BT709, AVCOL_TRC_UNSPECIFIED, INT_MAX };
+static const int valid_colorspace[5] = { AVCOL_SPC_BT709, AVCOL_SPC_UNSPECIFIED, AVCOL_SPC_SMPTE170M,
+                                         AVCOL_SPC_BT2020_NCL, INT_MAX };
+
 static const uint8_t QMAT_LUMA[5][64] = {
     {
          4,  7,  9, 11, 13, 14, 15, 63,
@@ -686,9 +692,10 @@ static int prores_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
         *buf++ = 0x82; // 422, not interlaced
     }
     *buf++ = 0; /* reserved */
-    *buf++ = pict->color_primaries;
-    *buf++ = pict->color_trc;
-    *buf++ = pict->colorspace;
+    /* only write color properties, if valid value. set to unspecified otherwise */
+    *buf++ = ff_int_from_list_or_default(avctx, "frame color primaries", pict->color_primaries, valid_primaries, 0);
+    *buf++ = ff_int_from_list_or_default(avctx, "frame color trc", pict->color_trc, valid_trc, 0);
+    *buf++ = ff_int_from_list_or_default(avctx, "frame colorspace", pict->colorspace, valid_colorspace, 0);
     if (avctx->profile >= FF_PROFILE_PRORES_4444) {
         if (avctx->pix_fmt == AV_PIX_FMT_YUV444P10) {
             *buf++ = 0xA0;/* src b64a and no alpha */



More information about the ffmpeg-cvslog mailing list