summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--gst-libs/gst/riff/riff-read.c24
-rw-r--r--gst-libs/gst/riff/riff-read.h3
-rw-r--r--gst/cdxaparse/gstcdxaparse.c24
4 files changed, 50 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index ed2a8b16..116ebcc5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;