asfdemux: No longer queue GOPs now that seeking is fixed.

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.
This commit is contained in:
Edward Hervey 2009-06-28 17:31:11 +02:00
parent e6c6eefefb
commit a3c832405e

View file

@ -1174,8 +1174,15 @@ 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) {
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),
@ -1183,6 +1190,7 @@ gst_asf_demux_find_stream_with_complete_payload (GstASFDemux * demux)
continue;
}
}
}
/* Now see if there's a complete payload queued for this stream */
if (stream->payloads->len > 0) {