[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 02/27] audio: log unimplemented audio device sample rates
From: |
marcandre . lureau |
Subject: |
[PULL 02/27] audio: log unimplemented audio device sample rates |
Date: |
Mon, 6 Mar 2023 10:51:37 +0400 |
From: Volker Rümelin <vr_qemu@t-online.de>
Some emulated audio devices allow guests to select very low
sample rates that the audio subsystem doesn't support. The lowest
supported sample rate depends on the audio backend used and in
most cases can be changed with various -audiodev arguments. Until
now, the audio_bug function emits an error message similar to the
following error message
A bug was just triggered in audio_calloc
Save all your work and restart without audio
I am sorry
Context:
audio_pcm_sw_alloc_resources_out passed invalid arguments to
audio_calloc
nmemb=0 size=16 (len=0)
audio: Could not allocate buffer for `ac97.po' (0 samples)
and the audio subsystem continues without sound for the affected
device.
The fact that the selected sample rate is not supported is not a
guest error. Instead of displaying an error message, the missing
audio support is now logged. Simply continuing without sound is
correct, since the audio stream won't transport anything
reasonable at such high resample ratios anyway.
The AUD_open_* functions return NULL like before. The opened
audio device will not be registered in the audio subsystem and
consequently the audio frontend callback functions will not be
called. The AUD_read and AUD_write functions return early in this
case. This is necessary because, for example, the Sound Blaster 16
emulation calls AUD_write from the DMA callback function.
Acked-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20230121094735.11644-1-vr_qemu@t-online.de>
---
audio/audio_template.h | 13 +++++++++++++
audio/audio.c | 1 +
2 files changed, 14 insertions(+)
diff --git a/audio/audio_template.h b/audio/audio_template.h
index 42b4712acb..dbfb4fee4c 100644
--- a/audio/audio_template.h
+++ b/audio/audio_template.h
@@ -115,6 +115,19 @@ static int glue (audio_pcm_sw_alloc_resources_, TYPE) (SW
*sw)
#else
samples = (int64_t)sw->HWBUF->size * sw->ratio >> 32;
#endif
+ if (samples == 0) {
+ HW *hw = sw->hw;
+ size_t f_fe_min;
+
+ /* f_fe_min = ceil(1 [frames] * f_be [Hz] / size_be [frames]) */
+ f_fe_min = (hw->info.freq + HWBUF->size - 1) / HWBUF->size;
+ qemu_log_mask(LOG_UNIMP,
+ AUDIO_CAP ": The guest selected a " NAME " sample rate"
+ " of %d Hz for %s. Only sample rates >= %zu Hz are"
+ " supported.\n",
+ sw->info.freq, sw->name, f_fe_min);
+ return -1;
+ }
sw->buf = audio_calloc(__func__, samples, sizeof(struct st_sample));
if (!sw->buf) {
diff --git a/audio/audio.c b/audio/audio.c
index 4290309d18..81f5c0bb1e 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -33,6 +33,7 @@
#include "qapi/qapi-visit-audio.h"
#include "qapi/qapi-commands-audio.h"
#include "qemu/cutils.h"
+#include "qemu/log.h"
#include "qemu/module.h"
#include "qemu/help_option.h"
#include "sysemu/sysemu.h"
--
2.39.2
- [PULL 00/27] Audio patches, marcandre . lureau, 2023/03/06
- [PULL 03/27] audio: don't show unnecessary error messages, marcandre . lureau, 2023/03/06
- [PULL 02/27] audio: log unimplemented audio device sample rates,
marcandre . lureau <=
- [PULL 01/27] MAINTAINERS: add myself to ui/ and audio/, marcandre . lureau, 2023/03/06
- [PULL 04/27] audio: rename hardware store to backend, marcandre . lureau, 2023/03/06
- [PULL 05/27] audio: remove unused #define AUDIO_STRINGIFY, marcandre . lureau, 2023/03/06
- [PULL 06/27] audio/mixeng: use g_new0() instead of audio_calloc(), marcandre . lureau, 2023/03/06
- [PULL 09/27] audio/audio_template: use g_new0() to replace audio_calloc(), marcandre . lureau, 2023/03/06
- [PULL 07/27] audio/alsaaudio: use g_new0() instead of audio_calloc(), marcandre . lureau, 2023/03/06
- [PULL 10/27] audio: remove audio_calloc() function, marcandre . lureau, 2023/03/06
- [PULL 08/27] audio/audio_template: use g_malloc0() to replace audio_calloc(), marcandre . lureau, 2023/03/06
- [PULL 11/27] alsaaudio: change default playback settings, marcandre . lureau, 2023/03/06
- [PULL 12/27] alsaaudio: reintroduce default recording settings, marcandre . lureau, 2023/03/06