vlc/vlc-3.0 | branch: master | Steve Lhomme <[email protected]> | Fri Jan 19 18:07:55 2018 +0100| [60c219a4c063b2d0308bce3d9d820bfc37ad11a4] | committer: Jean-Baptiste Kempf
demux:mkv: fix trying to seek before the first audio/video We just seek to the first known Cluster. Fixes #19286 (cherry picked from commit 117bf6fea8eb81d6c8d2616f55cad51999efe44a) Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=60c219a4c063b2d0308bce3d9d820bfc37ad11a4 --- modules/demux/mkv/matroska_segment_seeker.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/modules/demux/mkv/matroska_segment_seeker.cpp b/modules/demux/mkv/matroska_segment_seeker.cpp index 6825ef195f..027a973279 100644 --- a/modules/demux/mkv/matroska_segment_seeker.cpp +++ b/modules/demux/mkv/matroska_segment_seeker.cpp @@ -151,6 +151,23 @@ SegmentSeeker::find_greatest_seekpoints_in_range( fptr_t start_fpos, mtime_t end tpoints.insert( tracks_seekpoint_t::value_type( it->first, sp ) ); } + if (tpoints.empty()) + { + // try a further pts + for( tracks_seekpoints_t::const_iterator it = _tracks_seekpoints.begin(); it != _tracks_seekpoints.end(); ++it ) + { + if ( std::find( filter_tracks.begin(), filter_tracks.end(), it->first ) == filter_tracks.end() ) + continue; + + Seekpoint sp = get_first_seekpoint_around( end_pts, it->second ); + + if( sp.fpos < start_fpos ) + continue; + + tpoints.insert( tracks_seekpoint_t::value_type( it->first, sp ) ); + } + } + return tpoints; } @@ -198,6 +215,10 @@ SegmentSeeker::get_seekpoints_around( mtime_t pts, seekpoints_t const& seekpoint iterator const it_end = seekpoints.end(); iterator const it_middle = greatest_lower_bound( it_begin, it_end, needle ); + if ( it_middle != it_end && (*it_middle).pts > pts) + // found nothing low enough, use the first one + return seekpoint_pair_t( *it_begin, Seekpoint() ); + iterator it_before = it_middle; iterator it_after = it_middle == it_end ? it_middle : next_( it_middle ) ; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
