qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Volker Rümelin" <vr_qemu@t-online.de>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: "Christian Schoenebeck" <qemu_oss@crudebyte.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Daniel P . Berrangé" <berrange@redhat.com>,
	qemu-devel@nongnu.org
Subject: [PATCH v2 01/11] audio: log unimplemented audio device sample rates
Date: Sat, 21 Jan 2023 10:47:25 +0100	[thread overview]
Message-ID: <20230121094735.11644-1-vr_qemu@t-online.de> (raw)
In-Reply-To: <0a4007dc-e11c-f16e-0e21-dbc4e60caa59@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>
---
 audio/audio.c          |  1 +
 audio/audio_template.h | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/audio/audio.c b/audio/audio.c
index d849a94a81..f6b420688d 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -31,6 +31,7 @@
 #include "qapi/qobject-input-visitor.h"
 #include "qapi/qapi-visit-audio.h"
 #include "qemu/cutils.h"
+#include "qemu/log.h"
 #include "qemu/module.h"
 #include "qemu/help_option.h"
 #include "sysemu/sysemu.h"
diff --git a/audio/audio_template.h b/audio/audio_template.h
index 720a32e57e..bfa94b4d22 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) {
-- 
2.35.3



  reply	other threads:[~2023-01-21  9:48 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-21  9:45 [PATCH v2 00/11] audio: more improvements Volker Rümelin
2023-01-21  9:47 ` Volker Rümelin [this message]
2023-01-21  9:47 ` [PATCH v2 02/11] audio: don't show unnecessary error messages Volker Rümelin
2023-01-21  9:47 ` [PATCH v2 03/11] audio: rename hardware store to backend Volker Rümelin
2023-01-23  7:33   ` Philippe Mathieu-Daudé
2023-01-21  9:47 ` [PATCH v2 04/11] audio: remove unused #define AUDIO_STRINGIFY Volker Rümelin
2023-01-21  9:47 ` [PATCH v2 05/11] audio/mixeng: use g_new0() instead of audio_calloc() Volker Rümelin
2023-01-21  9:47 ` [PATCH v2 06/11] audio/alsaaudio: " Volker Rümelin
2023-01-21  9:47 ` [PATCH v2 07/11] audio/audio_template: use g_malloc0() to replace audio_calloc() Volker Rümelin
2023-01-23 11:03   ` Daniel P. Berrangé
2023-01-21  9:47 ` [PATCH v2 08/11] audio/audio_template: use g_new0() " Volker Rümelin
2023-01-23 11:04   ` Daniel P. Berrangé
2023-01-21  9:47 ` [PATCH v2 09/11] audio: remove audio_calloc() function Volker Rümelin
2023-01-21  9:47 ` [PATCH v2 10/11] alsaaudio: change default playback settings Volker Rümelin
2023-01-23  7:43   ` Philippe Mathieu-Daudé
2023-01-24  7:34     ` Volker Rümelin
2023-01-21  9:47 ` [PATCH v2 11/11] alsaaudio: reintroduce default recording settings Volker Rümelin
2023-01-23  7:44   ` Philippe Mathieu-Daudé
2023-01-31 14:51 ` [PATCH v2 00/11] audio: more improvements Marc-André Lureau
2023-03-05 17:35 ` Volker Rümelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230121094735.11644-1-vr_qemu@t-online.de \
    --to=vr_qemu@t-online.de \
    --cc=berrange@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).