vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sat Jul 5 10:27:08 2014 +0300| [dddf319b0bd8b7d04881497f18aab57b04ae437c] | committer: Rémi Denis-Courmont
dshow: fix timestamp conversion (fixes #11725) Zero is a legal REFERENCE_TIME value. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=dddf319b0bd8b7d04881497f18aab57b04ae437c --- modules/access/dshow/dshow.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/modules/access/dshow/dshow.cpp b/modules/access/dshow/dshow.cpp index 389371a..eeac589 100644 --- a/modules/access/dshow/dshow.cpp +++ b/modules/access/dshow/dshow.cpp @@ -1885,9 +1885,7 @@ static int Demux( demux_t *p_demux ) REFERENCE_TIME i_pts, i_end_date; HRESULT hr = sample.p_sample->GetTime( &i_pts, &i_end_date ); - if( hr != VFW_S_NO_STOP_TIME && hr != S_OK ) i_pts = 0; - - if( !i_pts ) + if( hr == S_OK || hr == VFW_S_NO_STOP_TIME ) { if( p_stream->mt.majortype == MEDIATYPE_Video || !p_stream->b_pts ) { @@ -1895,10 +1893,12 @@ static int Demux( demux_t *p_demux ) i_pts = sample.i_timestamp; p_stream->b_pts = true; } + i_pts += (i_pts >= 0) ? +5 : -5; + i_pts /= 10; /* 100-ns to µs conversion */ + i_pts += VLC_TS_0; } - - i_pts /= 10; /* Dshow works with 100 nano-seconds resolution */ - + else + i_pts = VLC_TS_INVALID; #if 0 msg_Dbg( p_demux, "Read() stream: %i, size: %i, PTS: %"PRId64, i_stream, i_data_size, i_pts ); @@ -1909,7 +1909,8 @@ static int Demux( demux_t *p_demux ) p_block->i_pts = p_block->i_dts = i_pts; sample.p_sample->Release(); - es_out_Control( p_demux->out, ES_OUT_SET_PCR, i_pts > 0 ? i_pts : 0 ); + if( i_pts > VLC_TS_INVALID ) + es_out_Control( p_demux->out, ES_OUT_SET_PCR, i_pts ); es_out_Send( p_demux->out, p_stream->p_es, p_block ); i_samples--; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
