From nobody Tue Feb 10 23:14:38 2026 Delivered-To: importer@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+importer=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 1663958610744863.7901052135006; Fri, 23 Sep 2022 11:43:30 -0700 (PDT) Received: from localhost ([::1]:50180 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1obne5-0003b8-Kw for importer@patchew.org; Fri, 23 Sep 2022 14:43:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38122) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1obnXh-0002hC-9T for qemu-devel@nongnu.org; Fri, 23 Sep 2022 14:36:54 -0400 Received: from mailout04.t-online.de ([194.25.134.18]:46008) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1obnXf-0005Ed-NX for qemu-devel@nongnu.org; Fri, 23 Sep 2022 14:36:53 -0400 Received: from fwd74.dcpf.telekom.de (fwd74.aul.t-online.de [10.223.144.100]) by mailout04.t-online.de (Postfix) with SMTP id 7C23F8D3; Fri, 23 Sep 2022 20:36:50 +0200 (CEST) Received: from linpower.localnet ([84.175.228.229]) by fwd74.t-online.de with (TLSv1.3:TLS_AES_256_GCM_SHA384 encrypted) esmtp id 1obnXe-2OFYmH0; Fri, 23 Sep 2022 20:36:50 +0200 Received: by linpower.localnet (Postfix, from userid 1000) id 9E49820061A; Fri, 23 Sep 2022 20:36:40 +0200 (CEST) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Cc: qemu-devel@nongnu.org Subject: [PATCH 05/12] audio: add more audio rate control functions Date: Fri, 23 Sep 2022 20:36:33 +0200 Message-Id: <20220923183640.8314-5-vr_qemu@t-online.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <38d7417a-fc26-be39-6a63-99c79ee15fc9@t-online.de> References: <38d7417a-fc26-be39-6a63-99c79ee15fc9@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1663958210-CA4B6B6F-3D2A2FE2/0/0 CLEAN NORMAL X-TOI-MSGID: e62cfc33-cc85-45f9-a9de-260a689295ad 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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=194.25.134.18; envelope-from=volker.ruemelin@t-online.de; helo=mailout04.t-online.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1663958611092100001 The next patch needs two new rate control functions. The first one returns the bytes needed at call time to maintain the selected rate. The second one adjusts the bytes actually sent. Split the audio_rate_get_bytes() function into these two functions and reintroduce audio_rate_get_bytes(). Signed-off-by: Volker R=C3=BCmelin Reviewed-by: Marc-Andr=C3=A9 Lureau --- audio/audio.c | 35 ++++++++++++++++++++++++----------- audio/audio_int.h | 2 ++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/audio/audio.c b/audio/audio.c index 9e55834909..557538a7b7 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -2250,26 +2250,39 @@ void audio_rate_start(RateCtl *rate) rate->start_ticks =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); } =20 -size_t audio_rate_get_bytes(struct audio_pcm_info *info, RateCtl *rate, - size_t bytes_avail) +size_t audio_rate_peek_bytes(RateCtl *rate, struct audio_pcm_info *info) { int64_t now; int64_t ticks; int64_t bytes; - int64_t samples; - size_t ret; + int64_t frames; =20 now =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); ticks =3D now - rate->start_ticks; bytes =3D muldiv64(ticks, info->bytes_per_second, NANOSECONDS_PER_SECO= ND); - samples =3D (bytes - rate->bytes_sent) / info->bytes_per_frame; - if (samples < 0 || samples > 65536) { - AUD_log(NULL, "Resetting rate control (%" PRId64 " samples)\n", sa= mples); + frames =3D (bytes - rate->bytes_sent) / info->bytes_per_frame; + if (frames < 0 || frames > 65536) { + AUD_log(NULL, "Resetting rate control (%" PRId64 " frames)\n", fra= mes); audio_rate_start(rate); - samples =3D 0; + frames =3D 0; } =20 - ret =3D MIN(samples * info->bytes_per_frame, bytes_avail); - rate->bytes_sent +=3D ret; - return ret; + return frames * info->bytes_per_frame; +} + +void audio_rate_add_bytes(RateCtl *rate, size_t bytes_used) +{ + rate->bytes_sent +=3D bytes_used; +} + +size_t audio_rate_get_bytes(struct audio_pcm_info *info, RateCtl *rate, + size_t bytes_avail) +{ + size_t bytes; + + bytes =3D audio_rate_peek_bytes(rate, info); + bytes =3D MIN(bytes, bytes_avail); + audio_rate_add_bytes(rate, bytes); + + return bytes; } diff --git a/audio/audio_int.h b/audio/audio_int.h index 2a6914d2aa..97e20e8429 100644 --- a/audio/audio_int.h +++ b/audio/audio_int.h @@ -263,6 +263,8 @@ typedef struct RateCtl { } RateCtl; =20 void audio_rate_start(RateCtl *rate); +size_t audio_rate_peek_bytes(RateCtl *rate, struct audio_pcm_info *info); +void audio_rate_add_bytes(RateCtl *rate, size_t bytes_used); size_t audio_rate_get_bytes(struct audio_pcm_info *info, RateCtl *rate, size_t bytes_avail); =20 --=20 2.35.3