[alsa-devel] [PATCH v3 kernel 2/3] Extend snd_pcm_ops and snd_pcm_runtime

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Fri Feb 6 17:38:45 CET 2015


On 02/06/2015 10:16 AM, Tim Cussins wrote:
> snd_pcm_ops picks up methods for:
> 
> - start_at
> - start_at_abort
> - start_at_gettime
> 
> For startat requests involving audio hardware clocks, ALSA core
> delegates to the driver using these methods, should they exist.
> 
> snd_pcm_runtime gains fields that contain the current state of
> the startat timer, if any. This allows cancellation and querying.
> 
> Signed-off-by: Tim Cussins <timcussins at eml.cc>
> 
> diff --git a/include/sound/pcm.h b/include/sound/pcm.h
> index 07299b2..a414fec 100644
> --- a/include/sound/pcm.h
> +++ b/include/sound/pcm.h
> @@ -73,6 +73,9 @@ struct snd_pcm_ops {
>  	snd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *substream);
>  	int (*wall_clock)(struct snd_pcm_substream *substream,
>  			  struct timespec *audio_ts);
> +	int (*start_at)(struct snd_pcm_substream *substream, int startat_clock_type, const struct timespec *ts);
> +	int (*start_at_abort)(struct snd_pcm_substream *substream);
> +	int (*start_at_gettime)(struct snd_pcm_substream *substream, int startat_clock_type, struct timespec *current_time);

What is the purpose of this _gettime? If the app relies on regular system time then it doesn't need to use this and if it relies on the link then doesn't this routine duplicate the audio timestamp stuff i am still working on.

>  	int (*copy)(struct snd_pcm_substream *substream, int channel,
>  		    snd_pcm_uframes_t pos,
>  		    void __user *buf, snd_pcm_uframes_t count);
> @@ -368,6 +371,12 @@ struct snd_pcm_ runtime {
>  #ifdef CONFIG_SND_PCM_XRUN_DEBUG
>  	struct snd_pcm_hwptr_log *hwptr_log;
>  #endif
> +
> +	bool startat_timer_running;
> +	/* The following values are valid if startat_timer_running == true */
> +	int startat_clock_type;			/* startat clock type of current timer */
> +	struct timespec startat_start_time;	/* start time of current timer */
> +	void* startat_timer_data;		/* data associated with current timer */
>  };
>  
>  struct snd_pcm_group {		/* keep linked substreams */
> 



More information about the Alsa-devel mailing list