mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-05 13:30:00 -05:00
pcm: meter / s16 - add protection for the maximum copied frames
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>
This commit is contained in:
parent
aa89ad9362
commit
a6c8ac0c85
1 changed files with 4 additions and 0 deletions
|
|
@ -79,6 +79,8 @@ static void snd_pcm_meter_add_frames(snd_pcm_t *pcm,
|
|||
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;
|
||||
|
|
@ -1100,6 +1102,8 @@ static void s16_update(snd_pcm_scope_t *scope)
|
|||
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue