Fix Vorbis streams failing to decode in some files, where cluster_time isn't 0, becau...
authorMaciej Katafiasz <mathrick@mathrick.org>
Tue, 28 Dec 2004 16:39:48 +0000 (16:39 +0000)
committerMaciej Katafiasz <mathrick@mathrick.org>
Tue, 28 Dec 2004 16:39:48 +0000 (16:39 +0000)
Original commit message from CVS:
Fix Vorbis streams failing to decode in some files, where cluster_time isn't 0,
because then it doesn't send codec_priv before actual data.

gst/matroska/matroska-demux.c
gst/matroska/matroska-demux.h

index ed243e7..7ba846b 100644 (file)
@@ -849,6 +849,7 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux)
       caps = gst_matroska_demux_audio_caps (audiocontext,
           context->codec_id,
           context->codec_priv, context->codec_priv_size, demux);
+      audiocontext->first_frame = TRUE;
       break;
     }
 
@@ -1890,8 +1891,10 @@ gst_matroska_demux_parse_blockgroup (GstMatroskaDemux * demux,
             break;
         }
 
-        if ((cluster_time + time == 0) &&
-            (!strcmp (demux->src[stream]->codec_id,
+        if (((cluster_time + time == 0) ||
+                ((GstMatroskaTrackAudioContext *) demux->src[stream])->
+                first_frame)
+            && (!strcmp (demux->src[stream]->codec_id,
                     GST_MATROSKA_CODEC_ID_AUDIO_VORBIS))) {
           /* start of the stream and vorbis audio, need to send the codec_priv
            * data as first three packets */
@@ -1900,6 +1903,8 @@ gst_matroska_demux_parse_blockgroup (GstMatroskaDemux * demux,
           gint i;
           GstBuffer *priv;
 
+          ((GstMatroskaTrackAudioContext *) demux->src[stream])->first_frame =
+              FALSE;
           p = (unsigned char *) demux->src[stream]->codec_priv;
           offset = 3;
           for (i = 0; i < 2; i++) {
index 95a2702..9e21a89 100644 (file)
@@ -88,8 +88,7 @@ typedef struct _GstMatroskaDemux {
   guint64        time_scale;
 
   /* length, position (time, ns) */
-  guint64        duration,
-                pos;
+  guint64        duration, pos;
 
   /* a possible pending seek */
   guint64        seek_pending;