[vlc-devel] [PATCH] opensles: protect buffer array with a spinlock

Dominique Martinet asmadeus at codewreck.org
Sat Jan 21 18:34:48 CET 2012


Hi,

Appending the buffer to the array before playing is nice and a good
idea, _except_ when the array is full.
Because when it's full, you write the new buffer that would be cleaned
when the old one is done playing, i.e. i_toappend_buffer ==
i_toclean_buffer.
I was never doing this check, because if the case came up then we'd get
a BUFFER_INSUFFICIENT error and just try again without writing to the
buffer array, but now it explains your error:

the buffer's full (opensles' internal queue is of fixed size BUFF_QUEUE):
> W/libOpenSLES(13045): Leaving BufferQueue::Enqueue
> (SL_RESULT_BUFFER_INSUFFICIENT)
> E/vlc     (13045): buffer insufficient
the current buffer is done being played, PlayCallback is called and clears
p_buffer_array[p_sys->i_toclean_buffer] ==
p_buffer_array[p_sys->i_toappend_buffer] == p_buffer, you try to enqueue
again with a buffer that's just been cleared... Which isn't good.
> W/libOpenSLES(13045): Leaving BufferQueue::Enqueue
> (SL_RESULT_PARAMETER_INVALID)
> W/vlc     (13045): Error 2, dropping buffer

A possible fix would be to make opensles' queue one element shorter than
our p_buffer_array, so it would still work just as it did up till now.
(A better fix would be to replace the whole thing by a FIFO queue)



By the way, I just noticed that there was a number of tries added for
when we get a buffer_insufficient error, I don't know if we really want
that one - did you have many "buffer insufficient" errors in your logs?
By that I mean before your patch :-)
(it should be ok anyway since there is no break, it should print an
"error 7 dropping buffer" message and free it.. actually we probably
want it if playback is too slow for cpu reasons)

If you have too much, I see two possible reasons:
 - the buffers are too small given the playrate and it really needs a
 bigger queue size
and/or
 - the buffers aren't played as fast as we would like to queue them,
 i.e. there's a problem with the playrate/some parameters


I think I'll give all this another try soonish (i.e. tonight or
tomorrow) and see if I can reproduce your problems on my phone, it was
playing alright a few months ago..

Regards,
-- 
Dominique Martinet | Asmadeus



More information about the vlc-devel mailing list