diff options
Diffstat (limited to 'gst/avi/gstaviparse.c')
-rw-r--r-- | gst/avi/gstaviparse.c | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/gst/avi/gstaviparse.c b/gst/avi/gstaviparse.c index f4c35f72..d5a2fb06 100644 --- a/gst/avi/gstaviparse.c +++ b/gst/avi/gstaviparse.c @@ -23,8 +23,7 @@ #include <config.h> #include <gst/gst.h> #include <gst/bytestream/bytestream.h> - -#include "riff.h" +#include <gst/riff/riff.h> #define GST_TYPE_AVI_PARSE \ (gst_avi_parse_get_type()) @@ -207,9 +206,10 @@ gst_avi_parse_loop (GstElement *element) { GstAviParse *avi_parse; GstRiffParse *rp; - GstBuffer *buf; - guint32 id; GstRiffReturn res; + gst_riff_chunk chunk; + guint32 data_size; + guint64 pos; g_return_if_fail (element != NULL); g_return_if_fail (GST_IS_AVI_PARSE (element)); @@ -218,40 +218,35 @@ gst_avi_parse_loop (GstElement *element) rp = avi_parse->rp; - res = gst_riff_parse_next_chunk (rp, &id, &buf); + pos = gst_bytestream_tell (rp->bs); + + res = gst_riff_parse_next_chunk (rp, &chunk); if (res == GST_RIFF_EOS) { gst_element_set_eos (element); return; } - switch (id) { + switch (chunk.id) { case GST_RIFF_TAG_RIFF: case GST_RIFF_TAG_LIST: - { - gst_riff_list *list; - - list = (gst_riff_list *) GST_BUFFER_DATA (buf); - - g_print ("%4.4s %08x %4.4s\n", (gchar *)&list->id, list->size, (gchar *)&list->type); + g_print ("%08llx: %4.4s %08x %4.4s\n", pos, (gchar *)&chunk.id, chunk.size, (gchar *)&chunk.type); + data_size = 0; break; - } default: - { - gst_riff_chunk *chunk; - - chunk = (gst_riff_chunk *) GST_BUFFER_DATA (buf); - - g_print ("%4.4s %08x\n", (gchar *)&chunk->id, chunk->size); + g_print ("%08llx: %4.4s %08x\n", pos, (gchar *)&chunk.id, chunk.size); + data_size = chunk.size; break; - } } - if (GST_PAD_IS_USABLE (avi_parse->srcpad)) { + if (GST_PAD_IS_USABLE (avi_parse->srcpad) && data_size) { + GstBuffer *buf; + + gst_riff_parse_peek (rp, &buf, data_size); gst_pad_push (avi_parse->srcpad, buf); } - else { - gst_buffer_unref (buf); - } + data_size = (data_size + 1) & ~1; + + gst_riff_parse_flush (rp, data_size); } static GstElementStateReturn |