The rewind or forward may cause the stream pointer change. Although
this patch does not fix the real meter update issue, it breaks
the possible big loops when the stream pointers are desynced with
the meters. It does not make sense to copy more samples than the
pcm buffer contains.
Link: https://lore.kernel.org/alsa-devel/f56d6a67-014a-e562-c253-830c0ec03717@ivitera.com/
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
snd_pcm_uframes_t frames)
{
snd_pcm_meter_t *meter = pcm->private_data;
+ if (frames > pcm->buffer_size)
+ frames = pcm->buffer_size;
while (frames > 0) {
snd_pcm_uframes_t n = frames;
snd_pcm_uframes_t dst_offset = ptr % meter->buf_size;
size = meter->now - s16->old;
if (size < 0)
size += spcm->boundary;
+ if (size > (snd_pcm_sframes_t)s16->pcm->buffer_size)
+ size = s16->pcm->buffer_size;
offset = s16->old % meter->buf_size;
while (size > 0) {
snd_pcm_uframes_t frames = size;