mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-10 00:45:41 +01:00
aplay: pcm_readv(): return read samples instead of requested upon abort
This patch changes the logic of pcm_readv() when abort signal has been detected. During such condition we should return the amount of frames actually read instead of the size requested by caller. Currently functions pcm_read() and pcm_readv() when aborted (in_aborting flag set) return the amount of requested frames instead of those actually read prior to interrupt. The consequence of this is repetition of recent X frames where X stands for amount of frames in one period. This problem is barely visible or rather audible when the period is small like few milliseconds because repetition of 1 [ms] of data is not-noticeable however if we use buffer and period sizes in seconds then the problem becomes apparent. Example issue -> thesofproject/sof#3189 Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
8572c0c427
commit
bc7a944c50
1 changed files with 4 additions and 1 deletions
|
@ -2174,7 +2174,9 @@ static ssize_t pcm_readv(u_char **data, unsigned int channels, size_t rcount)
|
||||||
count = chunk_size;
|
count = chunk_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (count > 0 && !in_aborting) {
|
while (count > 0) {
|
||||||
|
if (in_aborting)
|
||||||
|
goto abort;
|
||||||
unsigned int channel;
|
unsigned int channel;
|
||||||
void *bufs[channels];
|
void *bufs[channels];
|
||||||
size_t offset = result;
|
size_t offset = result;
|
||||||
|
@ -2206,6 +2208,7 @@ static ssize_t pcm_readv(u_char **data, unsigned int channels, size_t rcount)
|
||||||
count -= r;
|
count -= r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
abort:
|
||||||
return rcount;
|
return rcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue