[PATCH] ALSA: pcm: Unify snd_pcm_delay() and snd_pcm_hwsync()

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Thu Oct 14 17:59:21 CEST 2021



On 10/14/21 9:53 AM, Takashi Iwai wrote:
> Both snd_pcm_delay() and snd_pcm_hwsync() do the almost same thing.
> The only difference is that the former calculate the delay, so unify
> them as a code cleanup, and treat NULL delay argument only for hwsync
> operation.
> 
> Also, the patch does a slight code refactoring in snd_pcm_delay().
> The initialization of the delay value is done in the caller side now.

I would have done the opposite change, i.e. keep snd_pcm_hwsync() but
add an optional delay argument/calculation.

'snd_pcm_delay' doesn't really hint at any hwsync operation.

Just a naming difference really.

> 
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> ---
>  sound/core/pcm_native.c | 24 ++++++++----------------
>  1 file changed, 8 insertions(+), 16 deletions(-)
> 
> diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
> index 46c643db18eb..627b201b6084 100644
> --- a/sound/core/pcm_native.c
> +++ b/sound/core/pcm_native.c
> @@ -2932,32 +2932,24 @@ static snd_pcm_sframes_t snd_pcm_forward(struct snd_pcm_substream *substream,
>  	return ret;
>  }
>  
> -static int snd_pcm_hwsync(struct snd_pcm_substream *substream)
> -{
> -	int err;
> -
> -	snd_pcm_stream_lock_irq(substream);
> -	err = do_pcm_hwsync(substream);
> -	snd_pcm_stream_unlock_irq(substream);
> -	return err;
> -}
> -		
>  static int snd_pcm_delay(struct snd_pcm_substream *substream,
>  			 snd_pcm_sframes_t *delay)
>  {
>  	int err;
> -	snd_pcm_sframes_t n = 0;
>  
>  	snd_pcm_stream_lock_irq(substream);
>  	err = do_pcm_hwsync(substream);
> -	if (!err)
> -		n = snd_pcm_calc_delay(substream);
> +	if (delay && !err)
> +		*delay = snd_pcm_calc_delay(substream);
>  	snd_pcm_stream_unlock_irq(substream);
> -	if (!err)
> -		*delay = n;
>  	return err;
>  }
>  		
> +static inline int snd_pcm_hwsync(struct snd_pcm_substream *substream)
> +{
> +	return snd_pcm_delay(substream, NULL);
> +}
> +
>  static int snd_pcm_sync_ptr(struct snd_pcm_substream *substream,
>  			    struct snd_pcm_sync_ptr __user *_sync_ptr)
>  {
> @@ -3275,7 +3267,7 @@ static int snd_pcm_common_ioctl(struct file *file,
>  		return snd_pcm_hwsync(substream);
>  	case SNDRV_PCM_IOCTL_DELAY:
>  	{
> -		snd_pcm_sframes_t delay;
> +		snd_pcm_sframes_t delay = 0;
>  		snd_pcm_sframes_t __user *res = arg;
>  		int err;
>  
> 


More information about the Alsa-devel mailing list