summaryrefslogtreecommitdiffstats
path: root/gst-libs/gst/riff
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-19 22:42:21 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-19 22:42:21 +0000
commitd9c770356c8ad874dd893dabdc06d85492499cd3 (patch)
tree45a167f0f4fe94b73fa20d87ef9b57e0b360987c /gst-libs/gst/riff
parent0c9eca74c20701876129e7a5b8a700744abf2820 (diff)
downloadgst-plugins-bad-d9c770356c8ad874dd893dabdc06d85492499cd3.tar.gz
gst-plugins-bad-d9c770356c8ad874dd893dabdc06d85492499cd3.tar.bz2
gst-plugins-bad-d9c770356c8ad874dd893dabdc06d85492499cd3.zip
gst-libs/gst/riff/riff-read.*: Add _peek version (req'ed in CDXA).
Original commit message from CVS: * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_element_data), (gst_riff_read_element_data): * gst-libs/gst/riff/riff-read.h: Add _peek version (req'ed in CDXA). * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_init), (gst_cdxaparse_loop): Fix parsing in playbin. * gst/playback/gstdecodebin.c: (close_pad_link): Ignore current_ pads, they cause major annoyance.
Diffstat (limited to 'gst-libs/gst/riff')
-rw-r--r--gst-libs/gst/riff/riff-read.c24
-rw-r--r--gst-libs/gst/riff/riff-read.h3
2 files changed, 22 insertions, 5 deletions
diff --git a/gst-libs/gst/riff/riff-read.c b/gst-libs/gst/riff/riff-read.c
index 4d379a7b..fbbbae26 100644
--- a/gst-libs/gst/riff/riff-read.c
+++ b/gst-libs/gst/riff/riff-read.c
@@ -260,7 +260,7 @@ gst_riff_peek_head (GstRiffRead * riff,
*/
GstBuffer *
-gst_riff_read_element_data (GstRiffRead * riff, guint length, guint * got_bytes)
+gst_riff_peek_element_data (GstRiffRead * riff, guint length, guint * got_bytes)
{
GstBuffer *buf = NULL;
guint32 got;
@@ -272,14 +272,28 @@ gst_riff_read_element_data (GstRiffRead * riff, guint length, guint * got_bytes)
return NULL;
}
+ if (got_bytes)
+ *got_bytes = got;
+
+ return buf;
+}
+
+GstBuffer *
+gst_riff_read_element_data (GstRiffRead * riff, guint length, guint * got_bytes)
+{
+ GstBuffer *buf;
+
+ if (!(buf = gst_riff_peek_element_data (riff, length, got_bytes)))
+ return NULL;
+
/* we need 16-bit alignment */
if (length & 1)
length++;
- gst_bytestream_flush (riff->bs, length);
-
- if (got_bytes)
- *got_bytes = got;
+ if (!gst_bytestream_flush (riff->bs, length)) {
+ gst_buffer_unref (buf);
+ return NULL;
+ }
return buf;
}
diff --git a/gst-libs/gst/riff/riff-read.h b/gst-libs/gst/riff/riff-read.h
index d44c4ed7..a0c12606 100644
--- a/gst-libs/gst/riff/riff-read.h
+++ b/gst-libs/gst/riff/riff-read.h
@@ -85,6 +85,9 @@ gboolean gst_riff_read_header (GstRiffRead *read,
GstBuffer *gst_riff_read_element_data (GstRiffRead *riff,
guint length,
guint *got_bytes);
+GstBuffer *gst_riff_peek_element_data (GstRiffRead *riff,
+ guint length,
+ guint *got_bytes);
/*
* Utility functions (including byteswapping).
*/