]> git.sesse.net Git - vlc/commitdiff
MKV: do not read the whole Cluster data when seeking
authorSteve Lhomme <robux4@gmail.com>
Fri, 20 Feb 2015 13:39:35 +0000 (14:39 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Fri, 20 Feb 2015 13:51:38 +0000 (14:51 +0100)
Also pass the cluster to parse, because this interface change will be needed
for an upcoming patch.

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/demux/mkv/matroska_segment.cpp
modules/demux/mkv/matroska_segment.hpp
modules/demux/mkv/matroska_segment_parse.cpp

index eac5a54794b860683ef11066156812e66edbbcfe..df24096fa1d236f95f9c36833aa28a19e8c80bc1 100644 (file)
@@ -706,7 +706,7 @@ bool matroska_segment_c::Preload( )
             cluster = (KaxCluster*)el;
 
             i_cluster_pos = i_start_pos = cluster->GetElementPosition();
-            ParseCluster( );
+            ParseCluster( cluster );
 
             ep->Down();
             /* stop pre-parsing the stream */
@@ -887,7 +887,7 @@ void matroska_segment_c::Seek( mtime_t i_date, mtime_t i_time_offset, int64_t i_
                     ( i_index > 0 &&
                       p_indexes[i_index - 1].i_position < (int64_t)cluster->GetElementPosition() ) )
                 {
-                    ParseCluster(false);
+                    ParseCluster( cluster, false, SCOPE_NO_DATA );
                     IndexAppendCluster( cluster );
                 }
                 if( es.I_O().getFilePointer() >= (unsigned) i_global_position )
index 9245c587231d666b5c15bbfef604a2af20e0cf84..3ef8e37241f588b27edda23f43c2262443a5bab9 100644 (file)
@@ -158,7 +158,7 @@ private:
     void ParseTracks( KaxTracks *tracks );
     void ParseChapterAtom( int i_level, KaxChapterAtom *ca, chapter_item_c & chapters );
     void ParseTrackEntry( KaxTrackEntry *m );
-    void ParseCluster( bool b_update_start_time = true );
+    void ParseCluster( KaxCluster *cluster, bool b_update_start_time = true, ScopeMode read_fully = SCOPE_ALL_DATA );
     SimpleTag * ParseSimpleTags( KaxTagSimple *tag, int level = 50 );
     void IndexAppendCluster( KaxCluster *cluster );
     int32_t TrackInit( mkv_track_t * p_tk );
index d4a065c6aa32d335f118eb1ee9eee06266cb6dcf..751c824eb073c476518dd9efb9f811c62dc23b79 100644 (file)
@@ -1237,7 +1237,7 @@ void matroska_segment_c::ParseChapters( KaxChapters *chapters )
     }
 }
 
-void matroska_segment_c::ParseCluster( bool b_update_start_time )
+void matroska_segment_c::ParseCluster( KaxCluster *cluster, bool b_update_start_time, ScopeMode read_fully )
 {
     EbmlElement *el;
     EbmlMaster  *m;
@@ -1252,7 +1252,7 @@ void matroska_segment_c::ParseCluster( bool b_update_start_time )
     }
     try
     {
-        m->Read( es, EBML_CONTEXT(cluster), i_upper_level, el, true );
+        m->Read( es, EBML_CONTEXT(cluster), i_upper_level, el, true, read_fully );
     }
     catch(...)
     {