vlc/vlc-3.0 | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Fri May 18 13:50:57 2018 +0200| [3dc29f024080d853642f0b01380789096ead09ed] | committer: Thomas Guillem
packetizer: hevc: workaround sps vui broken bitstream more wtf in the wild (cherry picked from commit d8686ad223752f4b8abcf3ace5a2c77af7bb14ea) Signed-off-by: Thomas Guillem <tho...@gllm.fr> > http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=3dc29f024080d853642f0b01380789096ead09ed --- modules/packetizer/hevc_nal.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/modules/packetizer/hevc_nal.c b/modules/packetizer/hevc_nal.c index e4f68afa23..0e044b75fb 100644 --- a/modules/packetizer/hevc_nal.c +++ b/modules/packetizer/hevc_nal.c @@ -435,7 +435,8 @@ static bool hevc_parse_scaling_list_rbsp( bs_t *p_bs ) return true; } -static bool hevc_parse_vui_parameters_rbsp( bs_t *p_bs, hevc_vui_parameters_t *p_vui ) +static bool hevc_parse_vui_parameters_rbsp( bs_t *p_bs, hevc_vui_parameters_t *p_vui, + bool b_broken ) { if( bs_remain( p_bs ) < 10 ) return false; @@ -486,7 +487,7 @@ static bool hevc_parse_vui_parameters_rbsp( bs_t *p_bs, hevc_vui_parameters_t *p p_vui->field_seq_flag = bs_read1( p_bs ); p_vui->frame_field_info_present_flag = bs_read1( p_bs ); - p_vui->default_display_window_flag = bs_read1( p_bs ); + p_vui->default_display_window_flag = !b_broken && bs_read1( p_bs ); if( p_vui->default_display_window_flag ) { p_vui->def_disp.win_left_offset = bs_read_ue( p_bs ); @@ -895,9 +896,24 @@ static bool hevc_parse_sequence_parameter_set_rbsp( bs_t *p_bs, return false; p_sps->vui_parameters_present_flag = bs_read1( p_bs ); - if( p_sps->vui_parameters_present_flag && - !hevc_parse_vui_parameters_rbsp( p_bs, &p_sps->vui ) ) - return false; + if( p_sps->vui_parameters_present_flag ) + { + bs_t rollbackpoint = *p_bs; + if( !hevc_parse_vui_parameters_rbsp( p_bs, &p_sps->vui, false ) && + p_sps->vui.default_display_window_flag && + bs_remain( p_bs ) < 66 ) + { + /* Broken MKV SPS vui bitstreams with missing display_window bits. + * Forced to accept it since some decided to accept it... + * see https://trac.ffmpeg.org/ticket/6644 + * Might break decoders since cropping & clock rate have totally + * funky values when decoded properly */ + *p_bs = rollbackpoint; + memset( &p_sps->vui, 0, sizeof(p_sps->vui) ); + if( !hevc_parse_vui_parameters_rbsp( p_bs, &p_sps->vui, true ) ) + return false; + } + } /* incomplete */ _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits