From nobody Sat Jul 12 05:10:03 2025 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1674294514304777.6787841810662; Sat, 21 Jan 2023 01:48:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pJATr-0006hE-Q0; Sat, 21 Jan 2023 04:48:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pJATY-0006d5-Lm for qemu-devel@nongnu.org; Sat, 21 Jan 2023 04:47:59 -0500 Received: from mailout06.t-online.de ([194.25.134.19]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pJATW-00038c-4u for qemu-devel@nongnu.org; Sat, 21 Jan 2023 04:47:52 -0500 Received: from fwd70.dcpf.telekom.de (fwd70.aul.t-online.de [10.223.144.96]) by mailout06.t-online.de (Postfix) with SMTP id 5D8E428351; Sat, 21 Jan 2023 10:47:38 +0100 (CET) Received: from linpower.localnet ([79.208.25.151]) by fwd70.t-online.de with (TLSv1.3:TLS_AES_256_GCM_SHA384 encrypted) esmtp id 1pJATH-3H3nAv0; Sat, 21 Jan 2023 10:47:35 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 3B7A320061B; Sat, 21 Jan 2023 10:47:35 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Cc: Christian Schoenebeck , Thomas Huth , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Richard Henderson , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , 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 Message-Id: <20230121094735.11644-1-vr_qemu@t-online.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <0a4007dc-e11c-f16e-0e21-dbc4e60caa59@t-online.de> References: <0a4007dc-e11c-f16e-0e21-dbc4e60caa59@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1674294455-157FF778-CAA3406D/0/0 CLEAN NORMAL X-TOI-MSGID: 191918ec-9d9f-46a6-ada9-e4dccae03e68 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=194.25.134.19; envelope-from=volker.ruemelin@t-online.de; helo=mailout06.t-online.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZM-MESSAGEID: 1674294515886100001 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=3D0 size=3D16 (len=3D0) 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 Signed-off-by: Volker R=C3=BCmelin --- 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 =3D (int64_t)sw->HWBUF->size * sw->ratio >> 32; #endif + if (samples =3D=3D 0) { + HW *hw =3D sw->hw; + size_t f_fe_min; + + /* f_fe_min =3D ceil(1 [frames] * f_be [Hz] / size_be [frames]) */ + f_fe_min =3D (hw->info.freq + HWBUF->size - 1) / HWBUF->size; + qemu_log_mask(LOG_UNIMP, + AUDIO_CAP ": The guest selected a " NAME " sample ra= te" + " of %d Hz for %s. Only sample rates >=3D %zu Hz are" + " supported.\n", + sw->info.freq, sw->name, f_fe_min); + return -1; + } =20 sw->buf =3D audio_calloc(__func__, samples, sizeof(struct st_sample)); if (!sw->buf) { --=20 2.35.3