asfdemux: No longer queue GOPs now that seeking is fixed.
authorEdward Hervey <bilboed@bilboed.com>
Sun, 28 Jun 2009 15:31:11 +0000 (17:31 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Sun, 28 Jun 2009 15:50:45 +0000 (17:50 +0200)
We now *always* seek to the keyframe just before our requested position.
When we encounter the first keyframe and we were not accurate (therefore doing
keyframe seeking), we update the segment start position to the keyframe timestamp.

gst/asfdemux/gstasfdemux.c

index 8124aca..c8557ba 100644 (file)
@@ -1174,13 +1174,21 @@ gst_asf_demux_find_stream_with_complete_payload (GstASFDemux * demux)
 
       last_idx = stream->payloads->len - 1;
       payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
-      if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
-          payload->ts < demux->segment.start) {
-        GST_DEBUG_OBJECT (stream->pad, "Last queued payload has timestamp %"
-            GST_TIME_FORMAT " which is before our segment start %"
-            GST_TIME_FORMAT ", not pushing yet", GST_TIME_ARGS (payload->ts),
-            GST_TIME_ARGS (demux->segment.start));
-        continue;
+      if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+              (payload->ts < demux->segment.start))) {
+        if (G_UNLIKELY ((!demux->accurate) && payload->keyframe)) {
+          GST_DEBUG_OBJECT (stream->pad,
+              "Found keyframe, updating segment start to %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (payload->ts));
+          demux->segment.start = payload->ts;
+          demux->segment.time = payload->ts;
+        } else {
+          GST_DEBUG_OBJECT (stream->pad, "Last queued payload has timestamp %"
+              GST_TIME_FORMAT " which is before our segment start %"
+              GST_TIME_FORMAT ", not pushing yet", GST_TIME_ARGS (payload->ts),
+              GST_TIME_ARGS (demux->segment.start));
+          continue;
+        }
       }
     }