openslesringbuffer: Allocate at most 4 internal buffers
authorSebastian Dröge <sebastian@centricular.com>
Thu, 5 Feb 2015 11:22:46 +0000 (12:22 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 5 Feb 2015 11:28:13 +0000 (12:28 +0100)
4 is the "typical" number of buffers defined by Android's OpenSL ES
implementation, and its code is optimized for this. Also because we
have our own ringbuffer around this, we will always have enough
buffering on our side already.

Allows for more efficient processing.

sys/opensles/openslesringbuffer.c

index 56fdccf..a853a1d 100644 (file)
@@ -355,10 +355,12 @@ _opensles_player_acquire (GstAudioRingBuffer * rb,
   SLresult result;
   SLDataFormat_PCM format;
 
-  /* Configure audio source */
+  /* 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
+   */
   SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {
-    SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE,
-    MIN (32, (spec->segtotal >> 1))
+    SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, MIN (4, spec->segtotal)
   };
   SLDataSource audioSrc = { &loc_bufq, &format };