From dd609ef9684987d3ca61d5c5cc3c77589ff9c29f Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 21 Jun 2021 09:28:41 +0200 Subject: [PATCH] pcm: direct plugins - fix hw_ptr in the status callback The parent hw_ptr may be in another range (boundary limit). Set the correct value for the caller. BugLink: https://github.com/alsa-project/alsa-lib/issues/155 Signed-off-by: Jaroslav Kysela --- src/pcm/pcm_dmix.c | 1 + src/pcm/pcm_dshare.c | 1 + src/pcm/pcm_dsnoop.c | 1 + 3 files changed, 3 insertions(+) diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index 0d0d0bff..94dbb1e0 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -491,6 +491,7 @@ static int snd_pcm_dmix_status(snd_pcm_t *pcm, snd_pcm_status_t * status) } status->state = snd_pcm_dmix_state(pcm); + status->hw_ptr = *pcm->hw.ptr; /* boundary may be different */ status->appl_ptr = *pcm->appl.ptr; /* slave PCM doesn't set appl_ptr */ status->trigger_tstamp = dmix->trigger_tstamp; status->avail = snd_pcm_mmap_playback_avail(pcm); diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c index a918512b..01814dc8 100644 --- a/src/pcm/pcm_dshare.c +++ b/src/pcm/pcm_dshare.c @@ -243,6 +243,7 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status) break; } status->state = snd_pcm_dshare_state(pcm); + status->hw_ptr = *pcm->hw.ptr; /* boundary may be different */ status->appl_ptr = *pcm->appl.ptr; /* slave PCM doesn't set appl_ptr */ status->trigger_tstamp = dshare->trigger_tstamp; status->avail = snd_pcm_mmap_playback_avail(pcm); diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c index 2c3b9f43..3f28df99 100644 --- a/src/pcm/pcm_dsnoop.c +++ b/src/pcm/pcm_dsnoop.c @@ -193,6 +193,7 @@ static int snd_pcm_dsnoop_status(snd_pcm_t *pcm, snd_pcm_status_t * status) snd_pcm_status(dsnoop->spcm, status); state = snd_pcm_state(dsnoop->spcm); status->state = state == SND_PCM_STATE_RUNNING ? dsnoop->state : state; + status->hw_ptr = *pcm->hw.ptr; /* boundary may be different */ status->appl_ptr = *pcm->appl.ptr; /* slave PCM doesn't set appl_ptr */ status->trigger_tstamp = dsnoop->trigger_tstamp; status->avail = snd_pcm_mmap_capture_avail(pcm); -- 2.47.3