mkv:matroska_segment: handle track init failure
authorSteve Lhomme <robUx4@videolabs.io>
Mon, 31 Jul 2017 13:02:56 +0000 (15:02 +0200)
committerJean-Baptiste Kempf <jb@videolan.org>
Mon, 31 Jul 2017 13:16:55 +0000 (15:16 +0200)
We should not use a track that failed to be initialized properly.
The logic of the return value is inverted to be more readable. Before
it would never fail anyway.

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

index 5c81ae6..b2116b7 100644 (file)
@@ -166,7 +166,7 @@ private:
     bool ParseCluster( KaxCluster *cluster, bool b_update_start_time = true, ScopeMode read_fully = SCOPE_ALL_DATA );
     bool ParseSimpleTags( SimpleTag* out, KaxTagSimple *tag, int level = 50 );
     void IndexAppendCluster( KaxCluster *cluster );
-    int32_t TrackInit( mkv_track_t * p_tk );
+    bool TrackInit( mkv_track_t * p_tk );
     void ComputeTrackPriority();
     void EnsureDuration();
 
index 7fa5da4..71c1741 100644 (file)
@@ -692,7 +692,7 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
             return;
         }
 #endif
-        if( TrackInit( &track ) )
+        if( !TrackInit( &track ) )
         {
             msg_Err(&sys.demuxer, "Couldn't init track %u", track.i_number );
             es_format_Clean( &track.fmt );
@@ -1286,13 +1286,13 @@ bool matroska_segment_c::ParseCluster( KaxCluster *cluster, bool b_update_start_
 }
 
 
-int32_t matroska_segment_c::TrackInit( mkv_track_t * p_tk )
+bool matroska_segment_c::TrackInit( mkv_track_t * p_tk )
 {
     if( p_tk->codec.empty() )
     {
         msg_Err( &sys.demuxer, "Empty codec id" );
         p_tk->fmt.i_codec = VLC_CODEC_UNKNOWN;
-        return 0;
+        return true;
     }
 
     struct HandlerPayload {
@@ -1891,7 +1891,8 @@ int32_t matroska_segment_c::TrackInit( mkv_track_t * p_tk )
     {
         msg_Err( &sys.demuxer, "Error when trying to initiate track (codec: %s): %s",
           p_tk->codec.c_str(), e.what () );
+        return false;
     }
 
-    return 0;
+    return true;
 }