You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
ALSA: aloop: Fix random zeros in capture data when using jiffies timer
commit 3e48940abe upstream.
In loopback_jiffies_timer_pos_update(), we are getting jiffies twice.
First time for playback, second time for capture. Jiffies can be updated
between these two calls and if the capture jiffies is larger, extra zeros
will be filled in the capture buffer.
Change to get jiffies once and use it for both playback and capture.
Signed-off-by: Pattara Teerapong <pteerapong@chromium.org>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20220901144036.4049060-1-pteerapong@chromium.org
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
39a90720f3
commit
ab730d3c44
@@ -606,17 +606,18 @@ static unsigned int loopback_jiffies_timer_pos_update
|
||||
cable->streams[SNDRV_PCM_STREAM_PLAYBACK];
|
||||
struct loopback_pcm *dpcm_capt =
|
||||
cable->streams[SNDRV_PCM_STREAM_CAPTURE];
|
||||
unsigned long delta_play = 0, delta_capt = 0;
|
||||
unsigned long delta_play = 0, delta_capt = 0, cur_jiffies;
|
||||
unsigned int running, count1, count2;
|
||||
|
||||
cur_jiffies = jiffies;
|
||||
running = cable->running ^ cable->pause;
|
||||
if (running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) {
|
||||
delta_play = jiffies - dpcm_play->last_jiffies;
|
||||
delta_play = cur_jiffies - dpcm_play->last_jiffies;
|
||||
dpcm_play->last_jiffies += delta_play;
|
||||
}
|
||||
|
||||
if (running & (1 << SNDRV_PCM_STREAM_CAPTURE)) {
|
||||
delta_capt = jiffies - dpcm_capt->last_jiffies;
|
||||
delta_capt = cur_jiffies - dpcm_capt->last_jiffies;
|
||||
dpcm_capt->last_jiffies += delta_capt;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user