openslesringbuffer: Only allocate at most half the number of internal buffers as...
authorSebastian Dröge <sebastian@centricular.com>
Tue, 10 Feb 2015 15:18:34 +0000 (16:18 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 10 Feb 2015 15:18:34 +0000 (16:18 +0100)
Otherwise we might end up reading too much from the audioringbuffer, which
would result in reading silence.

sys/opensles/openslesringbuffer.c

index 74af266..5f993ec 100644 (file)
@@ -358,9 +358,13 @@ _opensles_player_acquire (GstAudioRingBuffer * rb,
   /* Configure audio source
    * 4 buffers is the "typical" size as optimized inside Android's
    * OpenSL ES, see frameworks/wilhelm/src/itfstruct.h BUFFER_HEADER_TYPICAL
+   *
+   * Also only use half of our segment size to make sure that there's always
+   * some more queued up in our ringbuffer and we don't start to read silence.
    */
   SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {
-    SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, MIN (4, spec->segtotal)
+    SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, MIN (4, MAX (spec->segtotal >> 1,
+            1))
   };
   SLDataSource audioSrc = { &loc_bufq, &format };