Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3225425imu; Sun, 11 Nov 2018 10:09:49 -0800 (PST) X-Google-Smtp-Source: AJdET5fmXRcHWlemUZfcd87j/YRs7F997vbPH2I52La8RUA99ax8ACVQw/UVJGvHuitkx/tG/qZG X-Received: by 2002:a62:9f98:: with SMTP id v24-v6mr7719008pfk.163.1541959789387; Sun, 11 Nov 2018 10:09:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541959789; cv=none; d=google.com; s=arc-20160816; b=rkFKgFkf4havJpCH+AOBu2jORyEELD1gtZTUj3Ol9Y/+ze2sTskT6++X96cygyG6rL yb9bv9h7aQHJmZVpAhFxLH/Xrrtnndo/MHyflIGoaPXwfKmaMx+tFImzxCEtU//JWSZv 4LMOoigSpITR/u0MntHSdoC9P5oxpw0V7vKjbZWW4h6BFFbtCmi9d4SZEuvYSZvGnMWm HF9S266sX7AqFkADtOoWLVceGdcD+47/NwulEaUXU1jFvlG5IgTivSjGxCjGuKFs5n46 1Ex9MQQWCmsF74hug9WjPhJhxNoMysdxJBMd5E9EdS9psedDO3LakmylIoXgieWVCH8+ Myvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version; bh=M9M3/z3YfwD+zCitzN9K45kWVsvQlmIyQcKgpCdhLHg=; b=YHmMCJcJgpbQGU/yDmf9hvgcKBEYt88euAyc0L1X/WljOkXkE0TQ8a1uEihwqpvCfx nKB2yO8NJFRpQb92VmoPJb0e0uZu9R31YG4FSYNL3JeTLeG6KlIacHiZ5WorRwiVHu9A U8XEXMBmKsMTPSU6ef0eNVHVEmxHw9D65viOiKDmh+z8CnEOWucE+njSR3cPJo0/Hai5 Qu0pOiVQaiKwwqhe0lMeMqYlhQ6DmiPHy74pLGO50nDr32xxxNMvD3axgUpXPdjIozCU adTAfWcQLQe7R8alyQ+BT4ILrC8xAsqPnu+HU1SMmFipaukga84fBdEPcqist/dPrv8K LIxg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d3-v6si17545785pln.204.2018.11.11.10.09.13; Sun, 11 Nov 2018 10:09:49 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729329AbeKLD5y convert rfc822-to-8bit (ORCPT + 99 others); Sun, 11 Nov 2018 22:57:54 -0500 Received: from vie01a-dmta-pe08-1.mx.upcmail.net ([84.116.36.20]:19461 "EHLO vie01a-dmta-pe08-1.mx.upcmail.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729274AbeKLD5y (ORCPT ); Sun, 11 Nov 2018 22:57:54 -0500 Received: from [172.31.216.235] (helo=vie01a-pemc-psmtp-pe12.mail.upcmail.net) by vie01a-dmta-pe08.mx.upcmail.net with esmtp (Exim 4.88) (envelope-from ) id 1gLuA3-000560-0q for linux-kernel@vger.kernel.org; Sun, 11 Nov 2018 19:08:39 +0100 Received: from helix.aillwee.com ([37.228.204.209]) by vie01a-pemc-psmtp-pe12.mail.upcmail.net with ESMTP id Lu9ugW3DGkosQLuA0gnFqW; Sun, 11 Nov 2018 19:08:38 +0100 X-Env-Mailfrom: mikebrady@eircom.net X-Env-Rcptto: linux-kernel@vger.kernel.org X-SourceIP: 37.228.204.209 X-CNFS-Analysis: v=2.3 cv=NNQEBHyg c=1 sm=1 tr=0 a=/+iDkf0alGTUGXENEoGzTg==:117 a=/+iDkf0alGTUGXENEoGzTg==:17 a=IkcTkHD0fZMA:10 a=JHtHm7312UAA:10 a=qbuszIz_fLx8hrSXDfwA:9 a=QEXdDO2ut3YA:10 Received: from [192.168.50.181] (apu.aillwee.com [192.168.50.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by helix.aillwee.com (Postfix) with ESMTPSA id E19C34E607; Sun, 11 Nov 2018 18:08:29 +0000 (GMT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 12.1 \(3445.101.1\)) Subject: Re: [alsa-devel] [PATCH v2] staging: bcm2835-audio: interpolate audio delay From: Mike Brady In-Reply-To: Date: Sun, 11 Nov 2018 18:08:29 +0000 Cc: Stefan Wahren , devel@driverdev.osuosl.org, alsa-devel@alsa-project.org, f.fainelli@gmail.com, julia.lawall@lip6.fr, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Eric Anholt , linux-rpi-kernel@lists.infradead.org, nishka.dasgupta_ug18@ashoka.edu.in, Kirill Marinushkin , linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: 8BIT Message-Id: References: <20181022191708.GA4659@ubuntu> <046aea96-e0d3-60f4-c61a-c26bb1b5c193@gmail.com> <9884c4f5-2343-e3a4-8d8b-dd2db404ef27@gmail.com> <126FA055-050B-4AAC-9392-CA8CCA821768@eircom.net> <6AF69E32-029E-478F-9BFA-6262316364A9@eircom.net> To: Takashi Iwai X-Mailer: Apple Mail (2.3445.101.1) X-CMAE-Envelope: MS4wfD0XS3u5tIjktnqG3YDorYrOEvLygECwo38eIkrthi+mBFVqH6ZFEwXkMLL1ZRghBJsBiAnOrTxyYjv0HsWDbXtFav9Vzg3iJn33qjds+HyutOYp8I0y 5SuxjrGdgSsIRQeCxAOk46g8hJOemjrzkXx98g6G3UxDdfFUJ0H+oQg6jk7isIJ7VKcj3ngsxsg6SAPcI6nGVi/vv+tLwNzpCUs/7glBInMSslV9jgABhy45 TyZv4o3wMMSb7NwDll2E0rf4EY6u2pyaWkF4+CE2QpyUhPTvJhoOeNVRkTRxFfZT5eXyz0JUh1IHIUsMpS0eybrdyQSlIjpzg8kiAD3IAQIqAWqW21mu3+b6 HEPyLMAiRSLMOcxswCL3mr6XfJ5tlutCIUnbZl2YvHT4AmBwMv4ZLXW97r/eJ+p0ne5f6MfvfhYBajJXCgn9QrdNvPg22cm+WiOeF3oQvPciwzJr+49CUGu+ Yh8C+2/aIO/weZo9b2J9MJ51xZQfZu/i2EOmYaaEJbjmDsXm+DfdgXvRDiM8oZRf5YPQU3CfsbMUZERxlGXgzjPcXt7l8FLTQnmfBZhsEi4m9AFLHW6c4f72 SzJXVK/LXJcTYtjQCcQ/9HCwUqbcjP1r+NtLe4kVtOd7iLh/K3MglrVP6Yu7l5x1o20= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On 6 Nov 2018, at 21:31, Takashi Iwai wrote: > > On Tue, 06 Nov 2018 22:05:11 +0100, > Mike Brady wrote: >> >> >>> On 5 Nov 2018, at 16:11, Takashi Iwai wrote: >>> >>> On Mon, 05 Nov 2018 16:57:07 +0100, >>> Mike Brady wrote: >>>> >>>>> One another thing I'd like to point out is that the value given in the >>>>> patch is nothing but an estimated position, optimistically calculated >>>>> via the system timer. Mike and I had already discussion in another >>>>> thread, and another possible option would be to provide the proper >>>>> timestamp-vs-hwptr pair, instead of updating the timestamp always at >>>>> the status read. >>>> >>>> Agreed — that would give the caller the information needed to do the >>>> interpolation for themselves if desired. >>> >>> And now I wonder whether the problem is still present with the latest >>> code. There was a (kind of) regression in this regard when we >>> introduced the fine-grained hardware timestamping, but it should have >>> been addressed by the commit 20e3f985bb875fea4f86b04eba4b6cc29bfd6b71 >>> ALSA: pcm: update tstamp only if audio_tstamp changed >>> >>> Could you double-check whether the tstamp field gets still updated >>> even if no hwptr (and delay) is changed? >> >> Yes, this could be a bit problematic. The function update_audio_tstamp in pcm_lib.c could include the interpolated delay in the calculation of audio_tstamp, and hence >> could trigger the update of tstamp. > > Well, my question is about the current driver as-is. > It has no runtime->delay, so far, hence audio_tstamp is calculated > only from the hwptr position. As the corresponding tstamp gets > updated only when the audio_tstamp (i.e. hwptr) is updated, the driver > should provide the consistent pair of audio_tstamp (i.e. hwptr) vs > tstamp. Fair enough — I had been thinking about the situation with the patch in place. >> Another issue, as I see it, is that the the audio_tstamp value would depend on whether, and when, a snd_pcm_delay() call (which recalculates the interpolation and puts it into the delay field) was made immediately prior to it. By zeroing the delay when a GPU interrupt occurs, you could be certain that the interpolated delay would be less than or equal to the true delay, but this doesn’t seem very satisfactory — you have neither the timestamp of the last update nor the correctly interpolated timestamp. > > No, audio_stamp field is updated at snd_pcm_period_elapsed() call as > well as tstamp field. That's great. > Basically the driver provides three things: hwptr, tstamp and > audio_tstamp. For the default configuration (like bcm audio does), > audio_tstamp is calculated from hwptr, so it can be seen as the hwptr > represented in timespec. OTOH, tstamp is the actual system time that > is updated only when audio_tstamp changes -- which means tstamp gets > updated *only* at snd_pcm_period_elapsed() call on bcm audio. > > And, my point is that you should be able to interpolate the actual > position in user-space side based on these information; it doesn't > have to be done in the kernel at all. That is true, of course. The problem is that the snd_pcm_delay() call is so inaccurate though. >> Sadly, therefore, I’m now of the view that this approach to interpolating the delay between GPU interrupts is not really viable. Would that be your view? > Actually there were some bugs in the past that the tstamp was updated > at each snd_pcm_status(), but it should have been fixed in the recent > kernels. That's why I asked to re-check the current status. Yes, as far as I can see, that's fixed. In further testing, however, I noticed that the audio_frames calculation in update_audio_tstamp() in pcm_lib.c didn't include the delay, so now it does if the delay field is negative, which it is "naturally" in this case. With that change, the delay reported by snd_pcm_delay() and calculated as you referred to above are consistent. So, overall, I am happier that this approach is at least viable. But two issues remain, in my view: First, is it "a good idea"? Second, the delay field is now being used as a delay if its positive and an interpolation if it's negative. It works, but would it be better to have an extra "interpolation" field? I'll post the updated patch shortly. Thanks, Mike