--- a/gst_plugins_base/gst-libs/gst/audio/gstaudiosrc.c Fri Mar 19 09:35:09 2010 +0200
+++ b/gst_plugins_base/gst-libs/gst/audio/gstaudiosrc.c Fri Apr 16 15:15:52 2010 +0300
@@ -71,10 +71,6 @@
#include "gstaudiosrc.h"
-#ifdef __SYMBIAN32__
-#include <glib_global.h>
-#endif
-
GST_DEBUG_CATEGORY_STATIC (gst_audio_src_debug);
#define GST_CAT_DEFAULT gst_audio_src_debug
@@ -203,6 +199,8 @@
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);
@@ -213,26 +211,35 @@
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 = 0;
+ gint read;
left = len;
do {
- read = readfunc (src, readptr + read, left);
+ read = readfunc (src, readptr, 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 (reason: %s), skipping segment",
+ "error reading data %d (reason: %s), skipping segment", read,
g_strerror (errno));
break;
}
left -= read;
+ readptr += read;
} while (left > 0);
/* we read one segment */
@@ -252,8 +259,9 @@
GST_OBJECT_UNLOCK (abuf);
}
}
- GST_DEBUG_OBJECT (src, "exit thread");
+ /* Will never be reached */
+ g_assert_not_reached ();
return;
/* ERROR */
@@ -266,6 +274,11 @@
{
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;
}
}
@@ -364,9 +377,6 @@
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));
@@ -446,10 +456,11 @@
csrc->reset (src);
GST_DEBUG ("reset done");
}
-
+#if 0
GST_DEBUG ("stop, waiting...");
GST_AUDIORING_BUFFER_WAIT (buf);
GST_DEBUG ("stoped");
+#endif
return TRUE;
}
@@ -512,6 +523,8 @@
gstbaseaudiosrc_class->create_ringbuffer =
GST_DEBUG_FUNCPTR (gst_audio_src_create_ringbuffer);
+
+ g_type_class_ref (GST_TYPE_AUDIORING_BUFFER);
}
static void