diff options
author | Martin Vignali <martin.vignali@gmail.com> | 2018-12-02 21:39:18 +0100 |
---|---|---|
committer | Martin Vignali <martin.vignali@gmail.com> | 2018-12-04 15:17:43 +0100 |
commit | bbbbf237597e116f6af9094b57e979a7acc4afcb (patch) | |
tree | bb3d4e309dc0e8d476031ec27ab79e43c13aecd9 | |
parent | 4141d45ae385471b4afedd488bbfe53f7c4b89a3 (diff) | |
download | ffmpeg-bbbbf237597e116f6af9094b57e979a7acc4afcb.tar.gz |
avcodec/prores_aw : only set color prim, trc, space values if supported
set to unspecified if frame have another value
-rw-r--r-- | libavcodec/proresenc_anatoliy.c | 13 |
1 files 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 */ |