From: Ronald S. Bultje Date: Mon, 29 Nov 2004 12:41:03 +0000 (+0000) Subject: gst/avi/gstavidemux.c: Fix quite humiliating bug in omitting 0-sized index chunks... X-Git-Tag: BRANCH-GSTREAMER-0_8-ROOT~320 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9506620fe2758c8c4e56747151f08e4d80b5a4bf;p=platform%2Fupstream%2Fgst-plugins-good.git gst/avi/gstavidemux.c: Fix quite humiliating bug in omitting 0-sized index chunks but forgetting to count them for ti... Original commit message from CVS: * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index), (gst_avi_demux_massage_index): Fix quite humiliating bug in omitting 0-sized index chunks but forgetting to count them for timestamps. --- diff --git a/ChangeLog b/ChangeLog index 0f88b77..a3ec0f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2004-11-29 Ronald S. Bultje + * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index), + (gst_avi_demux_massage_index): + Fix quite humiliating bug in omitting 0-sized index chunks but + forgetting to count them for timestamps. + +2004-11-29 Ronald S. Bultje + * ext/a52dec/gsta52dec.c: (gst_a52dec_loop): Actually leave the loop if we failed to sync. Don't crash. diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index 2b5bc76..31a5617 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -1244,7 +1244,7 @@ gst_avi_demux_stream_index (GstAviDemux * avi, entry.size = GUINT32_FROM_LE (_entry->size); target = &index_entries[i]; - if (entry.id == GST_RIFF_rec || entry.id == 0 || entry.size == 0) + if (entry.id == GST_RIFF_rec || entry.id == 0) continue; stream_nr = CHUNKID_TO_STREAMNR (entry.id); @@ -1296,8 +1296,11 @@ gst_avi_demux_stream_index (GstAviDemux * avi, stream->total_bytes += target->size; stream->total_frames++; - GST_DEBUG ("Adding index entry of size %u at offset %" - G_GUINT64_FORMAT, target->size, target->offset); + GST_DEBUG ("Adding index entry %d (%d) for stream %d of size %u " + "at offset %" G_GUINT64_FORMAT " and time %" GST_TIME_FORMAT, + target->index_nr, stream->total_frames - 1, + target->stream_nr, target->size, target->offset, + GST_TIME_ARGS (target->ts)); list = g_list_prepend (list, target); } @@ -1623,16 +1626,24 @@ gst_avi_demux_massage_index (GstAviDemux * avi, /* init frames */ for (i = 0; i < avi->num_streams; i++) { + GstFormat fmt = GST_FORMAT_TIME; + stream = &avi->stream[i]; if (stream->strh->type == GST_RIFF_FCC_vids) { - if (stream->strh->rate != 0) - stream->delay = stream->strh->init_frames * GST_SECOND * - stream->strh->scale / stream->strh->rate; + if (!gst_pad_convert (stream->pad, + GST_FORMAT_DEFAULT, stream->strh->init_frames, + &fmt, &stream->delay)) { + stream->delay = 0; + } } else { - if (stream->total_frames * stream->bitrate != 0) - stream->delay = GST_SECOND * stream->strh->init_frames * - stream->strh->length / (stream->total_frames * stream->bitrate); + if (!gst_pad_convert (stream->pad, + GST_FORMAT_DEFAULT, stream->strh->init_frames, + &fmt, &stream->delay)) { + stream->delay = 0; + } } + GST_LOG ("Adding init_time=%" GST_TIME_FORMAT " to stream %d", + GST_TIME_ARGS (stream->delay), i); } for (one = list; one != NULL; one = one->next) { entry = one->data;