[vlc-devel] [PATCH 1/2] avcodec: video: update the decoder output when HDR10 metadata change
Steve Lhomme
robux4 at gmail.com
Thu Apr 6 17:49:52 CEST 2017
Mh, this patch actually needs https://patches.videolan.org/patch/16242/
I'll send the proper patch for proper HDR10 (mastering and content
light level metadata)
On Thu, Apr 6, 2017 at 5:42 PM, Steve Lhomme <robux4 at videolabs.io> wrote:
> So the output format is actually updated with HDR10 metadata. If the demuxer or
> packetizer didn't fill these metadata the vout will not know it's outputing
> HDR10.
> ---
> modules/codec/avcodec/video.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
> index b6a12b7def..f027eaec45 100644
> --- a/modules/codec/avcodec/video.c
> +++ b/modules/codec/avcodec/video.c
> @@ -1035,6 +1035,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
> p_pic->b_progressive = !frame->interlaced_frame;
> p_pic->b_top_field_first = frame->top_field_first;
>
> + bool format_changed = false;
> #if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 55, 16, 101 ) )
> const AVFrameSideData *metadata =
> av_frame_get_side_data( frame,
> @@ -1065,6 +1066,14 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
> p_pic->format.mastering.white_point[0] = hdr_meta->white_point[0].num;
> p_pic->format.mastering.white_point[1] = hdr_meta->white_point[1].num;
> }
> +
> + if ( memcmp( &p_dec->fmt_out.video.mastering,
> + &p_pic->format.mastering,
> + sizeof(p_pic->format.mastering) ) )
> + {
> + p_dec->fmt_out.video.mastering = p_pic->format.mastering;
> + format_changed = true;
> + }
> }
> #endif
> #if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 55, 54, 100 ) )
> @@ -1077,10 +1086,20 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
> (const AVContentLightMetadata *) metadata_lt->data;
> p_pic->format.ligthing.MaxCLL = light_meta->MaxCLL;
> p_pic->format.ligthing.MaxFALL = light_meta->MaxFALL;
> + if ( memcmp( &p_dec->fmt_out.video.ligthing,
> + &p_pic->format.ligthing,
> + sizeof(p_pic->format.ligthing) ) )
> + {
> + p_dec->fmt_out.video.ligthing = p_pic->format.ligthing;
> + format_changed = true;
> + }
> }
> #endif
> av_frame_free(&frame);
>
> + if (format_changed)
> + decoder_UpdateVideoFormat( p_dec );
> +
> /* Send decoded frame to vout */
> if (i_pts > VLC_TS_INVALID)
> {
> --
> 2.11.1
>
More information about the vlc-devel
mailing list