From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: Rationale behind snd_pcm_htimestamp() Date: Wed, 25 Feb 2009 16:13:02 +0100 Message-ID: References: <20090216023509.GA16494@tango.0pointer.de> <20090218215157.GA13939@tango.0pointer.de> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id D4B50103809 for ; Wed, 25 Feb 2009 16:13:02 +0100 (CET) In-Reply-To: <20090218215157.GA13939@tango.0pointer.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: Lennart Poettering Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org At Wed, 18 Feb 2009 22:51:57 +0100, Lennart Poettering wrote: > > On Mon, 16.02.09 17:08, Takashi Iwai (tiwai@suse.de) wrote: > > > > An alternative way seemed to be to go via the snd_pcm_status > > > structure. However querying that seems not to sync the hw index > > > data. Hmm... so let's call snd_pcm_hwsync() right before querying the > > > struct -- as it turns out however, that function is now deprecated. So > > > which function should I call? The doxygen comments of _hwsync() kind > > > of suggest in a way to call snd_pcm_avail_update(), whose doxygen > > > comments however declare that it does in fact *not* sync the hw state > > > either, but suggest to use snd_pcm_avail() for that. > > > > > > Ok, so I am now tempted to first call snd_pcm_avail() and then > > > snd_pcm_status() and have all three values atomically. But unfortunately > > > that's not the case. Again the avail value of the two calls differs sometimes. > > > > > > How can I query the three values atomically? Can i do that at all? > > > > Hmm, there is no way to get them in atomic way anyway, I guess. > > Even in *_avail_delay(), basically each of them is called > > sequentially in alsa-lib code. > > > > But, I wonder whether calling snd_pcm_delay() then > > snd_pcm_htimestamp() doesn't work? snd_pcm_avail_delay() is nothing > > but a sequential call of snd_pcm_delay() and avail_update(). And, > > htimestamp is avail_update() and timestamp check. > > > > Well, *_htimestamp() has a loop to sync with avail, so the similar > > logic could be used to sync all of them... > > Hmm, so I understood you correctly then the API would need changing to > get the timestamp, the delay and the avail value that belong together? Yes, if you stick with snd_pcm_htimetamp(), snd_pcm_avil() and co. But basically snd_pcm_status() does sync and fetch all status data. Shouldn't calling this suffice for your purpose? Takashi