opensles: only drain half ringbuffer on start
authorJosep Torra <n770galaxy@gmail.com>
Thu, 27 Sep 2012 15:27:24 +0000 (17:27 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 18 Oct 2012 12:03:09 +0000 (14:03 +0200)
At start drain half ringbuffer into the OpenSL so the writting/reading
pointers will start at half ringbuffer distance.

sys/opensles/openslesringbuffer.c

index 1bc7f58..c2af73a 100644 (file)
@@ -348,7 +348,7 @@ _opensles_player_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec)
 
   /* Configure audio source */
   SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {
-    SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, spec->segtotal
+    SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, (spec->segtotal >> 1)
   };
   SLDataSource audioSrc = { &loc_bufq, &format };
 
@@ -439,7 +439,7 @@ _opensles_player_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec)
   _opensles_player_change_mute (rb);
 
   /* Define our queue data buffer */
-  thiz->data_segtotal = spec->segtotal + 1;
+  thiz->data_segtotal = loc_bufq.numBuffers + 1;
   thiz->data = g_malloc (spec->segsize * thiz->data_segtotal);
   thiz->cursor = 0;
 
@@ -502,7 +502,7 @@ _opensles_player_start (GstRingBuffer * rb)
   }
 
   /* Fill the queue by enqueing buffers */
-  for (i = 0; i < rb->spec.segtotal; i++) {
+  for (i = 0; i < (rb->spec.segtotal >> 1); i++) {
     _opensles_player_cb (NULL, rb);
   }