Re: [Bluez-devel] a2dpd and mplayer - any chance to get it working?

Robert Huitl
2007-01-28T19:30:13Z

Hi again,

On Wednesday 17 January 2007 08:03, Frederic Dalleau wrote:
> I was wondering about alsa plugins :
> xmms relies on alsa timing to play, so in the plugin, there is a sleep()
> call, this will wait a little bit until it is time to retievre new data.
> But it seems some players (like mplayer) wants to do their own timing or at
> least don't want to sleep. They need to use that time to do some decoding
> instead. If you sleep too long, the decoding will be defered and the sound
> or movie will be broken.
>
> Is there a rule to distinguish? Or some magic value to sleep?

I had a look at MPlayer to see what it's doing. It sleeps whenever needed, and
it finds out how long to sleep by looking at the PCM status. I posted the
following message to alsa-devel, but unfortunately so far nobody answered.
Maybe someone on this list knows an answer.

Robert

---------- Forwarded Message ----------

Subject: snd_pcm_status_get_avail() and external I/O plugins
Date: Thursday 18 January 2007 14:51
From: Robert Huitl <alsa-devel@huitl.de>
To: alsa-devel@lists.sourceforge.net

Hello,

I have some trouble to get mplayer working with an external pcm I/O plugin
(a2dp from bluez). The problem is that mplayer needs to know how much space
is left in the ring buffer:

snd_pcm_status(alsa_handler, status)
ret = snd_pcm_status_get_avail(status) * bytes_per_sample;

Now with the ALSA kernel driver, ret will vary, depending on how much data
was written to the device, and how much time passed.

However, with the I/O plugin, snd_pcm_status_get_avail() always returns the
maximum value (causing mplayer to think that all samples have been played). I
can't find a callback function for the status in snd_pcm_ioplug_callback_t
where I could adjust the avail value.

I'd appreciate any hints.

Robert