[FFmpeg-devel] [PATCH 2/2] avcodec/dnxhdenc: properly store colorspace info

James Almer jamrial at gmail.com
Fri Jan 24 17:54:03 EET 2020


On 1/24/2020 11:14 AM, Paul B Mahol wrote:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
>  libavcodec/dnxhdenc.c | 11 ++++++++++-
>  libavcodec/dnxhdenc.h |  1 +
>  2 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
> index 2feb8baf21..03835fa794 100644
> --- a/libavcodec/dnxhdenc.c
> +++ b/libavcodec/dnxhdenc.c
> @@ -406,6 +406,15 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx)
>      }
>  
>      ctx->is_444 = ctx->profile == FF_PROFILE_DNXHR_444;
> +
> +    switch (avctx->colorspace) {
> +    case AVCOL_SPC_UNSPECIFIED:

Isn't 3 meant to be unspecified? If not, what is it for?

> +    case AVCOL_SPC_BT709:      ctx->colorspace = 0; break;
> +    case AVCOL_SPC_BT2020_NCL: ctx->colorspace = 1; break;
> +    case AVCOL_SPC_BT2020_CL:  ctx->colorspace = 2; break;
> +    default:                   ctx->colorspace = 3; break;
> +    }
> +
>      avctx->profile = ctx->profile;
>      ctx->cid = ff_dnxhd_find_cid(avctx, ctx->bit_depth);
>      if (!ctx->cid) {
> @@ -576,7 +585,7 @@ static int dnxhd_write_header(AVCodecContext *avctx, uint8_t *buf)
>      buf[0x21] = ctx->bit_depth == 10 ? 0x58 : 0x38;
>      buf[0x22] = 0x88 + (ctx->interlaced << 2);
>      AV_WB32(buf + 0x28, ctx->cid); // CID
> -    buf[0x2c] = (!ctx->interlaced << 7) | (ctx->is_444 << 6) | (avctx->pix_fmt == AV_PIX_FMT_YUV444P10);
> +    buf[0x2c] = (!ctx->interlaced << 7) | (ctx->is_444 << 6) | (ctx->colorspace << 1) | (avctx->pix_fmt == AV_PIX_FMT_YUV444P10);
>  
>      buf[0x5f] = 0x01; // UDL
>  
> diff --git a/libavcodec/dnxhdenc.h b/libavcodec/dnxhdenc.h
> index 7b0d862e28..4d5f457e33 100644
> --- a/libavcodec/dnxhdenc.h
> +++ b/libavcodec/dnxhdenc.h
> @@ -50,6 +50,7 @@ typedef struct DNXHDEncContext {
>      int profile;
>      int bit_depth;
>      int is_444;
> +    int colorspace;
>      const CIDEntry *cid_table;
>      uint8_t *msip; ///< Macroblock Scan Indexes Payload
>      uint32_t *slice_size;
> 



More information about the ffmpeg-devel mailing list