GST_BOILERPLATE_FULL (GstOpenSLESRingBuffer, gst_opensles_ringbuffer,
GstRingBuffer, GST_TYPE_RING_BUFFER, _do_init);
-#define RECORDER_QUEUE_SIZE 2
-
/*
* Some generic helper functions
*/
/* Configure audio sink */
SLDataLocator_AndroidSimpleBufferQueue loc_bq = {
- SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, RECORDER_QUEUE_SIZE
+ SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2
};
SLDataSink audioSink = { &loc_bq, &format };
goto failed;
}
- /* Define our ringbuffer in terms of number of buffers and buffer size. */
- spec->segsize = (spec->rate * spec->bytes_per_sample) >> 2;
- spec->segtotal = 16;
-
return TRUE;
failed:
gint seg;
gint len;
+ /* Advance only when we are called by the callback function */
+ if (bufferQueue) {
+ gst_ring_buffer_advance (rb, 1);
+ }
+
/* Get a segment form the GStreamer ringbuffer to write in */
if (!gst_ring_buffer_prepare_read (rb, &seg, &ptr, &len)) {
GST_WARNING_OBJECT (rb, "No segment available");
(guint32) result);
return;
}
-
- /* FIXME: we advance here and behaviour might be racy with the reading
- * thread */
- gst_ring_buffer_advance (rb, 1);
}
static gboolean
{
GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
SLresult result;
- gint i;
/* Register callback on the buffer queue */
if (!thiz->is_queue_callback_registered) {
thiz->is_queue_callback_registered = TRUE;
}
- /* Preroll the buffer queue by enqueing segments */
- for (i = 0; i < RECORDER_QUEUE_SIZE; i++) {
- _opensles_recorder_cb (NULL, rb);
- }
+ /* Preroll one buffer */
+ _opensles_recorder_cb (NULL, rb);
/* Start recording */
result =