[mythtv-users] mythfrontend is always hungry for ALSA Hardware audio buffer

Jean-Yves Avenard jyavenard at gmail.com
Thu Nov 8 21:51:27 UTC 2012


On 9 November 2012 07:24, Andrey Zhunev <a-j at a-j.ru> wrote:
> Hello All,
>
>
> I just noticed that mythfrontend is asking to allocate a larger buffer for alsa:
> So I increased the value of /proc/asound/card0/pcm0p/sub0/prealloc to
> '1024' - even more than requested. Strangely, mythfrontend asked for more:
>
>
> 2012-11-09 00:10:18.681551 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:139 (TryOpenDevice) - ALSA: OpenDevice default
> 2012-11-09 00:10:18.683052 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:678 (SetParameters) - ALSA: SetParameters(format=10, channels=2, rate=48000, buffer_time=500000, period_time=4)
> 2012-11-09 00:10:18.683407 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:736 (SetParameters) - ALSA: Buffer size range from 2048 to 16384
> 2012-11-09 00:10:18.683421 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:739 (SetParameters) - ALSA: Period size range from 1024 to 1024
> 2012-11-09 00:10:18.683483 E [3892/3892] CoreContext audio/audiooutputalsa.cpp:783 (SetParameters) - ALSA: Requested 500000us got 341333 buffer time
> 2012-11-09 00:10:18.683615 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:224 (IncPreallocBufferSize) - ALSA: Hardware audio buffer cur: 1024 need: 1536 max allowed: 32768
> 2012-11-09 00:10:18.683648 E [3892/3892] CoreContext audio/audiooutputalsa.cpp:242 (IncPreallocBufferSize) - ALSA: Try to manually increase audio buffer with: echo 1536 | sudo tee /proc/asound/card0/pcm0p/sub0/prealloc
> 2012-11-09 00:10:18.683666 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:791 (SetParameters) - ALSA: Buffer time = 341333 us
> 2012-11-09 00:10:18.683677 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:797 (SetParameters) - ALSA: Period time = 16 periods
> 2012-11-09 00:10:18.683823 I [3892/3892] CoreContext audio/audiooutputalsa.cpp:806 (SetParameters) - ALSA: Buffer size = 16384 | Period size = 1024

The way it works is this:

We ask ALSA to allocate an audio buffer of a certain length. It
allocates some, and return how much it allocated.
If there's more than 10% difference between what was asked and what we
got, we display a message.
The hardware buffer sized suggested is calculated according to how
much the hardware buffer size currently is, and how much we got.

So, say the HW buffer size is 128kB. We asked for 500ms buffer, and we
got 341ms instead. So myth assumes that we only got 341ms because the
HW buffer size was set to 128kB and that should it be higher, we would
have gotten more.
so we need: 500 * 128 / 341 = 187kB, we round it to the next 64kB
block, it will display that you need to increase the HW buffer to
192kB...

This works and is accurate for 99.9% of the ALSA setup in my experience.

Now you're the 2nd person to report the problem above. No matter what
you ask ALSA, regardless of the HW memory buffer size, you always get
the same maximum value, is 341333us.
That throws off myth and the message displayed is incorrect.

I would just ignore that message, it is not displayed unless you
increase the verbosity (it used to be displayed all the time)

JY


More information about the mythtv-users mailing list