]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: hw: fix the silence size setup in drain
authorJaroslav Kysela <perex@perex.cz>
Wed, 3 May 2023 20:24:47 +0000 (22:24 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 3 May 2023 20:27:40 +0000 (22:27 +0200)
The silence size cannot exceed the silence threshold. Move the check
from the manual condition to the common code. This may happen for
small ring buffers (where the 1/10th second is too large).

Suggested-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm_hw.c

index 180a3e84b7640561e2d1fed055fd56ed2ff18a52..8ffebed9e9db551424c79c2576a8bf51a4e1c173 100644 (file)
@@ -747,8 +747,6 @@ static int snd_pcm_hw_drain(snd_pcm_t *pcm)
        snd_pcm_sw_params_current_no_lock(pcm, &sw_params);
        if (hw->drain_silence > 0) {
                silence_size = (pcm->rate * hw->drain_silence) / 1000;
-               if (silence_size > pcm->buffer_size)
-                       silence_size = pcm->buffer_size;
                goto __manual_silence;
        }
        /* compute end silence size, align to period size + extra time */
@@ -770,6 +768,8 @@ __manual_silence:
                 * or the next period wake up)
                 */
                sw_params.silence_threshold = pcm->buffer_size;
+               if (silence_size > pcm->buffer_size)
+                       silence_size = pcm->buffer_size;
                sw_params.silence_size = silence_size;
                if (ioctl(hw->fd, SNDRV_PCM_IOCTL_SW_PARAMS, &sw_params) < 0) {
                        err = -errno;