snd_pcm_status() does not update status->avail

Jonas Holmberg jonashg at axis.com
Fri Oct 9 17:10:08 CEST 2020


On 2020-10-09 16:30, Jaroslav Kysela wrote:

> It seems that nobody is using those status fields. Usually,
> snd_pcm_avail_update() is used by apps. Anyway, this should be fixed for 
> both
> directions. The avail should be probably synced to
> snd_pcm_plugin_avail_update() output:
> 
> 
> diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c
> index ea60eb98..5739cfc2 100644
> --- a/src/pcm/pcm_plugin.c
> +++ b/src/pcm/pcm_plugin.c
> @@ -541,16 +541,20 @@ static snd_pcm_sframes_t
> snd_pcm_plugin_avail_update(snd_pcm_t *pcm)
>   static int snd_pcm_plugin_status(snd_pcm_t *pcm, snd_pcm_status_t * 
> status)
>   {
>          snd_pcm_plugin_t *plugin = pcm->private_data;
> -       snd_pcm_sframes_t err;
> +       snd_pcm_sframes_t err, avail;
> 
>          /* sync with the latest hw and appl ptrs */
> -       snd_pcm_plugin_avail_update(pcm);
> +       avail = snd_pcm_plugin_avail_update(pcm);
> +       if (avail < 0)
> +               return avail;
> 
>          err = snd_pcm_status(plugin->gen.slave, status);
>          if (err < 0)
>                  return err;
>          status->appl_ptr = *pcm->appl.ptr;
>          status->hw_ptr = *pcm->hw.ptr;
> +       status->avail = avail;
> +       status->delay = snd_pcm_mmap_delay(pcm);
>          return 0;
>   }
> 
>                                          Jaroslav
> 

I have tested your patch and it solves my problem. Are you going to push it?

Thanks!
/Jonas


More information about the Alsa-devel mailing list