aplay: pcm_read(): return read samples instead of requested upon abort

This patch changes the logic of pcm_read() 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.

Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Marcin Rajwa 2020-08-07 17:35:44 +02:00 committed by Jaroslav Kysela
parent bc7a944c50
commit 5e87e2e021

View file

@ -2135,7 +2135,9 @@ static ssize_t pcm_read(u_char *data, size_t rcount)
count = chunk_size; count = chunk_size;
} }
while (count > 0 && !in_aborting) { while (count > 0) {
if (in_aborting)
goto abort;
if (test_position) if (test_position)
do_test_position(); do_test_position();
check_stdin(); check_stdin();
@ -2161,6 +2163,7 @@ static ssize_t pcm_read(u_char *data, size_t rcount)
data += r * bits_per_frame / 8; data += r * bits_per_frame / 8;
} }
} }
abort:
return rcount; return rcount;
} }