From nobody Sat May 11 09:21:50 2024 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 16461626584971017.9693521705981; Tue, 1 Mar 2022 11:24:18 -0800 (PST) Received: from localhost ([::1]:54768 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP86b-0005fj-GM for importer@patchew.org; Tue, 01 Mar 2022 14:24:17 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43132) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7vz-0004yT-E7 for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:19 -0500 Received: from mailout04.t-online.de ([194.25.134.18]:55406) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7vx-0001na-IK for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:19 -0500 Received: from fwd78.dcpf.telekom.de (fwd78.aul.t-online.de [10.223.144.104]) by mailout04.t-online.de (Postfix) with SMTP id 615155BE6; Tue, 1 Mar 2022 20:13:13 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd78.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7vs-2MqfK50; Tue, 1 Mar 2022 20:13:12 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id E81CF2001F6; Tue, 1 Mar 2022 20:13:11 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 01/15] audio: replace open-coded buffer arithmetic Date: Tue, 1 Mar 2022 20:12:57 +0100 Message-Id: <20220301191311.26695-1-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646161992-0000AD4E-05E3BA0D/0/0 CLEAN NORMAL X-TOI-MSGID: c6f4f0af-2d18-425c-aeb4-aa4408c89f8d 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, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: Thomas Huth , Christian Schoenebeck , qemu-devel@nongnu.org, Akihiko Odaki Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162659339100003 Replace open-coded buffer arithmetic with the new function audio_ring_posb(). That's the position in backward direction of a given point at a given distance. Signed-off-by: Volker R=C3=BCmelin Reviewed-by: Akihiko Odaki --- audio/audio.c | 25 +++++++------------------ audio/audio_int.h | 13 +++++++++++++ audio/coreaudio.c | 10 ++++------ audio/sdlaudio.c | 11 +++++------ 4 files changed, 29 insertions(+), 30 deletions(-) diff --git a/audio/audio.c b/audio/audio.c index dc28685d22..e7a139e289 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -574,19 +574,13 @@ static size_t audio_pcm_sw_get_rpos_in(SWVoiceIn *sw) { HWVoiceIn *hw =3D sw->hw; ssize_t live =3D hw->total_samples_captured - sw->total_hw_samples_acq= uired; - ssize_t rpos; =20 if (audio_bug(__func__, live < 0 || live > hw->conv_buf->size)) { dolog("live=3D%zu hw->conv_buf->size=3D%zu\n", live, hw->conv_buf-= >size); return 0; } =20 - rpos =3D hw->conv_buf->pos - live; - if (rpos >=3D 0) { - return rpos; - } else { - return hw->conv_buf->size + rpos; - } + return audio_ring_posb(hw->conv_buf->pos, live, hw->conv_buf->size); } =20 static size_t audio_pcm_sw_read(SWVoiceIn *sw, void *buf, size_t size) @@ -1394,12 +1388,10 @@ void audio_generic_run_buffer_in(HWVoiceIn *hw) =20 void *audio_generic_get_buffer_in(HWVoiceIn *hw, size_t *size) { - ssize_t start =3D (ssize_t)hw->pos_emul - hw->pending_emul; + size_t start; =20 - if (start < 0) { - start +=3D hw->size_emul; - } - assert(start >=3D 0 && start < hw->size_emul); + start =3D audio_ring_posb(hw->pos_emul, hw->pending_emul, hw->size_emu= l); + assert(start < hw->size_emul); =20 *size =3D MIN(*size, hw->pending_emul); *size =3D MIN(*size, hw->size_emul - start); @@ -1415,13 +1407,10 @@ void audio_generic_put_buffer_in(HWVoiceIn *hw, voi= d *buf, size_t size) void audio_generic_run_buffer_out(HWVoiceOut *hw) { while (hw->pending_emul) { - size_t write_len, written; - ssize_t start =3D ((ssize_t) hw->pos_emul) - hw->pending_emul; + size_t write_len, written, start; =20 - if (start < 0) { - start +=3D hw->size_emul; - } - assert(start >=3D 0 && start < hw->size_emul); + start =3D audio_ring_posb(hw->pos_emul, hw->pending_emul, hw->size= _emul); + assert(start < hw->size_emul); =20 write_len =3D MIN(hw->pending_emul, hw->size_emul - start); =20 diff --git a/audio/audio_int.h b/audio/audio_int.h index 428a091d05..71be162271 100644 --- a/audio/audio_int.h +++ b/audio/audio_int.h @@ -266,6 +266,19 @@ static inline size_t audio_ring_dist(size_t dst, size_= t src, size_t len) return (dst >=3D src) ? (dst - src) : (len - src + dst); } =20 +/** + * audio_ring_posb() - returns new position in ringbuffer in backward + * direction at given distance + * + * @pos: current position in ringbuffer + * @dist: distance in ringbuffer to walk in reverse direction + * @len: size of ringbuffer + */ +static inline size_t audio_ring_posb(size_t pos, size_t dist, size_t len) +{ + return pos >=3D dist ? pos - dist : len - dist + pos; +} + #define dolog(fmt, ...) AUD_log(AUDIO_CAP, fmt, ## __VA_ARGS__) =20 #ifdef DEBUG diff --git a/audio/coreaudio.c b/audio/coreaudio.c index d8a21d3e50..1fdd1d4b14 100644 --- a/audio/coreaudio.c +++ b/audio/coreaudio.c @@ -333,12 +333,10 @@ static OSStatus audioDeviceIOProc( =20 len =3D frameCount * hw->info.bytes_per_frame; while (len) { - size_t write_len; - ssize_t start =3D ((ssize_t) hw->pos_emul) - hw->pending_emul; - if (start < 0) { - start +=3D hw->size_emul; - } - assert(start >=3D 0 && start < hw->size_emul); + size_t write_len, start; + + start =3D audio_ring_posb(hw->pos_emul, hw->pending_emul, hw->size= _emul); + assert(start < hw->size_emul); =20 write_len =3D MIN(MIN(hw->pending_emul, len), hw->size_emul - start); diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c index c68c62a3e4..d6f3aa1a9a 100644 --- a/audio/sdlaudio.c +++ b/audio/sdlaudio.c @@ -224,12 +224,11 @@ static void sdl_callback_out(void *opaque, Uint8 *buf= , int len) /* dolog("callback_out: len=3D%d avail=3D%zu\n", len, hw->pending_= emul); */ =20 while (hw->pending_emul && len) { - size_t write_len; - ssize_t start =3D (ssize_t)hw->pos_emul - hw->pending_emul; - if (start < 0) { - start +=3D hw->size_emul; - } - assert(start >=3D 0 && start < hw->size_emul); + size_t write_len, start; + + start =3D audio_ring_posb(hw->pos_emul, hw->pending_emul, + hw->size_emul); + assert(start < hw->size_emul); =20 write_len =3D MIN(MIN(hw->pending_emul, len), hw->size_emul - start); --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162964153462.5822296002027; Tue, 1 Mar 2022 11:29:24 -0800 (PST) Received: from localhost ([::1]:34904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8BW-0003Eu-ME for importer@patchew.org; Tue, 01 Mar 2022 14:29:22 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7w0-00051G-P7 for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:21 -0500 Received: from mailout06.t-online.de ([194.25.134.19]:60624) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7vx-0001nf-IW for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:20 -0500 Received: from fwd89.dcpf.telekom.de (fwd89.aul.t-online.de [10.223.144.115]) by mailout06.t-online.de (Postfix) with SMTP id 99CFD18E15; Tue, 1 Mar 2022 20:13:15 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd89.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7vu-1SNrgP0; Tue, 1 Mar 2022 20:13:15 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id EA79320060C; Tue, 1 Mar 2022 20:13:11 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 02/15] audio: move function audio_pcm_hw_clip_out() Date: Tue, 1 Mar 2022 20:12:58 +0100 Message-Id: <20220301191311.26695-2-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646161995-0000F5B3-8FF0D597/0/0 CLEAN NORMAL X-TOI-MSGID: 71b61ebc-3472-4350-913e-c70c9bc9a364 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.19; envelope-from=volker.ruemelin@t-online.de; helo=mailout06.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162965643100004 Move the function audio_pcm_hw_clip_out() into the correct section 'Hard voice (playback)'. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Volker R=C3=BCmelin --- audio/audio.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/audio/audio.c b/audio/audio.c index e7a139e289..dfd32912da 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -548,25 +548,6 @@ static size_t audio_pcm_hw_get_live_in(HWVoiceIn *hw) return live; } =20 -static void audio_pcm_hw_clip_out(HWVoiceOut *hw, void *pcm_buf, size_t le= n) -{ - size_t clipped =3D 0; - size_t pos =3D hw->mix_buf->pos; - - while (len) { - st_sample *src =3D hw->mix_buf->samples + pos; - uint8_t *dst =3D advance(pcm_buf, clipped * hw->info.bytes_per_fra= me); - size_t samples_till_end_of_buf =3D hw->mix_buf->size - pos; - size_t samples_to_clip =3D MIN(len, samples_till_end_of_buf); - - hw->clip(dst, src, samples_to_clip); - - pos =3D (pos + samples_to_clip) % hw->mix_buf->size; - len -=3D samples_to_clip; - clipped +=3D samples_to_clip; - } -} - /* * Soft voice (capture) */ @@ -677,6 +658,25 @@ static size_t audio_pcm_hw_get_live_out (HWVoiceOut *h= w, int *nb_live) return 0; } =20 +static void audio_pcm_hw_clip_out(HWVoiceOut *hw, void *pcm_buf, size_t le= n) +{ + size_t clipped =3D 0; + size_t pos =3D hw->mix_buf->pos; + + while (len) { + st_sample *src =3D hw->mix_buf->samples + pos; + uint8_t *dst =3D advance(pcm_buf, clipped * hw->info.bytes_per_fra= me); + size_t samples_till_end_of_buf =3D hw->mix_buf->size - pos; + size_t samples_to_clip =3D MIN(len, samples_till_end_of_buf); + + hw->clip(dst, src, samples_to_clip); + + pos =3D (pos + samples_to_clip) % hw->mix_buf->size; + len -=3D samples_to_clip; + clipped +=3D samples_to_clip; + } +} + /* * Soft voice (playback) */ --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646163360811192.75033216758777; Tue, 1 Mar 2022 11:36:00 -0800 (PST) Received: from localhost ([::1]:43770 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8Hv-00014s-PF for importer@patchew.org; Tue, 01 Mar 2022 14:35:59 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43164) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7w0-00051K-Ts for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:21 -0500 Received: from mailout11.t-online.de ([194.25.134.85]:49692) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7vz-0001o2-5O for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:20 -0500 Received: from fwd81.dcpf.telekom.de (fwd81.aul.t-online.de [10.223.144.107]) by mailout11.t-online.de (Postfix) with SMTP id B66A01BD2F; Tue, 1 Mar 2022 20:13:17 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd81.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7vx-2ADn5F0; Tue, 1 Mar 2022 20:13:17 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id ECC0620060E; Tue, 1 Mar 2022 20:13:11 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 03/15] audio: add function audio_pcm_hw_conv_in() Date: Tue, 1 Mar 2022 20:12:59 +0100 Message-Id: <20220301191311.26695-3-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646161997-0000BD0E-03FE81DB/0/0 CLEAN NORMAL X-TOI-MSGID: 1f4836a2-4d24-4c8b-adfb-771c54b42c29 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.85; envelope-from=volker.ruemelin@t-online.de; helo=mailout11.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646163363094100001 Add a function audio_pcm_hw_conv_in() similar to the existing counterpart function audio_pcm_hw_clip_out(). This function reduces the number of calls to the pcm_ops functions get_buffer_in() and put_buffer_in(). That's one less call to get_buffer_in() and put_buffer_in() every time the conv_buffer wraps around. Signed-off-by: Volker R=C3=BCmelin --- audio/audio.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/audio/audio.c b/audio/audio.c index dfd32912da..f28e91853f 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -548,6 +548,24 @@ static size_t audio_pcm_hw_get_live_in(HWVoiceIn *hw) return live; } =20 +static size_t audio_pcm_hw_conv_in(HWVoiceIn *hw, void *pcm_buf, size_t sa= mples) +{ + size_t conv =3D 0; + STSampleBuffer *conv_buf =3D hw->conv_buf; + + while (samples) { + uint8_t *src =3D advance(pcm_buf, conv * hw->info.bytes_per_frame); + size_t proc =3D MIN(samples, conv_buf->size - conv_buf->pos); + + hw->conv(conv_buf->samples + conv_buf->pos, src, proc); + conv_buf->pos =3D (conv_buf->pos + proc) % conv_buf->size; + samples -=3D proc; + conv +=3D proc; + } + + return conv; +} + /* * Soft voice (capture) */ @@ -1219,7 +1237,6 @@ static void audio_run_out (AudioState *s) static size_t audio_pcm_hw_run_in(HWVoiceIn *hw, size_t samples) { size_t conv =3D 0; - STSampleBuffer *conv_buf =3D hw->conv_buf; =20 if (hw->pcm_ops->run_buffer_in) { hw->pcm_ops->run_buffer_in(hw); @@ -1235,11 +1252,7 @@ static size_t audio_pcm_hw_run_in(HWVoiceIn *hw, siz= e_t samples) break; } =20 - proc =3D MIN(size / hw->info.bytes_per_frame, - conv_buf->size - conv_buf->pos); - - hw->conv(conv_buf->samples + conv_buf->pos, buf, proc); - conv_buf->pos =3D (conv_buf->pos + proc) % conv_buf->size; + proc =3D audio_pcm_hw_conv_in(hw, buf, size / hw->info.bytes_per_f= rame); =20 samples -=3D proc; conv +=3D proc; --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646163672461684.7292208838428; Tue, 1 Mar 2022 11:41:12 -0800 (PST) Received: from localhost ([::1]:52080 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8Mx-00071M-Fg for importer@patchew.org; Tue, 01 Mar 2022 14:41:11 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43270) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wC-0005FQ-4O for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:32 -0500 Received: from mailout07.t-online.de ([194.25.134.83]:60072) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7w9-0001ox-DM for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:31 -0500 Received: from fwd72.dcpf.telekom.de (fwd72.aul.t-online.de [10.223.144.98]) by mailout07.t-online.de (Postfix) with SMTP id 8E89B13EB3; Tue, 1 Mar 2022 20:13:25 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd72.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7vz-22DAkz0; Tue, 1 Mar 2022 20:13:20 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id EFBD020060F; Tue, 1 Mar 2022 20:13:11 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 04/15] audio: inline function audio_pcm_sw_get_rpos_in() Date: Tue, 1 Mar 2022 20:13:00 +0100 Message-Id: <20220301191311.26695-4-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162000-0000B7AB-CE00027A/0/0 CLEAN NORMAL X-TOI-MSGID: 95fc253c-5821-4dbd-9acb-e4d8ffd40e18 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.83; envelope-from=volker.ruemelin@t-online.de; helo=mailout07.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646163673961100001 Simplify code by inlining function audio_pcm_sw_get_rpos_in() at the only call site and remove the duplicated audio_bug() test. Signed-off-by: Volker R=C3=BCmelin --- audio/audio.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/audio/audio.c b/audio/audio.c index f28e91853f..35437986d9 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -569,37 +569,24 @@ static size_t audio_pcm_hw_conv_in(HWVoiceIn *hw, voi= d *pcm_buf, size_t samples) /* * Soft voice (capture) */ -static size_t audio_pcm_sw_get_rpos_in(SWVoiceIn *sw) -{ - HWVoiceIn *hw =3D sw->hw; - ssize_t live =3D hw->total_samples_captured - sw->total_hw_samples_acq= uired; - - if (audio_bug(__func__, live < 0 || live > hw->conv_buf->size)) { - dolog("live=3D%zu hw->conv_buf->size=3D%zu\n", live, hw->conv_buf-= >size); - return 0; - } - - return audio_ring_posb(hw->conv_buf->pos, live, hw->conv_buf->size); -} - static size_t audio_pcm_sw_read(SWVoiceIn *sw, void *buf, size_t size) { HWVoiceIn *hw =3D sw->hw; size_t samples, live, ret =3D 0, swlim, isamp, osamp, rpos, total =3D = 0; struct st_sample *src, *dst =3D sw->buf; =20 - rpos =3D audio_pcm_sw_get_rpos_in(sw) % hw->conv_buf->size; - live =3D hw->total_samples_captured - sw->total_hw_samples_acquired; + if (!live) { + return 0; + } if (audio_bug(__func__, live > hw->conv_buf->size)) { dolog("live_in=3D%zu hw->conv_buf->size=3D%zu\n", live, hw->conv_b= uf->size); return 0; } =20 + rpos =3D audio_ring_posb(hw->conv_buf->pos, live, hw->conv_buf->size); + samples =3D size / sw->info.bytes_per_frame; - if (!live) { - return 0; - } =20 swlim =3D (live * sw->ratio) >> 32; swlim =3D MIN (swlim, samples); --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162262636475.9543488831606; Tue, 1 Mar 2022 11:17:42 -0800 (PST) Received: from localhost ([::1]:46250 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP80D-00085N-H8 for importer@patchew.org; Tue, 01 Mar 2022 14:17:41 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7w7-00057e-Pe for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:27 -0500 Received: from mailout06.t-online.de ([194.25.134.19]:60666) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7w4-0001om-E7 for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:26 -0500 Received: from fwd85.dcpf.telekom.de (fwd85.aul.t-online.de [10.223.144.111]) by mailout06.t-online.de (Postfix) with SMTP id D9EC718E1A; Tue, 1 Mar 2022 20:13:22 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd85.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7w2-2MIID30; Tue, 1 Mar 2022 20:13:22 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id F2B47200613; Tue, 1 Mar 2022 20:13:11 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 05/15] paaudio: increase default latency to 46ms Date: Tue, 1 Mar 2022 20:13:01 +0100 Message-Id: <20220301191311.26695-5-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162002-00014AB5-8A63CDB0/0/0 CLEAN NORMAL X-TOI-MSGID: 6f4cb9f6-a138-42f7-a691-2527c075467e 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.19; envelope-from=volker.ruemelin@t-online.de; helo=mailout06.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162263403100001 This is a patch to improve the pulseaudio playback experience. Asking pulseaudio for a playback latency of 15ms is quite demanding. Increase this to 46ms. The total playback latency now is 31ms larger. One of the next patches will reduce the total playback latency again by more than 46ms. Here is a quote from the PulseAudio Latency Control documentation: 'For the sake of (...) drop-out safety always make sure to pick the highest latency possible that fulfills your needs.' Signed-off-by: Volker R=C3=BCmelin --- audio/paaudio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audio/paaudio.c b/audio/paaudio.c index 75401d5391..9df1e69c08 100644 --- a/audio/paaudio.c +++ b/audio/paaudio.c @@ -744,7 +744,7 @@ static int qpa_validate_per_direction_opts(Audiodev *de= v, { if (!pdo->has_latency) { pdo->has_latency =3D true; - pdo->latency =3D 15000; + pdo->latency =3D 46440; } return 1; } --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162659307629.0418508392656; Tue, 1 Mar 2022 11:24:19 -0800 (PST) Received: from localhost ([::1]:54746 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP86b-0005eq-QF for importer@patchew.org; Tue, 01 Mar 2022 14:24:18 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wB-0005EX-Sr for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:31 -0500 Received: from mailout01.t-online.de ([194.25.134.80]:51352) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7w9-0001p1-Cs for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:31 -0500 Received: from fwd85.dcpf.telekom.de (fwd85.aul.t-online.de [10.223.144.111]) by mailout01.t-online.de (Postfix) with SMTP id 386C5857B; Tue, 1 Mar 2022 20:13:25 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd85.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7w4-2fZMlF0; Tue, 1 Mar 2022 20:13:25 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 016BE200617; Tue, 1 Mar 2022 20:13:11 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 06/15] jackaudio: use more jack audio buffers Date: Tue, 1 Mar 2022 20:13:02 +0100 Message-Id: <20220301191311.26695-6-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162005-00014AB5-B51A0BF1/0/0 CLEAN NORMAL X-TOI-MSGID: 53ebc7aa-0f3a-432f-a532-a68ffcd5f474 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.80; envelope-from=volker.ruemelin@t-online.de; helo=mailout01.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: Christian Schoenebeck , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162661372100001 The next patch reduces the effective qemu playback buffer size by timer-period. Increase the number of jack audio buffers by one to preserve the total effective buffer size. The size of one jack audio buffer is 512 samples. With audio defaults that's 512 samples / 44100 samples/s =3D 11.6 ms and only slightly larger than the timer-period of 10 ms. The larger jack audio buffer increases audio dropout safety, because the high priority jack-audio worker threads can provide audio data for a longer period of time as with a smaller buffer and more audio data in the mixing engine buffer that they can't access. Signed-off-by: Volker R=C3=BCmelin Reviewed-by: Christian Schoenebeck --- audio/jackaudio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/audio/jackaudio.c b/audio/jackaudio.c index 317009e936..26246c3a8b 100644 --- a/audio/jackaudio.c +++ b/audio/jackaudio.c @@ -483,8 +483,8 @@ static int qjack_client_init(QJackClient *c) c->buffersize =3D 512; } =20 - /* create a 2 period buffer */ - qjack_buffer_create(&c->fifo, c->nchannels, c->buffersize * 2); + /* create a 3 period buffer */ + qjack_buffer_create(&c->fifo, c->nchannels, c->buffersize * 3); =20 qjack_client_connect_ports(c); c->state =3D QJACK_STATE_RUNNING; --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162424557943.4748982051381; Tue, 1 Mar 2022 11:20:24 -0800 (PST) Received: from localhost ([::1]:49514 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP82o-0001xV-QI for importer@patchew.org; Tue, 01 Mar 2022 14:20:22 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43258) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wB-0005EW-Qc for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:31 -0500 Received: from mailout06.t-online.de ([194.25.134.19]:60730) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7w9-0001pJ-Fm for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:31 -0500 Received: from fwd76.dcpf.telekom.de (fwd76.aul.t-online.de [10.223.144.102]) by mailout06.t-online.de (Postfix) with SMTP id F299819706; Tue, 1 Mar 2022 20:13:27 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd76.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7w7-1FmMgj0; Tue, 1 Mar 2022 20:13:27 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 0490420061A; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 07/15] audio: copy playback stream in sequential order Date: Tue, 1 Mar 2022 20:13:03 +0100 Message-Id: <20220301191311.26695-7-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162007-0001619A-2F59D5AB/0/0 CLEAN NORMAL X-TOI-MSGID: 7c0b4836-a17f-463d-9f14-4cb96b636700 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.19; envelope-from=volker.ruemelin@t-online.de; helo=mailout06.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: Christian Schoenebeck , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162427074100001 Change the code to copy the playback stream in sequential order. The advantage can be seen in the next patches where the stream copy operation effectively becomes a write through operation. The following diagram shows the average buffer fill level and the stream copy sequence. ### represents a timer_period sized chunk. The rest of the buffer sizes are not to scale. With current code: |--------| |#####111| |---#####| sw->buf mix_buf backend buffer 1. clip |--------| |---#####| |111##222| sw->buf mix_buf backend buffer 2. write to audio device 333 -> |--------| |---#####| |---111##| -> 222 sw->buf mix_buf backend buffer 3a. sw device write |-----333| |---#####| |---111##| sw->buf mix_buf backend buffer 3b. resample and mix |--------| |333#####| |---111##| sw->buf mix_buf backend buffer With this patch: 111 -> |--------| |---#####| |---#####| sw->buf mix_buf backend buffer 1a: sw device write |-----111| |---#####| |---#####| sw->buf mix_buf backend buffer 1b. resample and mix |--------| |111##222| |---#####| sw->buf mix_buf backend buffer 2. clip |--------| |---111##| |222##333| sw->buf mix_buf backend buffer 3. write to audio device |--------| |---111##| |---222##| -> 333 sw->buf mix_buf backend buffer The effective total playback buffer size is reduced by timer_period. Signed-off-by: Volker R=C3=BCmelin --- audio/audio.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/audio/audio.c b/audio/audio.c index 35437986d9..9e2d7fb209 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -1134,6 +1134,15 @@ static void audio_run_out (AudioState *s) size_t played, live, prev_rpos, free; int nb_live; =20 + for (sw =3D hw->sw_head.lh_first; sw; sw =3D sw->entries.le_next) { + if (sw->active) { + free =3D audio_get_free(sw); + if (free > 0) { + sw->callback.fn(sw->callback.opaque, free); + } + } + } + live =3D audio_pcm_hw_get_live_out (hw, &nb_live); if (!nb_live) { live =3D 0; @@ -1162,14 +1171,6 @@ static void audio_run_out (AudioState *s) } =20 if (!live) { - for (sw =3D hw->sw_head.lh_first; sw; sw =3D sw->entries.le_ne= xt) { - if (sw->active) { - free =3D audio_get_free (sw); - if (free > 0) { - sw->callback.fn (sw->callback.opaque, free); - } - } - } if (hw->pcm_ops->run_buffer_out) { hw->pcm_ops->run_buffer_out(hw); } @@ -1210,13 +1211,6 @@ static void audio_run_out (AudioState *s) if (!sw->total_hw_samples_mixed) { sw->empty =3D 1; } - - if (sw->active) { - free =3D audio_get_free (sw); - if (free > 0) { - sw->callback.fn (sw->callback.opaque, free); - } - } } } } --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162964821702.4662959828066; Tue, 1 Mar 2022 11:29:24 -0800 (PST) Received: from localhost ([::1]:34982 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8BX-0003I1-Rb for importer@patchew.org; Tue, 01 Mar 2022 14:29:23 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43280) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wD-0005K0-Ga for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:33 -0500 Received: from mailout11.t-online.de ([194.25.134.85]:49750) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wB-0001ql-Je for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:33 -0500 Received: from fwd77.dcpf.telekom.de (fwd77.aul.t-online.de [10.223.144.103]) by mailout11.t-online.de (Postfix) with SMTP id 63A161BD2A; Tue, 1 Mar 2022 20:13:30 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd77.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wA-3rGCMD0; Tue, 1 Mar 2022 20:13:30 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 0757F200620; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 08/15] audio: add pcm_ops function table for capture backend Date: Tue, 1 Mar 2022 20:13:04 +0100 Message-Id: <20220301191311.26695-8-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162010-0001606D-C90EF5B6/0/0 CLEAN NORMAL X-TOI-MSGID: 802c0b4e-9290-491a-ac6c-61be075da08d 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.85; envelope-from=volker.ruemelin@t-online.de; helo=mailout11.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162965628100003 Add a pcm_ops function table for the capture backend. This avoids additional code in the next patches to test if the pcm_ops table is available. Signed-off-by: Volker R=C3=BCmelin --- audio/audio.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/audio/audio.c b/audio/audio.c index 9e2d7fb209..55f885f8e9 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -1804,6 +1804,7 @@ void AUD_remove_card (QEMUSoundCard *card) g_free (card->name); } =20 +static struct audio_pcm_ops capture_pcm_ops; =20 CaptureVoiceOut *AUD_add_capture( AudioState *s, @@ -1849,6 +1850,7 @@ CaptureVoiceOut *AUD_add_capture( =20 hw =3D &cap->hw; hw->s =3D s; + hw->pcm_ops =3D &capture_pcm_ops; QLIST_INIT (&hw->sw_head); QLIST_INIT (&cap->cb_head); =20 --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646163353035264.2674941927187; Tue, 1 Mar 2022 11:35:53 -0800 (PST) Received: from localhost ([::1]:43442 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8Ho-0000ou-De for importer@patchew.org; Tue, 01 Mar 2022 14:35:52 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43304) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wG-0005PI-LJ for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:36 -0500 Received: from mailout04.t-online.de ([194.25.134.18]:55542) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wE-0001rS-1H for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:35 -0500 Received: from fwd88.dcpf.telekom.de (fwd88.aul.t-online.de [10.223.144.114]) by mailout04.t-online.de (Postfix) with SMTP id B688B3E5D; Tue, 1 Mar 2022 20:13:32 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd88.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wC-0QMDej0; Tue, 1 Mar 2022 20:13:32 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 0A10E200623; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 09/15] Revert "audio: fix wavcapture segfault" Date: Tue, 1 Mar 2022 20:13:05 +0100 Message-Id: <20220301191311.26695-9-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162012-00013579-B95D2C4F/0/0 CLEAN NORMAL X-TOI-MSGID: 5a29c962-4e80-4ab8-bfb3-cfafb428fb4c 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, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646163355079100001 This reverts commit cbaf25d1f59ee13fc7542a06ea70784f2e000c04. Since previous commit every audio backend has a pcm_ops function table. It's no longer necessary to test if the table is available. Signed-off-by: Volker R=C3=BCmelin --- audio/audio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/audio/audio.c b/audio/audio.c index 55f885f8e9..c420a8bd1c 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -612,7 +612,7 @@ static size_t audio_pcm_sw_read(SWVoiceIn *sw, void *bu= f, size_t size) total +=3D isamp; } =20 - if (hw->pcm_ops && !hw->pcm_ops->volume_in) { + if (!hw->pcm_ops->volume_in) { mixeng_volume (sw->buf, ret, &sw->vol); } =20 @@ -718,7 +718,7 @@ static size_t audio_pcm_sw_write(SWVoiceOut *sw, void *= buf, size_t size) if (swlim) { sw->conv (sw->buf, buf, swlim); =20 - if (sw->hw->pcm_ops && !sw->hw->pcm_ops->volume_out) { + if (!sw->hw->pcm_ops->volume_out) { mixeng_volume (sw->buf, swlim, &sw->vol); } } --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162621762174.10803394886307; Tue, 1 Mar 2022 11:23:41 -0800 (PST) Received: from localhost ([::1]:53618 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP860-0004sP-Od for importer@patchew.org; Tue, 01 Mar 2022 14:23:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43368) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wL-0005fa-Gd for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:42 -0500 Received: from mailout07.t-online.de ([194.25.134.83]:60112) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wI-0001rx-Ef for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:40 -0500 Received: from fwd74.dcpf.telekom.de (fwd74.aul.t-online.de [10.223.144.100]) by mailout07.t-online.de (Postfix) with SMTP id 1C6AE13EAA; Tue, 1 Mar 2022 20:13:37 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd74.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wF-2QALuD0; Tue, 1 Mar 2022 20:13:35 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 0D579200625; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 10/15] audio: restore mixing-engine playback buffer size Date: Tue, 1 Mar 2022 20:13:06 +0100 Message-Id: <20220301191311.26695-10-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162015-00012DCC-98411D35/0/0 CLEAN NORMAL X-TOI-MSGID: 8804be65-e16d-4b3f-a9fe-3ae128afbcc3 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.83; envelope-from=volker.ruemelin@t-online.de; helo=mailout07.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: Thomas Huth , Christian Schoenebeck , qemu-devel@nongnu.org, Akihiko Odaki Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162623555100001 Commit ff095e5231 "audio: api for mixeng code free backends" introduced another FIFO for the audio subsystem with exactly the same size as the mixing-engine FIFO. Most audio backends use this generic FIFO. The generic FIFO used together with the mixing-engine FIFO doubles the audio FIFO size, because that's just two independent FIFOs connected together in series. For audio playback this nearly doubles the playback latency. This patch restores the effective mixing-engine playback buffer size to a pre v4.2.0 size by only accepting the amount of samples for the mixing-engine queue which the downstream queue accepts. Signed-off-by: Volker R=C3=BCmelin Reviewed-by: Akihiko Odaki --- audio/alsaaudio.c | 1 + audio/audio.c | 69 +++++++++++++++++++++++++++++++++++------------ audio/audio_int.h | 7 ++++- audio/coreaudio.c | 3 +++ audio/jackaudio.c | 1 + audio/noaudio.c | 1 + audio/ossaudio.c | 12 +++++++++ audio/sdlaudio.c | 3 +++ audio/wavaudio.c | 1 + 9 files changed, 80 insertions(+), 18 deletions(-) diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c index 2b9789e647..b04716a6cc 100644 --- a/audio/alsaaudio.c +++ b/audio/alsaaudio.c @@ -916,6 +916,7 @@ static struct audio_pcm_ops alsa_pcm_ops =3D { .init_out =3D alsa_init_out, .fini_out =3D alsa_fini_out, .write =3D alsa_write, + .buffer_get_free =3D audio_generic_buffer_get_free, .run_buffer_out =3D audio_generic_run_buffer_out, .enable_out =3D alsa_enable_out, =20 diff --git a/audio/audio.c b/audio/audio.c index c420a8bd1c..a88572e713 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -663,6 +663,12 @@ static size_t audio_pcm_hw_get_live_out (HWVoiceOut *h= w, int *nb_live) return 0; } =20 +static size_t audio_pcm_hw_get_free(HWVoiceOut *hw) +{ + return (hw->pcm_ops->buffer_get_free ? hw->pcm_ops->buffer_get_free(hw= ) : + INT_MAX) / hw->info.bytes_per_frame; +} + static void audio_pcm_hw_clip_out(HWVoiceOut *hw, void *pcm_buf, size_t le= n) { size_t clipped =3D 0; @@ -687,7 +693,8 @@ static void audio_pcm_hw_clip_out(HWVoiceOut *hw, void = *pcm_buf, size_t len) */ static size_t audio_pcm_sw_write(SWVoiceOut *sw, void *buf, size_t size) { - size_t hwsamples, samples, isamp, osamp, wpos, live, dead, left, swlim= , blck; + size_t hwsamples, samples, isamp, osamp, wpos, live, dead, left, blck; + size_t hw_free; size_t ret =3D 0, pos =3D 0, total =3D 0; =20 if (!sw) { @@ -710,27 +717,28 @@ static size_t audio_pcm_sw_write(SWVoiceOut *sw, void= *buf, size_t size) } =20 wpos =3D (sw->hw->mix_buf->pos + live) % hwsamples; - samples =3D size / sw->info.bytes_per_frame; =20 dead =3D hwsamples - live; - swlim =3D ((int64_t) dead << 32) / sw->ratio; - swlim =3D MIN (swlim, samples); - if (swlim) { - sw->conv (sw->buf, buf, swlim); + hw_free =3D audio_pcm_hw_get_free(sw->hw); + hw_free =3D hw_free > live ? hw_free - live : 0; + samples =3D ((int64_t)MIN(dead, hw_free) << 32) / sw->ratio; + samples =3D MIN(samples, size / sw->info.bytes_per_frame); + if (samples) { + sw->conv(sw->buf, buf, samples); =20 if (!sw->hw->pcm_ops->volume_out) { - mixeng_volume (sw->buf, swlim, &sw->vol); + mixeng_volume(sw->buf, samples, &sw->vol); } } =20 - while (swlim) { + while (samples) { dead =3D hwsamples - live; left =3D hwsamples - wpos; blck =3D MIN (dead, left); if (!blck) { break; } - isamp =3D swlim; + isamp =3D samples; osamp =3D blck; st_rate_flow_mix ( sw->rate, @@ -740,7 +748,7 @@ static size_t audio_pcm_sw_write(SWVoiceOut *sw, void *= buf, size_t size) &osamp ); ret +=3D isamp; - swlim -=3D isamp; + samples -=3D isamp; pos +=3D isamp; live +=3D osamp; wpos =3D (wpos + osamp) % hwsamples; @@ -1002,6 +1010,11 @@ static size_t audio_get_avail (SWVoiceIn *sw) return (((int64_t) live << 32) / sw->ratio) * sw->info.bytes_per_frame; } =20 +static size_t audio_sw_bytes_free(SWVoiceOut *sw, size_t free) +{ + return (((int64_t)free << 32) / sw->ratio) * sw->info.bytes_per_frame; +} + static size_t audio_get_free(SWVoiceOut *sw) { size_t live, dead; @@ -1021,13 +1034,11 @@ static size_t audio_get_free(SWVoiceOut *sw) dead =3D sw->hw->mix_buf->size - live; =20 #ifdef DEBUG_OUT - dolog ("%s: get_free live %zu dead %zu ret %" PRId64 "\n", - SW_NAME (sw), - live, dead, (((int64_t) dead << 32) / sw->ratio) * - sw->info.bytes_per_frame); + dolog("%s: get_free live %zu dead %zu sw_bytes %zu\n", + SW_NAME(sw), live, dead, audio_sw_bytes_free(sw, dead)); #endif =20 - return (((int64_t) dead << 32) / sw->ratio) * sw->info.bytes_per_frame; + return dead; } =20 static void audio_capture_mix_and_clear(HWVoiceOut *hw, size_t rpos, @@ -1131,12 +1142,21 @@ static void audio_run_out (AudioState *s) } =20 while ((hw =3D audio_pcm_hw_find_any_enabled_out(s, hw))) { - size_t played, live, prev_rpos, free; + size_t played, live, prev_rpos; + size_t hw_free =3D audio_pcm_hw_get_free(hw); int nb_live; =20 for (sw =3D hw->sw_head.lh_first; sw; sw =3D sw->entries.le_next) { if (sw->active) { - free =3D audio_get_free(sw); + size_t sw_free =3D audio_get_free(sw); + size_t free; + + if (hw_free > sw->total_hw_samples_mixed) { + free =3D audio_sw_bytes_free(sw, + MIN(sw_free, hw_free - sw->total_hw_samples_mixed)= ); + } else { + free =3D 0; + } if (free > 0) { sw->callback.fn(sw->callback.opaque, free); } @@ -1398,6 +1418,15 @@ void audio_generic_put_buffer_in(HWVoiceIn *hw, void= *buf, size_t size) hw->pending_emul -=3D size; } =20 +size_t audio_generic_buffer_get_free(HWVoiceOut *hw) +{ + if (hw->buf_emul) { + return hw->size_emul - hw->pending_emul; + } else { + return hw->samples * hw->info.bytes_per_frame; + } +} + void audio_generic_run_buffer_out(HWVoiceOut *hw) { while (hw->pending_emul) { @@ -1445,6 +1474,12 @@ size_t audio_generic_write(HWVoiceOut *hw, void *buf= , size_t size) { size_t total =3D 0; =20 + if (hw->pcm_ops->buffer_get_free) { + size_t free =3D hw->pcm_ops->buffer_get_free(hw); + + size =3D MIN(size, free); + } + while (total < size) { size_t dst_size =3D size - total; size_t copy_size, proc; diff --git a/audio/audio_int.h b/audio/audio_int.h index 71be162271..2a6914d2aa 100644 --- a/audio/audio_int.h +++ b/audio/audio_int.h @@ -161,10 +161,14 @@ struct audio_pcm_ops { void (*fini_out)(HWVoiceOut *hw); size_t (*write) (HWVoiceOut *hw, void *buf, size_t size); void (*run_buffer_out)(HWVoiceOut *hw); + /* + * Get the free output buffer size. This is an upper limit. The size + * returned by function get_buffer_out may be smaller. + */ + size_t (*buffer_get_free)(HWVoiceOut *hw); /* * get a buffer that after later can be passed to put_buffer_out; opti= onal * returns the buffer, and writes it's size to size (in bytes) - * this is unrelated to the above buffer_size_out function */ void *(*get_buffer_out)(HWVoiceOut *hw, size_t *size); /* @@ -190,6 +194,7 @@ void audio_generic_run_buffer_in(HWVoiceIn *hw); void *audio_generic_get_buffer_in(HWVoiceIn *hw, size_t *size); void audio_generic_put_buffer_in(HWVoiceIn *hw, void *buf, size_t size); void audio_generic_run_buffer_out(HWVoiceOut *hw); +size_t audio_generic_buffer_get_free(HWVoiceOut *hw); void *audio_generic_get_buffer_out(HWVoiceOut *hw, size_t *size); size_t audio_generic_put_buffer_out(HWVoiceOut *hw, void *buf, size_t size= ); size_t audio_generic_write(HWVoiceOut *hw, void *buf, size_t size); diff --git a/audio/coreaudio.c b/audio/coreaudio.c index 1fdd1d4b14..91ea6ae975 100644 --- a/audio/coreaudio.c +++ b/audio/coreaudio.c @@ -283,6 +283,7 @@ static int coreaudio_buf_unlock (coreaudioVoiceOut *cor= e, const char *fn_name) coreaudio_buf_unlock(core, "coreaudio_" #name); \ return ret; \ } +COREAUDIO_WRAPPER_FUNC(buffer_get_free, size_t, (HWVoiceOut *hw), (hw)) COREAUDIO_WRAPPER_FUNC(get_buffer_out, void *, (HWVoiceOut *hw, size_t *si= ze), (hw, size)) COREAUDIO_WRAPPER_FUNC(put_buffer_out, size_t, @@ -652,6 +653,8 @@ static struct audio_pcm_ops coreaudio_pcm_ops =3D { .fini_out =3D coreaudio_fini_out, /* wrapper for audio_generic_write */ .write =3D coreaudio_write, + /* wrapper for audio_generic_buffer_get_free */ + .buffer_get_free =3D coreaudio_buffer_get_free, /* wrapper for audio_generic_get_buffer_out */ .get_buffer_out =3D coreaudio_get_buffer_out, /* wrapper for audio_generic_put_buffer_out */ diff --git a/audio/jackaudio.c b/audio/jackaudio.c index 26246c3a8b..bf757250b5 100644 --- a/audio/jackaudio.c +++ b/audio/jackaudio.c @@ -652,6 +652,7 @@ static struct audio_pcm_ops jack_pcm_ops =3D { .init_out =3D qjack_init_out, .fini_out =3D qjack_fini_out, .write =3D qjack_write, + .buffer_get_free =3D audio_generic_buffer_get_free, .run_buffer_out =3D audio_generic_run_buffer_out, .enable_out =3D qjack_enable_out, =20 diff --git a/audio/noaudio.c b/audio/noaudio.c index aac87dbc93..84a6bfbb1c 100644 --- a/audio/noaudio.c +++ b/audio/noaudio.c @@ -118,6 +118,7 @@ static struct audio_pcm_ops no_pcm_ops =3D { .init_out =3D no_init_out, .fini_out =3D no_fini_out, .write =3D no_write, + .buffer_get_free =3D audio_generic_buffer_get_free, .run_buffer_out =3D audio_generic_run_buffer_out, .enable_out =3D no_enable_out, =20 diff --git a/audio/ossaudio.c b/audio/ossaudio.c index 60eff66424..1bd6800840 100644 --- a/audio/ossaudio.c +++ b/audio/ossaudio.c @@ -389,6 +389,17 @@ static void oss_run_buffer_out(HWVoiceOut *hw) } } =20 +static size_t oss_buffer_get_free(HWVoiceOut *hw) +{ + OSSVoiceOut *oss =3D (OSSVoiceOut *)hw; + + if (oss->mmapped) { + return INT_MAX; + } else { + return audio_generic_buffer_get_free(hw); + } +} + static void *oss_get_buffer_out(HWVoiceOut *hw, size_t *size) { OSSVoiceOut *oss =3D (OSSVoiceOut *) hw; @@ -750,6 +761,7 @@ static struct audio_pcm_ops oss_pcm_ops =3D { .init_out =3D oss_init_out, .fini_out =3D oss_fini_out, .write =3D oss_write, + .buffer_get_free =3D oss_buffer_get_free, .run_buffer_out =3D oss_run_buffer_out, .get_buffer_out =3D oss_get_buffer_out, .put_buffer_out =3D oss_put_buffer_out, diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c index d6f3aa1a9a..e605c787ba 100644 --- a/audio/sdlaudio.c +++ b/audio/sdlaudio.c @@ -309,6 +309,7 @@ static void sdl_callback_in(void *opaque, Uint8 *buf, i= nt len) SDL_UnlockAudioDevice(sdl->devid); \ } =20 +SDL_WRAPPER_FUNC(buffer_get_free, size_t, (HWVoiceOut *hw), (hw), Out) SDL_WRAPPER_FUNC(get_buffer_out, void *, (HWVoiceOut *hw, size_t *size), (hw, size), Out) SDL_WRAPPER_FUNC(put_buffer_out, size_t, @@ -471,6 +472,8 @@ static struct audio_pcm_ops sdl_pcm_ops =3D { .fini_out =3D sdl_fini_out, /* wrapper for audio_generic_write */ .write =3D sdl_write, + /* wrapper for audio_generic_buffer_get_free */ + .buffer_get_free =3D sdl_buffer_get_free, /* wrapper for audio_generic_get_buffer_out */ .get_buffer_out =3D sdl_get_buffer_out, /* wrapper for audio_generic_put_buffer_out */ diff --git a/audio/wavaudio.c b/audio/wavaudio.c index 20e6853f85..ac666335c7 100644 --- a/audio/wavaudio.c +++ b/audio/wavaudio.c @@ -197,6 +197,7 @@ static struct audio_pcm_ops wav_pcm_ops =3D { .init_out =3D wav_init_out, .fini_out =3D wav_fini_out, .write =3D wav_write_out, + .buffer_get_free =3D audio_generic_buffer_get_free, .run_buffer_out =3D audio_generic_run_buffer_out, .enable_out =3D wav_enable_out, }; --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162927143537.2234948174097; Tue, 1 Mar 2022 11:28:47 -0800 (PST) Received: from localhost ([::1]:33990 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8Av-0002bS-Uu for importer@patchew.org; Tue, 01 Mar 2022 14:28:45 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43370) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wL-0005ff-Ic for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:42 -0500 Received: from mailout12.t-online.de ([194.25.134.22]:39410) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wJ-0001s8-Nj for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:41 -0500 Received: from fwd71.dcpf.telekom.de (fwd71.aul.t-online.de [10.223.144.97]) by mailout12.t-online.de (Postfix) with SMTP id 4AF7D31C5; Tue, 1 Mar 2022 20:13:38 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd71.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wH-2IBvyD0; Tue, 1 Mar 2022 20:13:37 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 1024B200626; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 11/15] paaudio: reduce effective playback buffer size Date: Tue, 1 Mar 2022 20:13:07 +0100 Message-Id: <20220301191311.26695-11-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162017-00001674-1F01BB41/0/0 CLEAN NORMAL X-TOI-MSGID: 6ad0d83c-4f72-450b-ab2f-92f91e6ac77f 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.22; envelope-from=volker.ruemelin@t-online.de; helo=mailout12.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, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162929339100001 Add the buffer_get_free pcm_ops function to reduce the effective playback buffer size. All intermediate audio playback buffers become temporary buffers. Signed-off-by: Volker R=C3=BCmelin --- audio/paaudio.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/audio/paaudio.c b/audio/paaudio.c index 9df1e69c08..d94f858ec7 100644 --- a/audio/paaudio.c +++ b/audio/paaudio.c @@ -201,13 +201,11 @@ unlock_and_fail: return 0; } =20 -static void *qpa_get_buffer_out(HWVoiceOut *hw, size_t *size) +static size_t qpa_buffer_get_free(HWVoiceOut *hw) { - PAVoiceOut *p =3D (PAVoiceOut *) hw; + PAVoiceOut *p =3D (PAVoiceOut *)hw; PAConnection *c =3D p->g->conn; - void *ret; size_t l; - int r; =20 pa_threaded_mainloop_lock(c->mainloop); =20 @@ -216,7 +214,6 @@ static void *qpa_get_buffer_out(HWVoiceOut *hw, size_t = *size) if (pa_stream_get_state(p->stream) !=3D PA_STREAM_READY) { /* wait for stream to become ready */ l =3D 0; - ret =3D NULL; goto unlock; } =20 @@ -224,16 +221,33 @@ static void *qpa_get_buffer_out(HWVoiceOut *hw, size_= t *size) CHECK_SUCCESS_GOTO(c, l !=3D (size_t) -1, unlock_and_fail, "pa_stream_writable_size failed\n"); =20 +unlock: + pa_threaded_mainloop_unlock(c->mainloop); + return l; + +unlock_and_fail: + pa_threaded_mainloop_unlock(c->mainloop); + return 0; +} + +static void *qpa_get_buffer_out(HWVoiceOut *hw, size_t *size) +{ + PAVoiceOut *p =3D (PAVoiceOut *)hw; + PAConnection *c =3D p->g->conn; + void *ret; + int r; + + pa_threaded_mainloop_lock(c->mainloop); + + CHECK_DEAD_GOTO(c, p->stream, unlock_and_fail, + "pa_threaded_mainloop_lock failed\n"); + *size =3D -1; r =3D pa_stream_begin_write(p->stream, &ret, size); CHECK_SUCCESS_GOTO(c, r >=3D 0, unlock_and_fail, "pa_stream_begin_write failed\n"); =20 -unlock: pa_threaded_mainloop_unlock(c->mainloop); - if (*size > l) { - *size =3D l; - } return ret; =20 unlock_and_fail: @@ -901,6 +915,7 @@ static struct audio_pcm_ops qpa_pcm_ops =3D { .init_out =3D qpa_init_out, .fini_out =3D qpa_fini_out, .write =3D qpa_write, + .buffer_get_free =3D qpa_buffer_get_free, .get_buffer_out =3D qpa_get_buffer_out, .put_buffer_out =3D qpa_put_buffer_out, .volume_out =3D qpa_volume_out, --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646163916770238.66038084367915; Tue, 1 Mar 2022 11:45:16 -0800 (PST) Received: from localhost ([::1]:60320 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8Qt-0004KD-Am for importer@patchew.org; Tue, 01 Mar 2022 14:45:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43412) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wN-0005ga-Te for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:45 -0500 Received: from mailout03.t-online.de ([194.25.134.81]:53856) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wM-0001sQ-54 for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:43 -0500 Received: from fwd75.dcpf.telekom.de (fwd75.aul.t-online.de [10.223.144.101]) by mailout03.t-online.de (Postfix) with SMTP id A9DB9D7A; Tue, 1 Mar 2022 20:13:40 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd75.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wK-0n79bF0; Tue, 1 Mar 2022 20:13:40 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 13213200627; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 12/15] dsoundaudio: reduce effective playback buffer size Date: Tue, 1 Mar 2022 20:13:08 +0100 Message-Id: <20220301191311.26695-12-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162020-000184BD-DDDEE319/0/0 CLEAN NORMAL X-TOI-MSGID: 77040ca6-0874-4c28-bb83-bf8fd5066c9d 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.81; envelope-from=volker.ruemelin@t-online.de; helo=mailout03.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, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646163918905100001 Add the buffer_get_free pcm_ops function to reduce the effective playback buffer size. All intermediate audio playback buffers become temporary buffers. Signed-off-by: Volker R=C3=BCmelin --- audio/dsoundaudio.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c index 3dd2c4d4a6..231f3e65b3 100644 --- a/audio/dsoundaudio.c +++ b/audio/dsoundaudio.c @@ -427,22 +427,18 @@ static void dsound_enable_out(HWVoiceOut *hw, bool en= able) } } =20 -static void *dsound_get_buffer_out(HWVoiceOut *hw, size_t *size) +static size_t dsound_buffer_get_free(HWVoiceOut *hw) { DSoundVoiceOut *ds =3D (DSoundVoiceOut *) hw; LPDIRECTSOUNDBUFFER dsb =3D ds->dsound_buffer; HRESULT hr; - DWORD ppos, wpos, act_size; - size_t req_size; - int err; - void *ret; + DWORD ppos, wpos; =20 hr =3D IDirectSoundBuffer_GetCurrentPosition( dsb, &ppos, ds->first_time ? &wpos : NULL); if (FAILED(hr)) { dsound_logerr(hr, "Could not get playback buffer position\n"); - *size =3D 0; - return NULL; + return 0; } =20 if (ds->first_time) { @@ -450,13 +446,20 @@ static void *dsound_get_buffer_out(HWVoiceOut *hw, si= ze_t *size) ds->first_time =3D false; } =20 - req_size =3D audio_ring_dist(ppos, hw->pos_emul, hw->size_emul); - req_size =3D MIN(req_size, hw->size_emul - hw->pos_emul); + return audio_ring_dist(ppos, hw->pos_emul, hw->size_emul); +} =20 - if (req_size =3D=3D 0) { - *size =3D 0; - return NULL; - } +static void *dsound_get_buffer_out(HWVoiceOut *hw, size_t *size) +{ + DSoundVoiceOut *ds =3D (DSoundVoiceOut *)hw; + LPDIRECTSOUNDBUFFER dsb =3D ds->dsound_buffer; + DWORD act_size; + size_t req_size; + int err; + void *ret; + + req_size =3D MIN(*size, hw->size_emul - hw->pos_emul); + assert(req_size > 0); =20 err =3D dsound_lock_out(dsb, &hw->info, hw->pos_emul, req_size, &ret, = NULL, &act_size, NULL, false, ds->s); @@ -699,6 +702,7 @@ static struct audio_pcm_ops dsound_pcm_ops =3D { .init_out =3D dsound_init_out, .fini_out =3D dsound_fini_out, .write =3D audio_generic_write, + .buffer_get_free =3D dsound_buffer_get_free, .get_buffer_out =3D dsound_get_buffer_out, .put_buffer_out =3D dsound_put_buffer_out, .enable_out =3D dsound_enable_out, --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646164117074293.62716792003334; Tue, 1 Mar 2022 11:48:37 -0800 (PST) Received: from localhost ([::1]:39914 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8U8-0001Ni-09 for importer@patchew.org; Tue, 01 Mar 2022 14:48:36 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wT-0005i3-Uj for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:50 -0500 Received: from mailout11.t-online.de ([194.25.134.85]:49906) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wS-0001tR-HA for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:49 -0500 Received: from fwd77.dcpf.telekom.de (fwd77.aul.t-online.de [10.223.144.103]) by mailout11.t-online.de (Postfix) with SMTP id 004EC1BD34; Tue, 1 Mar 2022 20:13:42 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd77.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wM-0bHmAD0; Tue, 1 Mar 2022 20:13:42 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 16159200628; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 13/15] ossaudio: reduce effective playback buffer size Date: Tue, 1 Mar 2022 20:13:09 +0100 Message-Id: <20220301191311.26695-13-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162022-0001606D-412A4309/0/0 CLEAN NORMAL X-TOI-MSGID: 8489a4bd-bae0-4264-9912-bdf92b2cc355 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.85; envelope-from=volker.ruemelin@t-online.de; helo=mailout11.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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646164119224100003 Return the free buffer size for the mmapped case in function oss_buffer_get_free() to reduce the effective playback buffer size. All intermediate audio playback buffers become temporary buffers. Signed-off-by: Volker R=C3=BCmelin --- audio/ossaudio.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/audio/ossaudio.c b/audio/ossaudio.c index 1bd6800840..da9c232222 100644 --- a/audio/ossaudio.c +++ b/audio/ossaudio.c @@ -394,7 +394,7 @@ static size_t oss_buffer_get_free(HWVoiceOut *hw) OSSVoiceOut *oss =3D (OSSVoiceOut *)hw; =20 if (oss->mmapped) { - return INT_MAX; + return oss_get_available_bytes(oss); } else { return audio_generic_buffer_get_free(hw); } @@ -402,9 +402,10 @@ static size_t oss_buffer_get_free(HWVoiceOut *hw) =20 static void *oss_get_buffer_out(HWVoiceOut *hw, size_t *size) { - OSSVoiceOut *oss =3D (OSSVoiceOut *) hw; + OSSVoiceOut *oss =3D (OSSVoiceOut *)hw; + if (oss->mmapped) { - *size =3D MIN(oss_get_available_bytes(oss), hw->size_emul - hw->po= s_emul); + *size =3D hw->size_emul - hw->pos_emul; return hw->buf_emul + hw->pos_emul; } else { return audio_generic_get_buffer_out(hw, size); --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646162886014945.020696660048; Tue, 1 Mar 2022 11:28:06 -0800 (PST) Received: from localhost ([::1]:60938 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8AH-0001h0-2s for importer@patchew.org; Tue, 01 Mar 2022 14:28:05 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wS-0005hn-Pn for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:49 -0500 Received: from mailout09.t-online.de ([194.25.134.84]:39562) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7wR-0001tO-CS for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:13:48 -0500 Received: from fwd86.dcpf.telekom.de (fwd86.aul.t-online.de [10.223.144.112]) by mailout09.t-online.de (Postfix) with SMTP id 1F4E3F94D; Tue, 1 Mar 2022 20:13:46 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd86.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wP-1vdvKD0; Tue, 1 Mar 2022 20:13:45 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 18E7D20062A; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 14/15] paaudio: fix samples vs. frames mix-up Date: Tue, 1 Mar 2022 20:13:10 +0100 Message-Id: <20220301191311.26695-14-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162025-000116DC-73836D0D/0/0 CLEAN NORMAL X-TOI-MSGID: dd8b434b-3562-4d89-a823-90542305d01a 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.84; envelope-from=volker.ruemelin@t-online.de; helo=mailout09.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, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646162887352100001 Now that the mixing buffer size no longer adds to playback latency, fix the samples vs. frames mix-up in the mixing buffer size calculation. This change will go largely unnoticed as long as the user doesn't use a buffer-size smaller than timer-period. Signed-off-by: Volker R=C3=BCmelin --- audio/paaudio.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/audio/paaudio.c b/audio/paaudio.c index d94f858ec7..a53ed85e0b 100644 --- a/audio/paaudio.c +++ b/audio/paaudio.c @@ -549,11 +549,8 @@ static int qpa_init_out(HWVoiceOut *hw, struct audsett= ings *as, } =20 audio_pcm_init_info (&hw->info, &obt_as); - /* - * This is wrong. hw->samples counts in frames. hw->samples will be - * number of channels times larger than expected. - */ - hw->samples =3D audio_buffer_samples( + /* hw->samples counts in frames */ + hw->samples =3D audio_buffer_frames( qapi_AudiodevPaPerDirectionOptions_base(ppdo), &obt_as, 46440); =20 return 0; @@ -601,11 +598,8 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettin= gs *as, void *drv_opaque) } =20 audio_pcm_init_info (&hw->info, &obt_as); - /* - * This is wrong. hw->samples counts in frames. hw->samples will be - * number of channels times larger than expected. - */ - hw->samples =3D audio_buffer_samples( + /* hw->samples counts in frames */ + hw->samples =3D audio_buffer_frames( qapi_AudiodevPaPerDirectionOptions_base(ppdo), &obt_as, 46440); =20 return 0; --=20 2.34.1 From nobody Sat May 11 09:21:50 2024 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 1646163244863295.76810147202946; Tue, 1 Mar 2022 11:34:04 -0800 (PST) Received: from localhost ([::1]:41106 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nP8G3-0007bY-DF for importer@patchew.org; Tue, 01 Mar 2022 14:34:03 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7xN-0006WV-0E for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:14:45 -0500 Received: from mailout03.t-online.de ([194.25.134.81]:54384) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nP7xL-0001z6-K1 for qemu-devel@nongnu.org; Tue, 01 Mar 2022 14:14:44 -0500 Received: from fwd73.dcpf.telekom.de (fwd73.aul.t-online.de [10.223.144.99]) by mailout03.t-online.de (Postfix) with SMTP id 5242EE8B; Tue, 1 Mar 2022 20:13:50 +0100 (CET) Received: from linpower.localnet ([46.86.48.20]) by fwd73.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1nP7wR-29vdr70; Tue, 1 Mar 2022 20:13:47 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 1BFF320062F; Tue, 1 Mar 2022 20:13:12 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann Subject: [PATCH v3 15/15] sdlaudio: fix samples vs. frames mix-up Date: Tue, 1 Mar 2022 20:13:11 +0100 Message-Id: <20220301191311.26695-15-vr_qemu@t-online.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> References: <3d0bd2ac-e5b9-9cf6-c98f-c047390a3ec5@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TOI-EXPURGATEID: 150726::1646162027-0000C4DD-92F82289/0/0 CLEAN NORMAL X-TOI-MSGID: 21b4baa9-c86b-4092-9178-eaebf6ec45b5 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.81; envelope-from=volker.ruemelin@t-online.de; helo=mailout03.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, T_SCC_BODY_TEXT_LINE=-0.01 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: , Cc: Thomas Huth , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1646163245889100001 Fix the same samples vs. frames mix-up that the previous commit fixed for the PulseAudio backend. Signed-off-by: Volker R=C3=BCmelin --- audio/sdlaudio.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c index e605c787ba..797b47bbdd 100644 --- a/audio/sdlaudio.c +++ b/audio/sdlaudio.c @@ -347,11 +347,8 @@ static int sdl_init_out(HWVoiceOut *hw, struct audsett= ings *as, req.freq =3D as->freq; req.format =3D aud_to_sdlfmt (as->fmt); req.channels =3D as->nchannels; - /* - * This is wrong. SDL samples are QEMU frames. The buffer size will be - * the requested buffer size multiplied by the number of channels. - */ - req.samples =3D audio_buffer_samples( + /* SDL samples are QEMU frames */ + req.samples =3D audio_buffer_frames( qapi_AudiodevSdlPerDirectionOptions_base(spdo), as, 11610); req.callback =3D sdl_callback_out; req.userdata =3D sdl; --=20 2.34.1