diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-01-19 22:42:21 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-01-19 22:42:21 +0000 |
commit | d9c770356c8ad874dd893dabdc06d85492499cd3 (patch) | |
tree | 45a167f0f4fe94b73fa20d87ef9b57e0b360987c | |
parent | 0c9eca74c20701876129e7a5b8a700744abf2820 (diff) | |
download | gst-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.
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | gst-libs/gst/riff/riff-read.c | 24 | ||||
-rw-r--r-- | gst-libs/gst/riff/riff-read.h | 3 | ||||
-rw-r--r-- | gst/cdxaparse/gstcdxaparse.c | 24 |
4 files changed, 50 insertions, 13 deletions
@@ -1,5 +1,17 @@ 2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + * 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. + +2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop): Safety guard. 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). */ diff --git a/gst/cdxaparse/gstcdxaparse.c b/gst/cdxaparse/gstcdxaparse.c index ef9f521f..502d96a8 100644 --- a/gst/cdxaparse/gstcdxaparse.c +++ b/gst/cdxaparse/gstcdxaparse.c @@ -129,6 +129,8 @@ gst_cdxaparse_init (GstCDXAParse * cdxaparse) cdxaparse->state = GST_CDXAPARSE_START; cdxaparse->seek_pending = FALSE; cdxaparse->seek_offset = 0; + + GST_FLAG_SET (cdxaparse, GST_ELEMENT_EVENT_AWARE); } static gboolean @@ -149,7 +151,7 @@ gst_cdxaparse_stream_init (GstCDXAParse * cdxa) } /* Read 'fmt ' header */ -static gboolean +static gboolean G_GNUC_UNUSED gst_cdxaparse_fmt (GstCDXAParse * cdxa) { GstRiffRead *riff = GST_RIFF_READ (cdxa); @@ -165,7 +167,7 @@ gst_cdxaparse_fmt (GstCDXAParse * cdxa) return TRUE; } -static gboolean +static gboolean G_GNUC_UNUSED gst_cdxaparse_other (GstCDXAParse * cdxa) { GstRiffRead *riff = GST_RIFF_READ (cdxa); @@ -203,7 +205,7 @@ gst_cdxaparse_loop (GstElement * element) if (cdxa->state == GST_CDXAPARSE_DATA) { if (cdxa->dataleft > 0) { gint sync; - guint32 got_bytes, desired; + guint got_bytes, desired; GstBuffer *buf = NULL; GstBuffer *outbuf = NULL; @@ -211,11 +213,10 @@ gst_cdxaparse_loop (GstElement * element) desired = cdxa->dataleft; if (desired > 1024) desired = 1024; - if (gst_bytestream_peek (riff->bs, &buf, desired) != desired) { - GST_ELEMENT_ERROR (element, RESOURCE, READ, (NULL), (NULL)); + if (!(buf = gst_riff_peek_element_data (riff, desired, &got_bytes))) return; - } sync = gst_cdxastrip_sync (buf); + gst_buffer_unref (buf); if (sync == -1) { gst_bytestream_flush_fast (riff->bs, desired); cdxa->dataleft -= desired; @@ -237,6 +238,7 @@ gst_cdxaparse_loop (GstElement * element) /* Skip CDXA headers, only keep data */ outbuf = gst_cdxastrip_strip (buf); + GST_DEBUG ("Pushing one buffer"); gst_pad_push (cdxa->srcpad, GST_DATA (outbuf)); if (got_bytes < cdxa->dataleft) @@ -253,15 +255,21 @@ gst_cdxaparse_loop (GstElement * element) case GST_CDXAPARSE_START: if (!gst_cdxaparse_stream_init (cdxa)) return; + cdxa->state = GST_CDXAPARSE_DATA; + cdxa->dataleft = cdxa->datasize = + (guint64) gst_bytestream_length (riff->bs); + cdxa->datastart = gst_bytestream_tell (riff->bs); + break; +#if 0 cdxa->state = GST_CDXAPARSE_FMT; /* fall-through */ case GST_CDXAPARSE_FMT: - if (!gst_cdxaparse_fmt (cdxa)) + if (0 && !gst_cdxaparse_fmt (cdxa)) return; cdxa->state = GST_CDXAPARSE_OTHER; /* fall-through */ - +#endif case GST_CDXAPARSE_OTHER: if (!gst_cdxaparse_other (cdxa)) return; |