Revert "Revert "qtdemux: fill timestamp table completely""

This reverts commit 9f022c8a8503c2ce0fa617fdb50e41706dd412f5.

Sorry, I was thinking about the wrong module.
This commit is contained in:
Wim Taymans 2009-06-07 20:54:06 +02:00 committed by Wim Taymans
parent 9f022c8a85
commit 9050fb26e9

View File

@ -3464,6 +3464,7 @@ qtdemux_parse_samples (GstQTDemux * qtdemux, QtDemuxStream * stream,
done2: done2:
n_sample_times = QT_UINT32 (stts_data + 12); n_sample_times = QT_UINT32 (stts_data + 12);
GST_LOG_OBJECT (qtdemux, "%u timestamp blocks", n_sample_times);
timestamp = 0; timestamp = 0;
stream->min_duration = 0; stream->min_duration = 0;
time = 0; time = 0;
@ -3477,14 +3478,17 @@ qtdemux_parse_samples (GstQTDemux * qtdemux, QtDemuxStream * stream,
stts_data += 4; stts_data += 4;
duration = QT_UINT32 (stts_data); duration = QT_UINT32 (stts_data);
stts_data += 4; stts_data += 4;
GST_LOG_OBJECT (qtdemux, "block %d, %u timestamps, duration %u ", i, n,
duration);
/* take first duration for fps */ /* take first duration for fps */
if (G_UNLIKELY (stream->min_duration == 0)) if (G_UNLIKELY (stream->min_duration == 0))
stream->min_duration = duration; stream->min_duration = duration;
for (j = 0; j < n; j++) { for (j = 0; j < n; j++) {
GST_DEBUG_OBJECT (qtdemux, "sample %d: timestamp %" GST_TIME_FORMAT, GST_DEBUG_OBJECT (qtdemux,
index, GST_TIME_ARGS (timestamp)); "sample %d: index %d, timestamp %" GST_TIME_FORMAT, index, j,
GST_TIME_ARGS (timestamp));
samples[index].timestamp = timestamp; samples[index].timestamp = timestamp;
/* add non-scaled values to avoid rounding errors */ /* add non-scaled values to avoid rounding errors */
@ -3497,6 +3501,16 @@ qtdemux_parse_samples (GstQTDemux * qtdemux, QtDemuxStream * stream,
goto done3; goto done3;
} }
} }
/* fill up empty timestamps with the last timestamp, this can happen when
* the last samples do not decoder and so we don't have timestamps for them.
* We however look at the last timestamp to estimate the track length so we
* need something in here. */
for (; index < n_samples; index++) {
GST_DEBUG_OBJECT (qtdemux, "fill sample %d: timestamp %" GST_TIME_FORMAT,
index, GST_TIME_ARGS (timestamp));
samples[index].timestamp = timestamp;
samples[index].duration = -1;
}
done3: done3:
/* sample sync, can be NULL */ /* sample sync, can be NULL */
@ -3783,7 +3797,8 @@ done:
stream->segments[0].media_stop = stream_duration; stream->segments[0].media_stop = stream_duration;
stream->segments[0].rate = 1.0; stream->segments[0].rate = 1.0;
GST_DEBUG_OBJECT (qtdemux, "created dummy segment"); GST_DEBUG_OBJECT (qtdemux, "created dummy segment %" GST_TIME_FORMAT,
GST_TIME_ARGS (stream_duration));
stream->n_segments = 1; stream->n_segments = 1;
} }
GST_DEBUG_OBJECT (qtdemux, "using %d segments", stream->n_segments); GST_DEBUG_OBJECT (qtdemux, "using %d segments", stream->n_segments);