diff options
author | Volker Rümelin <vr_qemu@t-online.de> | 2022-09-23 20:36:39 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2022-10-11 10:17:08 +0200 |
commit | b73ef11ff68f05418c8b60945b1e1783a72bd822 (patch) | |
tree | 592b6c42393f1bb795b9c1edeb8b33907ba88da4 /audio/audio_template.h | |
parent | 0724c57988f4ad826b02f12093ace5ef657cec21 (diff) |
audio: fix sw->buf size for audio recording
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>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20220923183640.8314-11-vr_qemu@t-online.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'audio/audio_template.h')
-rw-r--r-- | audio/audio_template.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/audio/audio_template.h b/audio/audio_template.h index 98ab557684..720a32e57e 100644 --- a/audio/audio_template.h +++ b/audio/audio_template.h @@ -110,7 +110,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) { |