diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2009-06-07 20:54:06 +0200 |
---|---|---|
committer | Wim Taymans <wim@metal.(none)> | 2009-06-07 20:54:06 +0200 |
commit | 9050fb26e954eaa563ac872f410a870aade204e2 (patch) | |
tree | 1c276f476ae365f91a13e095705ed4c03360d85d /gst/qtdemux | |
parent | 9f022c8a8503c2ce0fa617fdb50e41706dd412f5 (diff) |
Revert "Revert "qtdemux: fill timestamp table completely""
This reverts commit 9f022c8a8503c2ce0fa617fdb50e41706dd412f5.
Sorry, I was thinking about the wrong module.
Diffstat (limited to 'gst/qtdemux')
-rw-r--r-- | gst/qtdemux/qtdemux.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 8f800697..4841222e 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -3464,6 +3464,7 @@ qtdemux_parse_samples (GstQTDemux * qtdemux, QtDemuxStream * stream, done2: n_sample_times = QT_UINT32 (stts_data + 12); + GST_LOG_OBJECT (qtdemux, "%u timestamp blocks", n_sample_times); timestamp = 0; stream->min_duration = 0; time = 0; @@ -3477,14 +3478,17 @@ qtdemux_parse_samples (GstQTDemux * qtdemux, QtDemuxStream * stream, stts_data += 4; duration = QT_UINT32 (stts_data); stts_data += 4; + GST_LOG_OBJECT (qtdemux, "block %d, %u timestamps, duration %u ", i, n, + duration); /* take first duration for fps */ if (G_UNLIKELY (stream->min_duration == 0)) stream->min_duration = duration; for (j = 0; j < n; j++) { - GST_DEBUG_OBJECT (qtdemux, "sample %d: timestamp %" GST_TIME_FORMAT, - index, GST_TIME_ARGS (timestamp)); + GST_DEBUG_OBJECT (qtdemux, + "sample %d: index %d, timestamp %" GST_TIME_FORMAT, index, j, + GST_TIME_ARGS (timestamp)); samples[index].timestamp = timestamp; /* add non-scaled values to avoid rounding errors */ @@ -3497,6 +3501,16 @@ qtdemux_parse_samples (GstQTDemux * qtdemux, QtDemuxStream * stream, 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: /* sample sync, can be NULL */ @@ -3783,7 +3797,8 @@ done: stream->segments[0].media_stop = stream_duration; 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; } GST_DEBUG_OBJECT (qtdemux, "using %d segments", stream->n_segments); |