diff -r 567bb019e3e3 -r 7e817e7e631c gst_plugins_base/gst-libs/gst/audio/gstaudiosrc.c --- a/gst_plugins_base/gst-libs/gst/audio/gstaudiosrc.c Tue Aug 31 15:30:33 2010 +0300 +++ b/gst_plugins_base/gst-libs/gst/audio/gstaudiosrc.c Wed Sep 01 12:16:41 2010 +0100 @@ -71,6 +71,10 @@ #include "gstaudiosrc.h" +#ifdef __SYMBIAN32__ +#include +#endif + GST_DEBUG_CATEGORY_STATIC (gst_audio_src_debug); #define GST_CAT_DEFAULT gst_audio_src_debug @@ -199,8 +203,6 @@ GstAudioSrcClass *csrc; GstAudioRingBuffer *abuf = GST_AUDIORING_BUFFER (buf); ReadFunc readfunc; - GstMessage *message; - GValue val = { 0 }; src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf)); csrc = GST_AUDIO_SRC_GET_CLASS (src); @@ -211,35 +213,26 @@ if (readfunc == NULL) goto no_function; - g_value_init (&val, G_TYPE_POINTER); - g_value_set_pointer (&val, src->thread); - message = gst_message_new_stream_status (GST_OBJECT_CAST (buf), - GST_STREAM_STATUS_TYPE_ENTER, GST_ELEMENT_CAST (src)); - gst_message_set_stream_status_object (message, &val); - GST_DEBUG_OBJECT (src, "posting ENTER stream status"); - gst_element_post_message (GST_ELEMENT_CAST (src), message); - while (TRUE) { gint left, len; guint8 *readptr; gint readseg; if (gst_ring_buffer_prepare_read (buf, &readseg, &readptr, &len)) { - gint read; + gint read = 0; left = len; do { - read = readfunc (src, readptr, left); + read = readfunc (src, readptr + read, left); GST_LOG_OBJECT (src, "transfered %d bytes of %d to segment %d", read, left, readseg); if (read < 0 || read > left) { GST_WARNING_OBJECT (src, - "error reading data %d (reason: %s), skipping segment", read, + "error reading data (reason: %s), skipping segment", g_strerror (errno)); break; } left -= read; - readptr += read; } while (left > 0); /* we read one segment */ @@ -259,9 +252,8 @@ GST_OBJECT_UNLOCK (abuf); } } + GST_DEBUG_OBJECT (src, "exit thread"); - /* Will never be reached */ - g_assert_not_reached (); return; /* ERROR */ @@ -274,11 +266,6 @@ { GST_OBJECT_UNLOCK (abuf); GST_DEBUG ("stop running, exit thread"); - message = gst_message_new_stream_status (GST_OBJECT_CAST (buf), - GST_STREAM_STATUS_TYPE_LEAVE, GST_ELEMENT_CAST (src)); - gst_message_set_stream_status_object (message, &val); - GST_DEBUG_OBJECT (src, "posting LEAVE stream status"); - gst_element_post_message (GST_ELEMENT_CAST (src), message); return; } } @@ -377,6 +364,9 @@ if (!result) goto could_not_open; + /* allocate one more segment as we need some headroom */ + spec->segtotal++; + buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize); memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data)); @@ -456,11 +446,10 @@ csrc->reset (src); GST_DEBUG ("reset done"); } -#if 0 + GST_DEBUG ("stop, waiting..."); GST_AUDIORING_BUFFER_WAIT (buf); GST_DEBUG ("stoped"); -#endif return TRUE; } @@ -523,8 +512,6 @@ gstbaseaudiosrc_class->create_ringbuffer = GST_DEBUG_FUNCPTR (gst_audio_src_create_ringbuffer); - - g_type_class_ref (GST_TYPE_AUDIORING_BUFFER); } static void