From f6b6f72c1c30de3334306e73000ebeb4a054a2b2 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sat, 29 Jan 2005 01:28:34 +0000 Subject: Update to 1.1 API (#165446). Original commit message from CVS: * configure.ac: * ext/musepack/Makefile.am: * ext/musepack/gstmusepackdec.c: (gst_musepackdec_class_init), (gst_musepackdec_init), (gst_musepackdec_dispose), (gst_musepackdec_src_query), (gst_musepackdec_src_convert), (gst_musepack_stream_init), (gst_musepackdec_loop), (gst_musepackdec_change_state): * ext/musepack/gstmusepackdec.cpp: * ext/musepack/gstmusepackdec.h: * ext/musepack/gstmusepackreader.c: (gst_musepack_reader_peek), (gst_musepack_reader_read), (gst_musepack_reader_seek), (gst_musepack_reader_tell), (gst_musepack_reader_get_size), (gst_musepack_reader_canseek), (gst_musepack_init_reader): * ext/musepack/gstmusepackreader.cpp: * ext/musepack/gstmusepackreader.h: Update to 1.1 API (#165446). --- ext/musepack/gstmusepackreader.c | 124 +++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 65 deletions(-) (limited to 'ext/musepack/gstmusepackreader.c') diff --git a/ext/musepack/gstmusepackreader.c b/ext/musepack/gstmusepackreader.c index 07fbcf3d..230d7a3c 100644 --- a/ext/musepack/gstmusepackreader.c +++ b/ext/musepack/gstmusepackreader.c @@ -26,32 +26,23 @@ #include "gstmusepackreader.h" -GstMusepackReader::GstMusepackReader (GstByteStream *bs) -{ - this->bs = bs; - this->eos = false; -} - -GstMusepackReader::~GstMusepackReader (void) -{ -} - -mpc_int32_t -GstMusepackReader::read (void * ptr, mpc_int32_t size) +static mpc_int32_t +gst_musepack_reader_peek (void *this, void *ptr, mpc_int32_t size) { + GstByteStream *bs = this; guint8 *data; gint read; do { - read = gst_bytestream_peek_bytes (this->bs, &data, size); + read = gst_bytestream_peek_bytes (bs, &data, size); if (read != size) { GstEvent *event; guint32 remaining; - gst_bytestream_get_status (this->bs, &remaining, &event); + gst_bytestream_get_status (bs, &remaining, &event); if (!event) { - GST_ELEMENT_ERROR (gst_pad_get_parent (this->bs->pad), + GST_ELEMENT_ERROR (gst_pad_get_parent (bs->pad), RESOURCE, READ, (NULL), (NULL)); goto done; } @@ -61,14 +52,16 @@ GstMusepackReader::read (void * ptr, mpc_int32_t size) gst_event_unref (event); goto done; case GST_EVENT_EOS: - this->eos = true; gst_event_unref (event); goto done; case GST_EVENT_FLUSH: gst_event_unref (event); break; + case GST_EVENT_DISCONTINUOUS: + gst_event_unref (event); + break; default: - gst_pad_event_default (this->bs->pad, event); + gst_pad_event_default (bs->pad, event); break; } } @@ -77,75 +70,76 @@ GstMusepackReader::read (void * ptr, mpc_int32_t size) done: if (read != 0) { memcpy (ptr, data, read); - gst_bytestream_flush_fast (this->bs, read); } return read; } -bool -GstMusepackReader::seek (mpc_int32_t offset) +static mpc_int32_t +gst_musepack_reader_read (void *this, void *ptr, mpc_int32_t size) { - guint8 *dummy; + GstByteStream *bs = this; + gint read; + + /* read = peek + flush */ + if ((read = gst_musepack_reader_peek (this, ptr, size)) > 0) { + gst_bytestream_flush_fast (bs, read); + } + + return read; +} + +static BOOL +gst_musepack_reader_seek (void *this, mpc_int32_t offset) +{ + GstByteStream *bs = this; + guint8 dummy; /* hacky hack - if we're after typefind, we'll fail because * typefind is still typefinding (heh :) ). So read first. */ - if (this->tell () != this->get_size ()) { - guint8 dummy2[1]; - this->read (dummy2, 1); - } + gst_musepack_reader_peek (this, &dummy, 1); - if (!gst_bytestream_seek (this->bs, offset, GST_SEEK_METHOD_SET)) + /* seek */ + if (!gst_bytestream_seek (bs, offset, GST_SEEK_METHOD_SET)) return FALSE; /* get discont */ - while (gst_bytestream_peek_bytes (this->bs, &dummy, 1) != 1) { - GstEvent *event; - guint32 remaining; - - gst_bytestream_get_status (this->bs, &remaining, &event); - if (!event) { - GST_ELEMENT_ERROR (gst_pad_get_parent (this->bs->pad), - RESOURCE, SEEK, (NULL), (NULL)); - return false; - } - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_EOS: - g_warning ("EOS!"); - gst_event_unref (event); - return false; - case GST_EVENT_DISCONTINUOUS: - gst_event_unref (event); - return true; - case GST_EVENT_INTERRUPT: - g_warning ("interrupt!"); - return false; - case GST_EVENT_FLUSH: - gst_event_unref (event); - break; - default: - gst_pad_event_default (this->bs->pad, event); - break; - } - } + if (gst_musepack_reader_peek (this, &dummy, 1) != 1) + return FALSE; - return false; + return TRUE; } -mpc_int32_t -GstMusepackReader::tell (void) +static mpc_int32_t +gst_musepack_reader_tell (void *this) { - return gst_bytestream_tell (this->bs); + GstByteStream *bs = this; + + return gst_bytestream_tell (bs); +} + +static mpc_int32_t +gst_musepack_reader_get_size (void *this) +{ + GstByteStream *bs = this; + + return gst_bytestream_length (bs); } -mpc_int32_t -GstMusepackReader::get_size (void) +static BOOL +gst_musepack_reader_canseek (void *this) { - return gst_bytestream_length (this->bs); + return TRUE; } -bool -GstMusepackReader::canseek (void) +void +gst_musepack_init_reader (mpc_reader * r, GstByteStream * bs) { - return true; + r->data = bs; + + r->read = gst_musepack_reader_read; + r->seek = gst_musepack_reader_seek; + r->tell = gst_musepack_reader_tell; + r->get_size = gst_musepack_reader_get_size; + r->canseek = gst_musepack_reader_canseek; } -- cgit v1.2.1