[vlc-devel] [PATCH] demux: mkv: add the first cluster position to seeker
Zhao Zhili
quinkblack at foxmail.com
Wed Sep 12 05:42:30 CEST 2018
Otherwise SegmentSeeker::mkv_jump_to may miss the first cluster.
---
Missing the first cluster leads to blured screen for the sample
https://drive.google.com/open?id=1Tu8K2Y63mFnYCMaHo4KzvmKNkRCB3ewR
I think the seeker needs some kind of fix/cleanup but I don't know how.
modules/demux/mkv/matroska_segment.cpp | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/modules/demux/mkv/matroska_segment.cpp b/modules/demux/mkv/matroska_segment.cpp
index ef89457..837a3b2 100644
--- a/modules/demux/mkv/matroska_segment.cpp
+++ b/modules/demux/mkv/matroska_segment.cpp
@@ -638,13 +638,17 @@ bool matroska_segment_c::Preload( )
cluster = kc_ptr;
- // add first cluster as trusted seekpoint for all tracks
- for( tracks_map_t::const_iterator it = tracks.begin();
- it != tracks.end(); ++it )
+ if( sys.b_seekable )
{
- _seeker.add_seekpoint( it->first,
- SegmentSeeker::Seekpoint( cluster->GetElementPosition(), -1,
- SegmentSeeker::Seekpoint::TrustLevel::QUESTIONABLE ) );
+ _seeker.add_cluster_position( cluster->GetElementPosition() );
+ // add first cluster as questionable seekpoint for all tracks
+ for( tracks_map_t::const_iterator it = tracks.begin();
+ it != tracks.end(); ++it )
+ {
+ _seeker.add_seekpoint( it->first,
+ SegmentSeeker::Seekpoint( cluster->GetElementPosition(), -1,
+ SegmentSeeker::Seekpoint::TrustLevel::QUESTIONABLE ) );
+ }
}
/* stop pre-parsing the stream */
--
2.9.5
More information about the vlc-devel
mailing list