vlc | branch: master | Zhao Zhili <[email protected]> | Mon Jun 25 23:40:19 2018 +0800| [9c55803e738f2a0aa26c0ec1c52c0e2ad14d221b] | committer: Thomas Guillem
demux: avformat: refactor ResetTime 1. Function definition doesn't match prototype 2. It made an underlying assumption that CLOCK_FREQ is equal to AV_TIME_BASE Signed-off-by: Thomas Guillem <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9c55803e738f2a0aa26c0ec1c52c0e2ad14d221b --- modules/demux/avformat/demux.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/modules/demux/avformat/demux.c b/modules/demux/avformat/demux.c index b9125095a3..d8aa093de2 100644 --- a/modules/demux/avformat/demux.c +++ b/modules/demux/avformat/demux.c @@ -926,23 +926,39 @@ static void UpdateSeekPoint( demux_t *p_demux, int64_t i_time ) } } -static void ResetTime( demux_t *p_demux, vlc_tick_t i_time ) +static void ResetTime( demux_t *p_demux, int64_t i_time ) { demux_sys_t *p_sys = p_demux->p_sys; + vlc_tick_t t; if( p_sys->ic->start_time == (int64_t)AV_NOPTS_VALUE || i_time < 0 ) - i_time = VLC_TS_INVALID; - else if( i_time == 0 ) - i_time = 1; + { + t = VLC_TS_INVALID; + } + else + { + if( CLOCK_FREQ == AV_TIME_BASE ) + { + t = i_time; + } + else + { + lldiv_t q = lldiv( i_time, AV_TIME_BASE ); + t = q.quot * CLOCK_FREQ + q.rem * CLOCK_FREQ / AV_TIME_BASE; + } + + if( t == VLC_TS_INVALID ) + t = VLC_TS_0; + } - p_sys->i_pcr = i_time; + p_sys->i_pcr = t; for( unsigned i = 0; i < p_sys->i_tracks; i++ ) p_sys->tracks[i].i_pcr = VLC_TS_INVALID; - if( i_time != VLC_TS_INVALID ) + if( t != VLC_TS_INVALID ) { - es_out_Control( p_demux->out, ES_OUT_SET_NEXT_DISPLAY_TIME, i_time ); - UpdateSeekPoint( p_demux, i_time ); + es_out_Control( p_demux->out, ES_OUT_SET_NEXT_DISPLAY_TIME, t ); + UpdateSeekPoint( p_demux, t ); } } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
