Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1093694imm; Wed, 19 Sep 2018 11:57:32 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYVrSkMRpgmsMVAuj2IoHf0ZZBgEnQFMo6t6QZiO63ikMyf4gUW9Vc0aDGD24dbmZD+fa+e X-Received: by 2002:a17:902:1101:: with SMTP id d1-v6mr36237766pla.131.1537383452605; Wed, 19 Sep 2018 11:57:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537383452; cv=none; d=google.com; s=arc-20160816; b=LFBbkLgMk8Gz8smE6Qg538upaJSNQVjhgsNJ1tXX2GRKb2rFgUXy9GS/FaewN6hhy6 hWm8y4pqmpy74fw493iZ6BWaX1566KJ3wyapXsf1F6Oh7+fZH8caFzolUm/VDI0Dz025 SCCI7Ku0YLQt37Mh+JEqA4Oxw83N+TY5TbeXOceBqTGzXlj5igMoqhQVJjnKlZz2YlN7 a1PxtuiuvNqGAfVkL4FSWIqJy8rkQ/p11Qd+NQ6dWIBmwnKomivpwM/2kthMf7aqOF9X 71DhuSp7jyRsVd2QwjC/bNJ9GCeTyMFBYdGzaFcOh0sGr8VnnXarHqQBnuik7wcQHiMD g2Cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:subject:cc:to:from:message-id:date; bh=HUbpfk7ZZ/hhHM0niYsG8VDRZwY+PHDqwKi+8Ni8AI0=; b=dzZBVmlMPeglNsWAejHJbxXX5Lejm112WASs6edpn7a3raPlnExq08ePxW4EQnvgNR AKbAIjhBgnLKDtAFsu/hPmZy0FvHpjl2dFLqu20M60T/cKpJSZqz/1GeFeyGG3stupDn 33EudX26Y0SO0xucWDGsY8hKpaZsoSLPofUkGQ3q9DT+hC9jaoXfp6qDLfdlE89bgzZ9 JvjKXiTcLg/tu9TQ21IFqSTgqGLSSBHe5YZ30yUWe/6XeLfvYqklELjAUJjnb3zrNHS/ ZxjR1zdZ7tmvM/e3qO7CzRXx3U3SRVqkGUICT0Go7aUC9zwvK14gnlIMilOOpLtS0k/P N2Jw== 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 i5-v6si21102436pgk.200.2018.09.19.11.57.17; Wed, 19 Sep 2018 11:57:32 -0700 (PDT) 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 S1733179AbeITATA (ORCPT + 99 others); Wed, 19 Sep 2018 20:19:00 -0400 Received: from mx2.suse.de ([195.135.220.15]:42898 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731253AbeITATA (ORCPT ); Wed, 19 Sep 2018 20:19:00 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id A8B05ACFB; Wed, 19 Sep 2018 18:39:47 +0000 (UTC) Date: Wed, 19 Sep 2018 20:39:46 +0200 Message-ID: From: Takashi Iwai To: Stefan Wahren Cc: Mike Brady , Greg Kroah-Hartman , Eric Anholt , linux-rpi-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Phil Elwell Subject: Re: [PATCH 17/29] staging: bcm2835-audio: Add 10ms period constraint In-Reply-To: <8866e22a-6cd7-d32d-92e5-9a4e60206d2f@i2se.com> References: <20180904155858.8001-1-tiwai@suse.de> <20180904155858.8001-18-tiwai@suse.de> <4c5f9aed-8fbe-fe22-0c8d-097d8915805c@i2se.com> <8866e22a-6cd7-d32d-92e5-9a4e60206d2f@i2se.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/26 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 19 Sep 2018 14:41:28 +0200, Stefan Wahren wrote: > > Hi, > > [add Phil and Mike] > > Am 19.09.2018 um 11:52 schrieb Takashi Iwai: > > On Wed, 19 Sep 2018 11:42:22 +0200, > > Stefan Wahren wrote: > >> Hi Takashi, > >> > >> Am 04.09.2018 um 17:58 schrieb Takashi Iwai: > >>> It seems that the resolution of vc04 callback is in 10 msec; i.e. the > >>> minimal period size is also 10 msec. > >>> > >>> This patch adds the corresponding hw constraint. > >>> > >>> Signed-off-by: Takashi Iwai > >>> --- > >>> drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c | 5 +++++ > >>> 1 file changed, 5 insertions(+) > >>> > >>> diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c > >>> index 9659c25b9f9d..6d89db6e14e4 100644 > >>> --- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c > >>> +++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c > >>> @@ -145,6 +145,11 @@ static int snd_bcm2835_playback_open_generic( > >>> SNDRV_PCM_HW_PARAM_PERIOD_BYTES, > >>> 16); > >>> > >>> + /* position update is in 10ms order */ > >>> + snd_pcm_hw_constraint_minmax(runtime, > >>> + SNDRV_PCM_HW_PARAM_PERIOD_TIME, > >>> + 10 * 1000, UINT_MAX); > >>> + > >>> chip->alsa_stream[idx] = alsa_stream; > >>> > >>> chip->opened |= (1 << idx); > >> in the Foundation Kernel (Downstream) there is a patch to interpolate > >> the audio delay. So my questions is, does your patch above makes the > >> following patch obsolete? > > Through a quick glance, no, my patch is orthogonal to this. > > > > My patch adds a PCM hw constraint so that the period size won't go > > below 10ms, while the downstream patch provides the additional delay > > value that is calculated from the system clock. > > thanks for your explanation. So your patch must be reverted with > implementation of interpolate audio delay. No, no. Both can be applied as is. They have *nothing to do* with each other. > >> [PATCH] bcm2835: interpolate audio delay > >> > >> It appears the GPU only sends us a message all 10ms to update > >> the playback progress. Other than this, the playback position > >> (what SNDRV_PCM_IOCTL_DELAY will return) is not updated at all. > >> Userspace will see jitter up to 10ms in the audio position. > >> > >> Make this a bit nicer for userspace by interpolating the > >> position using the CPU clock. > >> > >> I'm not sure if setting snd_pcm_runtime.delay is the right > >> approach for this. Or if there is maybe an already existing > >> mechanism for position interpolation in the ALSA core. > > That's OK, as long as the computation is accurate enough (at least not > > exceed the actual position) and is light-weight. > > > >> I only set SNDRV_PCM_INFO_BATCH because this appears to remove > >> at least one situation snd_pcm_runtime.delay is used, so I have > >> to worry less in which place I have to update this field, or > >> how it interacts with the rest of ALSA. > > Actually, this SNDRV_PCM_INFO_BATCH addition should be a separate > > patch. It has nothing to do with the runtime->delay calculation. > > (And, this "one situation" is likely called PulseAudio :) > > > >> In the future, it might be nice to use VC_AUDIO_MSG_TYPE_LATENCY. > >> One problem is that it requires sending a videocore message, and > >> waiting for a reply, which could make the implementation much > >> harder due to locking and synchronization requirements. > > This can be now easy with my patch series. By switching to non-atomic > > operation, we can issue the vc04 command inside the pointer callback, > > too. > > I think we should try to implement this later. > > @Mike: Do you want to write a patch series which upstream "interpolate > audio delay" and addresses Takashi's comments? > > I would help you, in case you have questions about setup a Raspberry Pi > with Mainline kernel or patch submission. Well, the question is who really wants this. The value given by that patch is nothing but some estimation and might be even incorrect. PulseAudio won't need it any longer when you set the BATCH flag. Then it'll switch from tsched mode to the old mode, and the delay value would be almost irrelevant. Takashi