From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D593C3F2CD for ; Mon, 2 Mar 2020 19:11:13 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5B06520842 for ; Mon, 2 Mar 2020 19:11:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5B06520842 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=t-online.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:37516 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j8qTA-0005PG-Jd for qemu-devel@archiver.kernel.org; Mon, 02 Mar 2020 14:11:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53327) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j8qSF-0003uO-Ts for qemu-devel@nongnu.org; Mon, 02 Mar 2020 14:10:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j8qSE-0005Dl-QL for qemu-devel@nongnu.org; Mon, 02 Mar 2020 14:10:15 -0500 Received: from mailout03.t-online.de ([194.25.134.81]:60778) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j8qSE-0005CS-H1 for qemu-devel@nongnu.org; Mon, 02 Mar 2020 14:10:14 -0500 Received: from fwd22.aul.t-online.de (fwd22.aul.t-online.de [172.20.26.127]) by mailout03.t-online.de (Postfix) with SMTP id 36781426B9B2; Mon, 2 Mar 2020 20:10:13 +0100 (CET) Received: from linpower.localnet (rIEZI0ZOghWyWs2u3cQe5csDoTzsaBhI8B1A8xWxz3Cnj4RhM-3q-IPwq1dLH5PZB3@[79.208.28.226]) by fwd22.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1j8qSD-0p8owy0; Mon, 2 Mar 2020 20:10:13 +0100 Received: by linpower.localnet (Postfix, from userid 1000) id 9243D21B1C1; Mon, 2 Mar 2020 20:10:04 +0100 (CET) From: =?UTF-8?q?Volker=20R=C3=BCmelin?= To: Gerd Hoffmann , Eric Blake , Markus Armbruster Subject: [PATCH 4/5] audio: change mixing engine float range to [-1.f, 1.f] Date: Mon, 2 Mar 2020 20:10:03 +0100 Message-Id: <20200302191004.5991-4-vr_qemu@t-online.de> X-Mailer: git-send-email 2.16.4 In-Reply-To: <417bfe2f-e3c1-d83d-b437-47859daf524d@t-online.de> References: <417bfe2f-e3c1-d83d-b437-47859daf524d@t-online.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-ID: rIEZI0ZOghWyWs2u3cQe5csDoTzsaBhI8B1A8xWxz3Cnj4RhM-3q-IPwq1dLH5PZB3 X-TOI-MSGID: a79074d3-7e36-4398-93cf-7fc015258cbd Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 194.25.134.81 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Arbuckle , Howard Spoelstra , Mark Cave-Ayland , QEMU , =?UTF-8?q?Zolt=C3=A1n=20K=C5=91v=C3=A1g=C3=B3?= Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Currently the internal float range of the mixing engine is [-.5f, .5f]. PulseAudio, SDL2 and libasound use a [-1.f, 1.f] range. This means with float samples the audio playback volume is 6dB too low and audio recording signals will be clipped in most cases. To avoid another scaling factor in the conv_natural_float_* and clip_natural_float_* functions with FLOAT_MIXENG defined this patch changes the mixing engine float range to [-1.f, 1.f]. Signed-off-by: Volker R=C3=BCmelin --- audio/mixeng.c | 4 ++-- audio/mixeng_template.h | 17 ++++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/audio/mixeng.c b/audio/mixeng.c index 725b529be7..739a500449 100644 --- a/audio/mixeng.c +++ b/audio/mixeng.c @@ -271,11 +271,11 @@ f_sample *mixeng_clip[2][2][2][3] =3D { #define CONV_NATURAL_FLOAT(x) (x) #define CLIP_NATURAL_FLOAT(x) (x) #else -static const float float_scale =3D UINT_MAX; +static const float float_scale =3D UINT_MAX / 2.f; #define CONV_NATURAL_FLOAT(x) ((x) * float_scale) =20 #ifdef RECIPROCAL -static const float float_scale_reciprocal =3D 1.f / UINT_MAX; +static const float float_scale_reciprocal =3D 2.f / UINT_MAX; #define CLIP_NATURAL_FLOAT(x) ((x) * float_scale_reciprocal) #else #define CLIP_NATURAL_FLOAT(x) ((x) / float_scale) diff --git a/audio/mixeng_template.h b/audio/mixeng_template.h index 77cc89b9e8..fc8e1d4d9e 100644 --- a/audio/mixeng_template.h +++ b/audio/mixeng_template.h @@ -41,32 +41,31 @@ static inline mixeng_real glue (conv_, ET) (IN_T v) =20 #ifdef RECIPROCAL #ifdef SIGNED - return nv * (1.f / (mixeng_real) (IN_MAX - IN_MIN)); + return nv * (2.f / ((mixeng_real)IN_MAX - IN_MIN)); #else - return (nv - HALF) * (1.f / (mixeng_real) IN_MAX); + return (nv - HALF) * (2.f / (mixeng_real)IN_MAX); #endif #else /* !RECIPROCAL */ #ifdef SIGNED - return nv / (mixeng_real) ((mixeng_real) IN_MAX - IN_MIN); + return nv / (((mixeng_real)IN_MAX - IN_MIN) / 2.f); #else - return (nv - HALF) / (mixeng_real) IN_MAX; + return (nv - HALF) / ((mixeng_real)IN_MAX / 2.f); #endif #endif } =20 static inline IN_T glue (clip_, ET) (mixeng_real v) { - if (v >=3D 0.5) { + if (v >=3D 1.f) { return IN_MAX; - } - else if (v < -0.5) { + } else if (v < -1.f) { return IN_MIN; } =20 #ifdef SIGNED - return ENDIAN_CONVERT ((IN_T) (v * ((mixeng_real) IN_MAX - IN_MIN)))= ; + return ENDIAN_CONVERT((IN_T)(v * (((mixeng_real)IN_MAX - IN_MIN) / 2= .f))); #else - return ENDIAN_CONVERT ((IN_T) ((v * IN_MAX) + HALF)); + return ENDIAN_CONVERT((IN_T)((v * ((mixeng_real)IN_MAX / 2.f)) + HAL= F)); #endif } =20 --=20 2.16.4