From: Takashi Iwai <tiwai@suse.de>
To: "Wischer, Timo (ADITG/ESB)" <twischer@de.adit-jv.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>
Subject: Re: [PATCH - IOPLUG DRAIN 0/2]
Date: Wed, 28 Mar 2018 18:09:00 +0200 [thread overview]
Message-ID: <s5hr2o4kwrn.wl-tiwai@suse.de> (raw)
In-Reply-To: <B0FB33DC1499054591F62C0EF1E013D7684FE8D9@HI2EXCH01.adit-jv.com>
On Wed, 28 Mar 2018 10:42:50 +0200,
Wischer, Timo (ADITG/ESB) wrote:
>
> @@ -67,6 +73,12 @@ static void snd_pcm_ioplug_hw_ptr_update(snd_pcm_t *pcm)
> delta = wrap_point + hw - io->last_hw;
> }
> snd_pcm_mmap_hw_forward(io->data->pcm, delta);
> + /* stop the stream if all samples are drained */
> + if (io->data->state == SND_PCM_STATE_DRAINING) {
> + avail = snd_pcm_mmap_avail(pcm);
> + if (avail >= pcm->buffer_size)
> + snd_pcm_ioplug_drop(pcm);
> + }
> io->last_hw = (snd_pcm_uframes_t)hw;
> } else
> io->data->state = SNDRV_PCM_STATE_XRUN;
> In case of draining drop has to be called because draining is done
OK, makes sense.
> @@ -488,20 +500,66 @@ static int snd_pcm_ioplug_drop(snd_pcm_t *pcm)
> return 0;
> }
>
> +static int ioplug_drain_via_poll(snd_pcm_t *pcm)
> +{
> + ioplug_priv_t *io = pcm->private_data;
> + int err;
> +
> + /* in non-blocking mode, leave application to poll() by itself */
> + if (io->data->nonblock)
> + return -EAGAIN;
> In case of nonblock snd_pcm_ioplug_hw_ptr_update() will not be called by the user
> Therefore the user will never detect that draining is done.
> I fear snd_pcm_ioplug_hw_ptr_update() has also to be called in nonblock mode here.
For the non-blocking mode, it's not supposed that drain() is called
multiple times. Instead, it should do the loop of snd_pcm_wait(), and
status check, as ioplug_drain_vai_poll() actually does.
Yes, it's weird, but it's the standard way for non-blocking mode, even
for the kernel drivers. So, the practical recommendation for draining
is to temporarily switch to blocking mode before calling
snd_pcm_drain().
> Will you create the patch and apply it to master or
> is there anything which I have to do?
I'll cook up the proper patch and submit to ML soon later.
Then it'll be merged to git tree, and you can work on it.
thanks,
Takashi
next prev parent reply other threads:[~2018-03-28 16:09 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-22 13:48 [PATCH - IOPLUG DRAIN 0/2] twischer
2018-03-22 13:48 ` [PATCH - IOPLUG DRAIN 1/1] ioplug: drain: Wait with pollwhen EAGAIN in blocking mode twischer
2018-03-22 13:48 ` [PATCH - IOPLUG DRAIN 1/1] jack: Support snd_pcm_drain() twischer
2018-03-22 14:28 ` [PATCH - IOPLUG DRAIN 0/2] Takashi Iwai
2018-03-22 14:50 ` Wischer, Timo (ADITG/ESB)
2018-03-22 14:55 ` Takashi Iwai
2018-03-22 15:17 ` Wischer, Timo (ADITG/ESB)
2018-03-22 16:22 ` Takashi Iwai
2018-03-23 7:23 ` Wischer, Timo (ADITG/ESB)
2018-03-23 7:28 ` Takashi Iwai
2018-03-23 7:43 ` Wischer, Timo (ADITG/ESB)
2018-03-23 8:01 ` Takashi Iwai
2018-03-23 8:08 ` Takashi Iwai
2018-03-23 9:03 ` Takashi Iwai
2018-03-28 8:42 ` Wischer, Timo (ADITG/ESB)
2018-03-28 16:09 ` Takashi Iwai [this message]
2018-03-29 6:39 ` Wischer, Timo (ADITG/ESB)
2018-03-29 7:25 ` Takashi Iwai
2018-03-29 7:38 ` Wischer, Timo (ADITG/ESB)
2018-03-23 8:21 ` Wischer, Timo (ADITG/ESB)
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=s5hr2o4kwrn.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
--cc=twischer@de.adit-jv.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).