[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 11/12] audio: fix sw->buf size for audio recording
From: |
Volker Rümelin |
Subject: |
[PATCH 11/12] audio: fix sw->buf size for audio recording |
Date: |
Fri, 23 Sep 2022 20:36:39 +0200 |
The calculation of the buffer size needed to store audio samples
after resampling is wrong for audio recording. For audio recording
sw->ratio is calculated as
sw->ratio = frontend sample rate / backend sample rate.
>From this follows
frontend samples = frontend sample rate / backend sample rate
* backend samples
frontend samples = sw->ratio * backend samples
In 2 of 3 places in the audio recording code where sw->ratio
is used in a calculation to get the number of frontend frames,
the calculation is wrong. Fix this. The 3rd formula in
audio_pcm_sw_read() is correct.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/71
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
audio/audio.c | 2 +-
audio/audio_template.h | 4 ++++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/audio/audio.c b/audio/audio.c
index ba0c62b120..60c7472d37 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -995,7 +995,7 @@ void AUD_set_active_in (SWVoiceIn *sw, int on)
*/
static size_t audio_frontend_frames_in(SWVoiceIn *sw, size_t frames_in)
{
- return ((int64_t)frames_in << 32) / sw->ratio;
+ return (int64_t)frames_in * sw->ratio >> 32;
}
static size_t audio_get_avail (SWVoiceIn *sw)
diff --git a/audio/audio_template.h b/audio/audio_template.h
index 7192b19e73..6a0337ac6b 100644
--- a/audio/audio_template.h
+++ b/audio/audio_template.h
@@ -112,7 +112,11 @@ static int glue (audio_pcm_sw_alloc_resources_, TYPE) (SW
*sw)
return 0;
}
+#ifdef DAC
samples = ((int64_t) sw->HWBUF->size << 32) / sw->ratio;
+#else
+ samples = (int64_t)sw->HWBUF->size * sw->ratio >> 32;
+#endif
sw->buf = audio_calloc(__func__, samples, sizeof(struct st_sample));
if (!sw->buf) {
--
2.35.3
- [PATCH 00/12] audio: misc. improvements and bug fixes, Volker Rümelin, 2022/09/23
- [PATCH 02/12] audio: fix GUS audio playback with out.mixing-engine=off, Volker Rümelin, 2022/09/23
- [PATCH 01/12] audio: refactor code in audio_run_out(), Volker Rümelin, 2022/09/23
- [PATCH 05/12] audio: add more audio rate control functions, Volker Rümelin, 2022/09/23
- [PATCH 03/12] audio: run downstream playback queue unconditionally, Volker Rümelin, 2022/09/23
- [PATCH 11/12] audio: fix sw->buf size for audio recording,
Volker Rümelin <=
- [PATCH 10/12] audio: refactor audio_get_avail(), Volker Rümelin, 2022/09/23
- [PATCH 04/12] alsaaudio: reduce playback latency, Volker Rümelin, 2022/09/23
- [PATCH 12/12] audio: prevent an integer overflow in resampling code, Volker Rümelin, 2022/09/23
- [PATCH 07/12] spiceaudio: update comment, Volker Rümelin, 2022/09/23
- [PATCH 09/12] audio: rename audio_sw_bytes_free(), Volker Rümelin, 2022/09/23