From: Jiada Wang <jiada_wang@mentor.com>
To: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Cc: perex@perex.cz, tiwai@suse.com, alsa-devel@alsa-project.org,
apape@de.adit-jv.com, linux-kernel@vger.kernel.org,
Mark_Craske@mentor.com
Subject: Re: [PATCH 2/3 v2] ALSA: usb-audio: avoid setting of sample rate multiple times on bus
Date: Sun, 4 Dec 2016 23:32:51 -0800 [thread overview]
Message-ID: <58451823.8040207@mentor.com> (raw)
In-Reply-To: <c4579c3f-4798-7096-2c05-b0670ccbad08@sakamocchi.jp>
Hi Sakamoto
On 11/30/2016 02:45 AM, Takashi Sakamoto wrote:
> Hi Jiada,
>
> I don't oppose this patch. Nevertheless, your description is not
> necessarily correct.
>
> On Nov 30 2016 16:59, Jiada Wang wrote:
>> From: Daniel Girnus <dgirnus@de.adit-jv.com>
>>
>> ALSA usually calls the prepare function twice before starting the
>> playback:
>> 1. On hw_params call from userland and
>> 2. internally when starting the stream.
>
> ALSA PCM core in kernel land doesn't perform like this.
>
> In alsa-lib, 'snd_pcm_hw_params()' calls
> 'snd_pcm_hw_params_internal()' and 'snd_pcm_prepare()' sequentially.
> http://git.alsa-project.org/?p=alsa-lib.git;a=blob;f=src/pcm/pcm.c;h=cd87bc759ded95953e332b7e8d56b0f2d5b4185d;hb=HEAD#l853
>
>
> In system call level (e.g. see by strace(1)), this looks like two
> ioctl(2)s with 'SNDRV_PCM_IOCTL_HW_PARAMS' and 'SNDRV_PCM_IOCTL_PREPARE'.
>
> Well, when applications are written to execute 'snd_pcm_hw_params()'
> and 'snd_pcm_hw_prepare()' sequentially, additional ioctl(2) with
> 'SNDRV_PCM_IOCTL_PREPARE' appears. PulseAudio is this kind of
> application. I indicated the useless in 2014, but it still remains:
> https://lists.freedesktop.org/archives/pulseaudio-discuss/2014-January/019773.html
>
>
> You have the misunderstanding due to a nature of alsa-lib and tendency
> of major applications, from my point of view.
>
Thanks for your indication, so because some of userland applications
call 'snd_pcm_hw_params()' and
'snd_pcm_hw_prepare()' sequentially, means the second
'SNDRV_PCM_IOCTL_PREPARE' be called in 'SNDRV_PCM_STATE_PREPARED' state,
some devices are unable to manage this and stop working.
I will update Changelog in v2 Patchset.
Thanks,
Jiada
>> Some device are not able to manage this and they will stop playback
>> if the sample rate will be configured several times over USB protocol.
>>
>> Signed-off-by: Jens Lorenz <jlorenz@de.adit-jv.com>
>> Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
>> ---
>> sound/usb/pcm.c | 21 +++++++++++----------
>> 1 file changed, 11 insertions(+), 10 deletions(-)
>>
>> diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
>> index 44d178e..a522c9a 100644
>> --- a/sound/usb/pcm.c
>> +++ b/sound/usb/pcm.c
>> @@ -806,17 +806,18 @@ static int snd_usb_pcm_prepare(struct
>> snd_pcm_substream *substream)
>> if (ret < 0)
>> goto unlock;
>>
>> - iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
>> - alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
>> - ret = snd_usb_init_sample_rate(subs->stream->chip,
>> - subs->cur_audiofmt->iface,
>> - alts,
>> - subs->cur_audiofmt,
>> - subs->cur_rate);
>> - if (ret < 0)
>> - goto unlock;
>> -
>> if (subs->need_setup_ep) {
>> +
>> + iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
>> + alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
>> + ret = snd_usb_init_sample_rate(subs->stream->chip,
>> + subs->cur_audiofmt->iface,
>> + alts,
>> + subs->cur_audiofmt,
>> + subs->cur_rate);
>> + if (ret < 0)
>> + goto unlock;
>> +
>> ret = configure_endpoint(subs);
>> if (ret < 0)
>> goto unlock;
>
>
> Regards
>
> Takashi Sakamoto
next prev parent reply other threads:[~2016-12-05 7:32 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-30 7:59 [PATCH 0/3 v1] usb-misc fix Jiada Wang
2016-11-30 7:59 ` [PATCH 1/3 v1] ALSA: usb-audio: more tolerant packetsize Jiada Wang
2016-11-30 8:54 ` Takashi Iwai
2016-12-01 7:04 ` Jiada Wang
2016-12-01 7:41 ` [alsa-devel] " Clemens Ladisch
2016-12-01 8:58 ` Takashi Iwai
2016-12-01 11:16 ` Clemens Ladisch
2016-12-01 11:23 ` Takashi Iwai
2016-12-01 11:50 ` Clemens Ladisch
2016-12-01 11:36 ` Jiada Wang
2016-12-01 12:15 ` [alsa-devel] " Clemens Ladisch
2016-12-02 5:53 ` Jiada Wang
2016-11-30 7:59 ` [PATCH 2/3 v2] ALSA: usb-audio: avoid setting of sample rate multiple times on bus Jiada Wang
2016-11-30 8:51 ` Takashi Iwai
2016-12-01 7:07 ` Jiada Wang
2016-11-30 10:45 ` Takashi Sakamoto
2016-11-30 22:19 ` Takashi Sakamoto
2016-12-05 7:32 ` Jiada Wang [this message]
2016-12-05 9:58 ` Takashi Sakamoto
2016-11-30 7:59 ` [PATCH 3/3 v3] ALSA: usb-audio: fix race in snd_usb_endpoint_stop Jiada Wang
2016-11-30 9:00 ` Takashi Iwai
2016-12-05 10:10 ` Jiada Wang
2016-12-05 10:30 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=58451823.8040207@mentor.com \
--to=jiada_wang@mentor.com \
--cc=Mark_Craske@mentor.com \
--cc=alsa-devel@alsa-project.org \
--cc=apape@de.adit-jv.com \
--cc=linux-kernel@vger.kernel.org \
--cc=o-takashi@sakamocchi.jp \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).