summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2003-01-21 22:23:32 +0000
committerWim Taymans <wim.taymans@gmail.com>2003-01-21 22:23:32 +0000
commiteee282c521a3ddeec9e0a372dedfe9403fca2375 (patch)
tree62da501783e0a7c98b469fd402e2cbdba403641d
parent7fc99d04b19ec2ad0ad07940d5b5e86a1ada1130 (diff)
- Parse strn tag
Original commit message from CVS: - Parse strn tag - fix flush
-rw-r--r--gst/avi/gstavidemux.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 35925614..903c6c72 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -385,6 +385,20 @@ gst_avi_demux_dmlh (GstAviDemux *avi_demux)
got_bytes = gst_bytestream_peek_bytes (bs, (guint8 **)&dmlh, sizeof (gst_riff_dmlh));
}
+static void
+gst_avi_demux_strn (GstAviDemux *avi_demux, gint len)
+{
+ gchar *name;
+ GstByteStream *bs = avi_demux->bs;
+ guint32 got_bytes;
+
+ got_bytes = gst_bytestream_peek_bytes (bs, (guint8 **)&name, len);
+ if (got_bytes != len)
+ return;
+
+ GST_DEBUG (0, "Stream name: \"%s\"", name);
+}
+
static void
gst_avi_demux_strf_vids (GstAviDemux *avi_demux)
{
@@ -1141,6 +1155,7 @@ gst_avi_demux_handle_sink_event (GstAviDemux *avi_demux)
gst_bytestream_get_status (avi_demux->bs, &remaining, &event);
type = event? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN;
+ GST_DEBUG (0, "avidemux: event %p %d", event, type);
switch (type) {
case GST_EVENT_EOS:
@@ -1315,6 +1330,9 @@ gst_avi_demux_loop (GstElement *element)
break;
}
break;
+ case GST_RIFF_TAG_strn:
+ gst_avi_demux_strn (avi_demux, chunk.size);
+ break;
case GST_RIFF_TAG_dmlh:
gst_avi_demux_dmlh (avi_demux);
break;
@@ -1394,8 +1412,20 @@ gst_avi_demux_loop (GstElement *element)
break;
}
- if (flush)
- gst_bytestream_flush (avi_demux->bs, flush);
+ while (flush) {
+ gboolean res;
+
+ res = gst_bytestream_flush (avi_demux->bs, flush);
+ if (!res) {
+ guint32 remaining;
+ GstEvent *event;
+
+ gst_bytestream_get_status (avi_demux->bs, &remaining, &event);
+ gst_event_unref (event);
+ }
+ else
+ break;
+ }
}
static GstElementStateReturn