opensles: cap queue size
authorJosep Torra <n770galaxy@gmail.com>
Thu, 27 Sep 2012 15:46:27 +0000 (17:46 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 18 Oct 2012 12:03:09 +0000 (14:03 +0200)
Just in case we want to tweak the sink behaviour with buffer-time and
latency-time properties cap the queue size to something reasonable.

sys/opensles/openslesringbuffer.c

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