vlc | branch: master | Steve Lhomme <[email protected]> | Thu Apr 6 17:09:02 2017 +0200| [be268cde762bd4274fecdbf59d5ba9f8a1b268e9] | committer: Jean-Baptiste Kempf
avcodec: video: update the decoder output when HDR10 metadata change 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. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=be268cde762bd4274fecdbf59d5ba9f8a1b268e9 --- 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 8454c78e90..629a216117 100644 --- a/modules/codec/avcodec/video.c +++ b/modules/codec/avcodec/video.c @@ -1049,6 +1049,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, @@ -1079,6 +1080,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, 60, 100 ) ) @@ -1091,10 +1100,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) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
