On 11/19/19 9:01 AM, Philippe Mathieu-Daudé wrote: > Cc'ing Zoltán. > > On 11/19/19 7:58 AM, Volker Rümelin wrote: >> With current code audio recording with all audio backends >> except PulseAudio and DirectSound is broken. The generic audio >> recording buffer management forgot to update the current read >> position after a read. >> >> Fixes: ff095e5231 "audio: api for mixeng code free backends" >> >> Signed-off-by: Volker Rümelin <vr_q...@t-online.de> >> --- >> audio/audio.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/audio/audio.c b/audio/audio.c >> index 7fc3aa9d16..56fae55047 100644 >> --- a/audio/audio.c >> +++ b/audio/audio.c >> @@ -1390,6 +1390,7 @@ void *audio_generic_get_buffer_in(HWVoiceIn *hw, size_t >> *size) >> size_t read = hw->pcm_ops->read(hw, hw->buf_emul + hw->pos_emul, >> read_len); >> hw->pending_emul += read; >> + hw->pos_emul = (hw->pos_emul + read) % hw->size_emul; > > Anyway since read() can return a negative value, both previous assignments > should go after this if/break check...
This isn't read(2). size_t (*read) (HWVoiceIn *hw, void *buf, size_t size); Since this isn't ssize_t, no negative return value possible. r~