From 4ccd4257725b2499ce6f154a718f07741cbf590c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 10 Feb 2015 16:18:34 +0100 Subject: [PATCH] openslesringbuffer: Only allocate at most half the number of internal buffers as external audioringbuffer ones Otherwise we might end up reading too much from the audioringbuffer, which would result in reading silence. --- sys/opensles/openslesringbuffer.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sys/opensles/openslesringbuffer.c b/sys/opensles/openslesringbuffer.c index 74af266962..5f993ec802 100644 --- a/sys/opensles/openslesringbuffer.c +++ b/sys/opensles/openslesringbuffer.c @@ -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 };