vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Mar 25 23:11:29 2015 +0100| [a3512c100b5f5d98a2d935959bb01011f2660042] | committer: Francois Cartegnie
packetizer: h264: reuse interlaced frame dts and interpolate pts (#6539) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a3512c100b5f5d98a2d935959bb01011f2660042 --- modules/packetizer/h264.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/modules/packetizer/h264.c b/modules/packetizer/h264.c index 89cca0b..56e1e60 100644 --- a/modules/packetizer/h264.c +++ b/modules/packetizer/h264.c @@ -134,6 +134,7 @@ struct decoder_sys_t /* */ mtime_t i_frame_pts; mtime_t i_frame_dts; + int i_fields_dts; /* */ uint32_t i_cc_flags; @@ -251,6 +252,7 @@ static int Open( vlc_object_t *p_this ) p_sys->i_frame_dts = VLC_TS_INVALID; p_sys->i_frame_pts = VLC_TS_INVALID; + p_sys->i_fields_dts = 0; /* Setup properties */ es_format_Copy( &p_dec->fmt_out, &p_dec->fmt_in ); @@ -690,6 +692,7 @@ static block_t *ParseNALBlock( decoder_t *p_dec, bool *pb_ts_used, block_t *p_fr { p_sys->i_frame_dts = i_frag_dts; p_sys->i_frame_pts = i_frag_pts; + p_sys->i_fields_dts = 2; *pb_ts_used = true; } return p_pic; @@ -789,10 +792,20 @@ static block_t *OutputPicture( decoder_t *p_dec ) } } + p_sys->i_fields_dts -= (1 + p_sys->b_frame_mbs_only); + if( p_sys->i_fields_dts <= 0 ) + { + p_sys->i_frame_dts = VLC_TS_INVALID; + p_sys->i_frame_pts = VLC_TS_INVALID; + } + else if( p_sys->b_timing_info_present_flag ) + { + p_sys->i_frame_pts += CLOCK_FREQ * p_sys->i_num_units_in_tick / p_sys->i_time_scale; + } + else p_sys->i_frame_pts = VLC_TS_INVALID; + p_sys->slice.i_frame_type = 0; p_sys->p_frame = NULL; - p_sys->i_frame_dts = VLC_TS_INVALID; - p_sys->i_frame_pts = VLC_TS_INVALID; p_sys->b_frame_sps = false; p_sys->b_frame_pps = false; p_sys->b_slice = false; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
