summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstaviparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/avi/gstaviparse.c')
-rw-r--r--gst/avi/gstaviparse.c43
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