summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2002-06-09 14:26:50 +0000
committerWim Taymans <wim.taymans@gmail.com>2002-06-09 14:26:50 +0000
commit32c37620a5bce7d01b731292e16be4b778ca20c7 (patch)
tree6098e1c09b28d791f5d6f5e6628c9082339b1291 /gst
parent65c08a44033d9cd76b5862fc11c979f7c709eb45 (diff)
Fix sync on avidemux
Original commit message from CVS: Fix sync on avidemux
Diffstat (limited to 'gst')
-rw-r--r--gst/avi/gstavidemux.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 1fc8cb11..257ca13f 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -602,8 +602,9 @@ gst_avi_demux_strf_iavs (GstAviDemux *avi_demux)
static void
gst_avi_debug_entry (const gchar *prefix, gst_avi_index_entry *entry)
{
- GST_DEBUG (0, "%s: %05d %d %08llx %05d %08lld %08x %08x %08x", prefix, entry->index_nr, entry->stream_nr,
- entry->bytes_before, entry->frames_before, entry->ts, entry->flags, entry->offset, entry->size);
+ GST_DEBUG (0, "%s: %05d %d %08llx %05d %08lld %08x %08x (%d) %08x", prefix, entry->index_nr, entry->stream_nr,
+ entry->bytes_before, entry->frames_before, entry->ts, entry->flags, entry->offset,
+ entry->offset, entry->size);
}
static void
@@ -871,7 +872,7 @@ static gint32
gst_avi_demux_sync_streams (GstAviDemux *avi_demux, guint64 time)
{
gint i;
- guint64 min_index = -1;
+ guint32 min_index = G_MAXUINT;
avi_stream_context *stream;
gst_avi_index_entry *entry;
@@ -887,6 +888,7 @@ gst_avi_demux_sync_streams (GstAviDemux *avi_demux, guint64 time)
min_index = MIN (entry->index_nr, min_index);
}
}
+ GST_DEBUG (0, "first index at %d", min_index);
/* now we know the entry we need to sync on. calculate number of frames to
* skip fro there on and the stream stats */
@@ -906,6 +908,7 @@ gst_avi_demux_sync_streams (GstAviDemux *avi_demux, guint64 time)
GST_DEBUG (0, "%d skip %d", stream->num, stream->skip);
}
+ GST_DEBUG (0, "final index at %d", min_index);
return min_index;
}
@@ -964,6 +967,8 @@ gst_avi_demux_handle_src_event (GstPad *pad, GstEvent *event)
min_index = gst_avi_demux_sync_streams (avi_demux, desired_offset);
seek_entry = &avi_demux->index_entries[min_index];
+ gst_avi_debug_entry ("syncing to entry", seek_entry);
+
avi_demux->seek_offset = seek_entry->offset + avi_demux->index_offset;
avi_demux->seek_pending = TRUE;
avi_demux->last_seek = seek_entry->ts;
@@ -1001,9 +1006,6 @@ gst_avi_demux_handle_sink_event (GstAviDemux *avi_demux)
case GST_EVENT_EOS:
gst_pad_event_default (avi_demux->sinkpad, event);
break;
- case GST_EVENT_SEEK:
- g_warning ("seek event");
- break;
case GST_EVENT_FLUSH:
g_warning ("flush event");
break;
@@ -1014,6 +1016,8 @@ gst_avi_demux_handle_sink_event (GstAviDemux *avi_demux)
for (i = 0; i < avi_demux->num_streams; i++) {
avi_stream_context *stream = &avi_demux->stream[i];
+ GST_DEBUG (GST_CAT_EVENT, "sending discont on %d %lld + %lld = %lld", i,
+ avi_demux->last_seek, stream->delay, avi_demux->last_seek + stream->delay);
event = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME,
avi_demux->last_seek + stream->delay, NULL);
gst_pad_push (stream->pad, GST_BUFFER (event));
@@ -1189,6 +1193,9 @@ gst_avi_demux_process_chunk (GstAviDemux *avi_demux, guint64 *filepos,
if (stream->strh.init_frames == stream->current_frame && stream->delay==0)
stream->delay = next_ts;
+ stream->current_frame++;
+ stream->current_byte += *chunksize;
+
if (stream->skip) {
stream->skip--;
}
@@ -1206,15 +1213,13 @@ gst_avi_demux_process_chunk (GstAviDemux *avi_demux, guint64 *filepos,
/* FIXME, do some flush event here */
stream->need_flush = FALSE;
}
- GST_DEBUG (0, "send stream %d: %lld %d %lld %08x", stream_id, next_ts, stream->current_frame,
+ GST_DEBUG (0, "send stream %d: %lld %d %lld %08x", stream_id, next_ts, stream->current_frame - 1,
stream->delay, *chunksize);
gst_pad_push(stream->pad, buf);
}
}
}
- stream->current_frame++;
- stream->current_byte += *chunksize;
*chunksize = (*chunksize + 1) & ~1;
break;