All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jaroslav Kysela <perex@perex.cz>
To: ALSA development <alsa-devel@alsa-project.org>
Cc: Takashi Iwai <tiwai@suse.de>,
	Oswald Buddenhagen <oswald.buddenhagen@gmx.de>,
	Jeff Chua <jeff.chua.linux@gmail.com>
Subject: [PATCH 2/5] ALSA: pcm: fix playback silence - use the actual new_hw_ptr for the threshold mode
Date: Fri,  5 May 2023 09:38:10 +0200	[thread overview]
Message-ID: <20230505073813.1219175-3-perex@perex.cz> (raw)
In-Reply-To: <20230505073813.1219175-1-perex@perex.cz>

The snd_pcm_playback_hw_avail() function uses runtime->status->hw_ptr.
Unfortunately, in case when we call this function from snd_pcm_update_hw_ptr0(),
this variable contains the previous hardware pointer. Use the new_hw_ptr
argument to calculate hw_avail (filled samples by the user space) to
correct the threshold comparison.

The new_hw_ptr argument may also be set to ULONG_MAX which means the
initialization phase. In this case, use runtime->status->hw_ptr.

Suggested-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
 sound/core/pcm_lib.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index af1eb136feb0..8a01aeda2213 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -63,7 +63,15 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
 		}
 		if (runtime->silence_filled >= runtime->buffer_size)
 			return;
-		noise_dist = snd_pcm_playback_hw_avail(runtime) + runtime->silence_filled;
+		/* initialization outside pointer updates */
+		if (new_hw_ptr == ULONG_MAX)
+			new_hw_ptr = runtime->status->hw_ptr;
+		/* get hw_avail with the boundary crossing */
+		noise_dist = appl_ptr - new_hw_ptr;
+		if (noise_dist < 0)
+			noise_dist += runtime->boundary;
+		/* total noise distance */
+		noise_dist += runtime->silence_filled;
 		if (noise_dist >= (snd_pcm_sframes_t) runtime->silence_threshold)
 			return;
 		frames = runtime->silence_threshold - noise_dist;
-- 
2.39.2


  parent reply	other threads:[~2023-05-05  7:40 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-05  7:38 [PATCH 0/5] rewrite snd_pcm_playback_silence() again Jaroslav Kysela
2023-05-05  7:38 ` [PATCH 1/5] ALSA: pcm: Revert "ALSA: pcm: rewrite snd_pcm_playback_silence()" Jaroslav Kysela
2023-05-05  9:31   ` Takashi Iwai
2023-05-05  9:38     ` Oswald Buddenhagen
2023-05-05 10:44       ` Takashi Iwai
2023-05-05  7:38 ` Jaroslav Kysela [this message]
2023-05-05  7:38 ` [PATCH 3/5] ALSA: pcm: fix playback silence - correct the incremental silencing Jaroslav Kysela
2023-05-05  9:57   ` Takashi Iwai
2023-05-05 10:17     ` Oswald Buddenhagen
2023-05-05  7:38 ` [PATCH 4/5] ALSA: pcm: playback silence - remove extra code Jaroslav Kysela
2023-05-05  7:38 ` [PATCH 5/5] ALSA: pcm: playback silence - move silence variables updates to separate function Jaroslav Kysela
2023-05-05  9:22 ` [PATCH 0/5] rewrite snd_pcm_playback_silence() again 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=20230505073813.1219175-3-perex@perex.cz \
    --to=perex@perex.cz \
    --cc=alsa-devel@alsa-project.org \
    --cc=jeff.chua.linux@gmail.com \
    --cc=oswald.buddenhagen@gmx.de \
    --cc=tiwai@suse.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.