From nobody Mon Feb 9 19:55:41 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1566759161; cv=none; d=zoho.com; s=zohoarc; b=cvYH+9rVazueeJ7d9+9IQ6JEmhmsPN5ZwLCasUYrxitfGC7pNx/C5szV9iXZ8p8H6IvFwsKFHpmp0jdUuI1TkWJ8GW8gYwdGZKcmCf8zCCJy6GBCyDT0AeFiJV8Ng5uE3PTgQW9GN5zmGvLCvHO59YVFkCuS50BrdpQq/8J5YSY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1566759161; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=mcpTMz+0kTxj4itjM7eZamlXwpznCtmAxcQZEUq0IDE=; b=DbpoXqZGgnkY5Hxp4X+r+yQQYA91MzhyY3I+/LIWV2We3fYcIjrjE9v7W3Hzafc+cq1y5ouEi1GxvTaH3C8DmGShS7W4xTvnPqWEuhui+I2to4Z8Pr+Y1muHen6xzb4QRpuAqNmSamEq1BtdCuDLStXon5Aa/ECFQeJ14UdePT0= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1566759161109830.458942381801; Sun, 25 Aug 2019 11:52:41 -0700 (PDT) Received: from localhost ([::1]:45774 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1xd1-0007dw-HE for importer@patchew.org; Sun, 25 Aug 2019 14:52:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57883) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1xXV-0001QF-9i for qemu-devel@nongnu.org; Sun, 25 Aug 2019 14:46:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1xXS-0004vV-Tv for qemu-devel@nongnu.org; Sun, 25 Aug 2019 14:46:57 -0400 Received: from mail-qt1-x82f.google.com ([2607:f8b0:4864:20::82f]:38609) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i1xXS-0004v6-Na for qemu-devel@nongnu.org; Sun, 25 Aug 2019 14:46:54 -0400 Received: by mail-qt1-x82f.google.com with SMTP id q64so4271710qtd.5 for ; Sun, 25 Aug 2019 11:46:54 -0700 (PDT) Received: from nullptr.home.dirty-ice.org (2a01-036c-0113-61b1-0000-0000-0000-0005.pool6.digikabel.hu. [2a01:36c:113:61b1::5]) by smtp.gmail.com with ESMTPSA id d3sm5348870qtq.32.2019.08.25.11.46.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 25 Aug 2019 11:46:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mcpTMz+0kTxj4itjM7eZamlXwpznCtmAxcQZEUq0IDE=; b=Z8CBzaeIG4VftWoyMW2tE5+aSLg60/KiDUokiM9E92YqjRnPW2RqJuGQT6aDLI/AVe quQyX0OfqxvweJh1Gk+PxXs55jnSeetZplYMsHIOjKyxJFT3HEM+yew4iuk5jHgetDZT B5bmv+Z7+JeRjNAfm81H4FRQWpXG9iSKldla9ghfvpqJn5mvF9mGaMO+aN88B9HYMmTc DG9KyL5EwpXpDJjWvUPBVpjo2m8Nry5j+mBPbL64+93xudvNtWe2ynwU0YGx9PVbgiWD gb0xt3wCKaHOg7oXcyAGdBQWh/UIjWrzD+YXdCVV3Z5vrApafe4Wg3Qic4kn1aOobSVz o8iA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mcpTMz+0kTxj4itjM7eZamlXwpznCtmAxcQZEUq0IDE=; b=ZpfVg6TgJfc2pvv/KwN5xmOGTGbforLTIt3KuXVvpq5TAk9Jp2gKihCJBcb3KQvwXZ r3v1ECyQD10PVSEc0GPdlb0ed7rdEfBtMPqcsrCr9GvhH/fILgjqxziyEW50h7wC/5ES yxkbrTSRASyi8jCgs43BoUi/RRflHK4xUxmy5qY3ZeTsaJOizHxB/8ztIE/Yd1zRjULB CZf37uS+/JhDq3B5qlqkE5rBKqYzbgo8R3tnYCPTlnTQS4gYCwbZSs5eGZox/4psvhfO xkgzY2LZvh/38PP5OkpEfXfP6nfVFNL+GBiaNBy0uph6i+DCEI/bE15D//veyil8ggth 9nKw== X-Gm-Message-State: APjAAAWHHByrl5BxBNA7IKJVZhKVjyzXmjcTc4lLEnDm+GWGxWTJ7eGw 24w3f2MkzNhN9WIeE8Y+Ct03X8/wngM= X-Google-Smtp-Source: APXvYqxXZsJNix8GWeuNcpvY6mAK8OYx1yGDRJMfHIsvOKuM0q3i+O7WRzKgJ8Ti1H3n00SnR6cMvQ== X-Received: by 2002:ac8:386f:: with SMTP id r44mr14750456qtb.300.1566758813480; Sun, 25 Aug 2019 11:46:53 -0700 (PDT) From: "=?UTF-8?q?K=C5=91v=C3=A1g=C3=B3=2C=20Zolt=C3=A1n?=" X-Google-Original-From: =?UTF-8?q?K=C5=91v=C3=A1g=C3=B3=2C=20Zolt=C3=A1n?= To: qemu-devel@nongnu.org Date: Sun, 25 Aug 2019 20:46:22 +0200 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::82f Subject: [Qemu-devel] [PATCH 20/25] audio: replace shift in audio_pcm_info with bytes_per_frame 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: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) The bit shifting trick worked because the number of bytes per frame was always a power-of-two (since QEMU only supports mono, stereo and 8, 16 and 32 bit samples). But if we want to add support for surround sound, this no longer holds true. Signed-off-by: K=C5=91v=C3=A1g=C3=B3, Zolt=C3=A1n --- audio/audio_int.h | 3 +- audio/dsound_template.h | 10 +++--- audio/alsaaudio.c | 11 +++--- audio/audio.c | 74 ++++++++++++++++++++--------------------- audio/coreaudio.c | 4 +-- audio/dsoundaudio.c | 4 +-- audio/noaudio.c | 2 +- audio/ossaudio.c | 14 ++++---- audio/spiceaudio.c | 5 +-- audio/wavaudio.c | 6 ++-- 10 files changed, 67 insertions(+), 66 deletions(-) diff --git a/audio/audio_int.h b/audio/audio_int.h index e826734f8c..29fb0ededd 100644 --- a/audio/audio_int.h +++ b/audio/audio_int.h @@ -43,8 +43,7 @@ struct audio_pcm_info { int sign; int freq; int nchannels; - int align; - int shift; + int bytes_per_frame; int bytes_per_second; int swap_endianness; }; diff --git a/audio/dsound_template.h b/audio/dsound_template.h index 8cc5d69f36..ebc6ba04c1 100644 --- a/audio/dsound_template.h +++ b/audio/dsound_template.h @@ -98,8 +98,8 @@ static int glue (dsound_lock_, TYPE) ( goto fail; } =20 - if ((p1p && *p1p && (*blen1p & info->align)) || - (p2p && *p2p && (*blen2p & info->align))) { + if ((p1p && *p1p && (*blen1p % info->bytes_per_frame)) || + (p2p && *p2p && (*blen2p % info->bytes_per_frame))) { dolog("DirectSound returned misaligned buffer %ld %ld\n", *blen1p, *blen2p); glue(dsound_unlock_, TYPE)(buf, *p1p, p2p ? *p2p : NULL, *blen1p, @@ -247,14 +247,14 @@ static int dsound_init_out(HWVoiceOut *hw, struct aud= settings *as, obt_as.endianness =3D 0; audio_pcm_init_info (&hw->info, &obt_as); =20 - if (bc.dwBufferBytes & hw->info.align) { + if (bc.dwBufferBytes % hw->info.bytes_per_frame) { dolog ( "GetCaps returned misaligned buffer size %ld, alignment %d\n", - bc.dwBufferBytes, hw->info.align + 1 + bc.dwBufferBytes, hw->info.bytes_per_frame ); } hw->size_emul =3D bc.dwBufferBytes; - ds->samples =3D bc.dwBufferBytes >> hw->info.shift; + ds->samples =3D bc.dwBufferBytes / hw->info.bytes_per_frame; ds->s =3D s; =20 #ifdef DEBUG_DSOUND diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c index 95468bcf6d..b3b21e07a2 100644 --- a/audio/alsaaudio.c +++ b/audio/alsaaudio.c @@ -604,7 +604,7 @@ static size_t alsa_write(HWVoiceOut *hw, void *buf, siz= e_t len) { ALSAVoiceOut *alsa =3D (ALSAVoiceOut *) hw; size_t pos =3D 0; - size_t len_frames =3D len >> hw->info.shift; + size_t len_frames =3D len / hw->info.bytes_per_frame; =20 while (len_frames) { char *src =3D advance(buf, pos); @@ -650,7 +650,7 @@ static size_t alsa_write(HWVoiceOut *hw, void *buf, siz= e_t len) } } =20 - pos +=3D written << hw->info.shift; + pos +=3D written * hw->info.bytes_per_frame; if (written < len_frames) { break; } @@ -816,7 +816,8 @@ static size_t alsa_read(HWVoiceIn *hw, void *buf, size_= t len) void *dst =3D advance(buf, pos); snd_pcm_sframes_t nread; =20 - nread =3D snd_pcm_readi(alsa->handle, dst, len >> hw->info.shift); + nread =3D snd_pcm_readi( + alsa->handle, dst, len / hw->info.bytes_per_frame); =20 if (nread <=3D 0) { switch (nread) { @@ -842,8 +843,8 @@ static size_t alsa_read(HWVoiceIn *hw, void *buf, size_= t len) } } =20 - pos +=3D nread << hw->info.shift; - len -=3D nread << hw->info.shift; + pos +=3D nread * hw->info.bytes_per_frame; + len -=3D nread * hw->info.bytes_per_frame; } =20 return pos; diff --git a/audio/audio.c b/audio/audio.c index 60a1d16dea..f46bd5dc3d 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -299,12 +299,13 @@ static int audio_pcm_info_eq (struct audio_pcm_info *= info, struct audsettings *a =20 void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings = *as) { - int bits =3D 8, sign =3D 0, shift =3D 0; + int bits =3D 8, sign =3D 0, mul; =20 switch (as->fmt) { case AUDIO_FORMAT_S8: sign =3D 1; case AUDIO_FORMAT_U8: + mul =3D 1; break; =20 case AUDIO_FORMAT_S16: @@ -312,7 +313,7 @@ void audio_pcm_init_info (struct audio_pcm_info *info, = struct audsettings *as) /* fall through */ case AUDIO_FORMAT_U16: bits =3D 16; - shift =3D 1; + mul =3D 2; break; =20 case AUDIO_FORMAT_S32: @@ -320,7 +321,7 @@ void audio_pcm_init_info (struct audio_pcm_info *info, = struct audsettings *as) /* fall through */ case AUDIO_FORMAT_U32: bits =3D 32; - shift =3D 2; + mul =3D 4; break; =20 default: @@ -331,9 +332,8 @@ void audio_pcm_init_info (struct audio_pcm_info *info, = struct audsettings *as) info->bits =3D bits; info->sign =3D sign; info->nchannels =3D as->nchannels; - info->shift =3D (as->nchannels =3D=3D 2) + shift; - info->align =3D (1 << info->shift) - 1; - info->bytes_per_second =3D info->freq << info->shift; + info->bytes_per_frame =3D as->nchannels * mul; + info->bytes_per_second =3D info->freq * info->bytes_per_frame; info->swap_endianness =3D (as->endianness !=3D AUDIO_HOST_ENDIANNESS); } =20 @@ -344,26 +344,25 @@ void audio_pcm_info_clear_buf (struct audio_pcm_info = *info, void *buf, int len) } =20 if (info->sign) { - memset (buf, 0x00, len << info->shift); + memset(buf, 0x00, len * info->bytes_per_frame); } else { switch (info->bits) { case 8: - memset (buf, 0x80, len << info->shift); + memset(buf, 0x80, len * info->bytes_per_frame); break; =20 case 16: { int i; uint16_t *p =3D buf; - int shift =3D info->nchannels - 1; short s =3D INT16_MAX; =20 if (info->swap_endianness) { s =3D bswap16 (s); } =20 - for (i =3D 0; i < len << shift; i++) { + for (i =3D 0; i < len * info->nchannels; i++) { p[i] =3D s; } } @@ -373,14 +372,13 @@ void audio_pcm_info_clear_buf (struct audio_pcm_info = *info, void *buf, int len) { int i; uint32_t *p =3D buf; - int shift =3D info->nchannels - 1; int32_t s =3D INT32_MAX; =20 if (info->swap_endianness) { s =3D bswap32 (s); } =20 - for (i =3D 0; i < len << shift; i++) { + for (i =3D 0; i < len * info->nchannels; i++) { p[i] =3D s; } } @@ -558,7 +556,7 @@ static void audio_pcm_hw_clip_out(HWVoiceOut *hw, void = *pcm_buf, size_t len) =20 while (len) { st_sample *src =3D hw->mix_buf->samples + pos; - uint8_t *dst =3D advance(pcm_buf, clipped << hw->info.shift); + 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); =20 @@ -607,7 +605,7 @@ static size_t audio_pcm_sw_read(SWVoiceIn *sw, void *bu= f, size_t size) return 0; } =20 - samples =3D size >> sw->info.shift; + samples =3D size / sw->info.bytes_per_frame; if (!live) { return 0; } @@ -642,7 +640,7 @@ static size_t audio_pcm_sw_read(SWVoiceIn *sw, void *bu= f, size_t size) =20 sw->clip (buf, sw->buf, ret); sw->total_hw_samples_acquired +=3D total; - return ret << sw->info.shift; + return ret * sw->info.bytes_per_frame; } =20 /* @@ -715,7 +713,7 @@ 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.shift; + samples =3D size / sw->info.bytes_per_frame; =20 dead =3D hwsamples - live; swlim =3D ((int64_t) dead << 32) / sw->ratio; @@ -759,13 +757,13 @@ static size_t audio_pcm_sw_write(SWVoiceOut *sw, void= *buf, size_t size) dolog ( "%s: write size %zu ret %zu total sw %zu\n", SW_NAME (sw), - size >> sw->info.shift, + size / sw->info.bytes_per_frame, ret, sw->total_hw_samples_mixed ); #endif =20 - return ret << sw->info.shift; + return ret * sw->info.bytes_per_frame; } =20 #ifdef DEBUG_AUDIO @@ -882,7 +880,7 @@ size_t AUD_read(SWVoiceIn *sw, void *buf, size_t size) =20 int AUD_get_buffer_size_out (SWVoiceOut *sw) { - return sw->hw->mix_buf->size << sw->hw->info.shift; + return sw->hw->mix_buf->size * sw->hw->info.bytes_per_frame; } =20 void AUD_set_active_out (SWVoiceOut *sw, int on) @@ -998,10 +996,10 @@ static size_t audio_get_avail (SWVoiceIn *sw) ldebug ( "%s: get_avail live %d ret %" PRId64 "\n", SW_NAME (sw), - live, (((int64_t) live << 32) / sw->ratio) << sw->info.shift + live, (((int64_t) live << 32) / sw->ratio) * sw->info.bytes_per_fr= ame ); =20 - return (((int64_t) live << 32) / sw->ratio) << sw->info.shift; + return (((int64_t) live << 32) / sw->ratio) * sw->info.bytes_per_frame; } =20 static size_t audio_get_free(SWVoiceOut *sw) @@ -1025,10 +1023,11 @@ static size_t audio_get_free(SWVoiceOut *sw) #ifdef DEBUG_OUT dolog ("%s: get_free live %d dead %d ret %" PRId64 "\n", SW_NAME (sw), - live, dead, (((int64_t) dead << 32) / sw->ratio) << sw->info.sh= ift); + live, dead, (((int64_t) dead << 32) / sw->ratio) * + sw->info.bytes_per_frame); #endif =20 - return (((int64_t) dead << 32) / sw->ratio) << sw->info.shift; + return (((int64_t) dead << 32) / sw->ratio) * sw->info.bytes_per_frame; } =20 static void audio_capture_mix_and_clear(HWVoiceOut *hw, size_t rpos, @@ -1047,7 +1046,7 @@ static void audio_capture_mix_and_clear(HWVoiceOut *h= w, size_t rpos, while (n) { size_t till_end_of_hw =3D hw->mix_buf->size - rpos2; size_t to_write =3D MIN(till_end_of_hw, n); - size_t bytes =3D to_write << hw->info.shift; + size_t bytes =3D to_write * hw->info.bytes_per_frame; size_t written; =20 sw->buf =3D hw->mix_buf->samples + rpos2; @@ -1077,10 +1076,11 @@ static size_t audio_pcm_hw_run_out(HWVoiceOut *hw, = size_t live) size_t size, decr, proc; void *buf =3D hw->pcm_ops->get_buffer_out(hw, &size); =20 - decr =3D MIN(size >> hw->info.shift, live); + decr =3D MIN(size / hw->info.bytes_per_frame, live); audio_pcm_hw_clip_out(hw, buf, decr); - proc =3D hw->pcm_ops->put_buffer_out(hw, buf, decr << hw->info.shi= ft) >> - hw->info.shift; + proc =3D hw->pcm_ops->put_buffer_out(hw, buf, + decr * hw->info.bytes_per_frame= ) / + hw->info.bytes_per_frame; =20 live -=3D proc; clipped +=3D proc; @@ -1229,16 +1229,16 @@ static size_t audio_pcm_hw_run_in(HWVoiceIn *hw, si= ze_t samples) =20 while (samples) { size_t proc; - size_t size =3D samples << hw->info.shift; + size_t size =3D samples * hw->info.bytes_per_frame; void *buf =3D hw->pcm_ops->get_buffer_in(hw, &size); =20 - assert((size & hw->info.align) =3D=3D 0); + assert(size % hw->info.bytes_per_frame =3D=3D 0); if (size =3D=3D 0) { hw->pcm_ops->put_buffer_in(hw, buf, size); break; } =20 - proc =3D MIN(size >> hw->info.shift, + proc =3D MIN(size / hw->info.bytes_per_frame, conv_buf->size - conv_buf->pos); =20 hw->conv(conv_buf->samples + conv_buf->pos, buf, proc); @@ -1246,7 +1246,7 @@ static size_t audio_pcm_hw_run_in(HWVoiceIn *hw, size= _t samples) =20 samples -=3D proc; conv +=3D proc; - hw->pcm_ops->put_buffer_in(hw, buf, proc << hw->info.shift); + hw->pcm_ops->put_buffer_in(hw, buf, proc * hw->info.bytes_per_fram= e); } =20 return conv; @@ -1320,7 +1320,7 @@ static void audio_run_capture (AudioState *s) =20 for (cb =3D cap->cb_head.lh_first; cb; cb =3D cb->entries.le_n= ext) { cb->ops.capture (cb->opaque, cap->buf, - to_capture << hw->info.shift); + to_capture * hw->info.bytes_per_frame); } rpos =3D (rpos + to_capture) % hw->mix_buf->size; live -=3D to_capture; @@ -1373,7 +1373,7 @@ void *audio_generic_get_buffer_in(HWVoiceIn *hw, size= _t *size) ssize_t start; =20 if (unlikely(!hw->buf_emul)) { - size_t calc_size =3D hw->conv_buf->size << hw->info.shift; + size_t calc_size =3D hw->conv_buf->size * hw->info.bytes_per_frame; hw->buf_emul =3D g_malloc(calc_size); hw->size_emul =3D calc_size; hw->pos_emul =3D hw->pending_emul =3D 0; @@ -1409,7 +1409,7 @@ void audio_generic_put_buffer_in(HWVoiceIn *hw, void = *buf, size_t size) void *audio_generic_get_buffer_out(HWVoiceOut *hw, size_t *size) { if (unlikely(!hw->buf_emul)) { - size_t calc_size =3D hw->mix_buf->size << hw->info.shift; + size_t calc_size =3D hw->mix_buf->size * hw->info.bytes_per_frame; =20 hw->buf_emul =3D g_malloc(calc_size); hw->size_emul =3D calc_size; @@ -1826,7 +1826,7 @@ CaptureVoiceOut *AUD_add_capture( =20 audio_pcm_init_info (&hw->info, as); =20 - cap->buf =3D g_malloc0_n(hw->mix_buf->size, 1 << hw->info.shift); + cap->buf =3D g_malloc0_n(hw->mix_buf->size, hw->info.bytes_per_fra= me); =20 hw->clip =3D mixeng_clip [hw->info.nchannels =3D=3D 2] @@ -2146,14 +2146,14 @@ size_t audio_rate_get_bytes(struct audio_pcm_info *= info, RateCtl *rate, 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->shift; + samples =3D (bytes - rate->bytes_sent) / info->bytes_per_frame; if (samples < 0 || samples > 65536) { AUD_log(NULL, "Resetting rate control (%" PRId64 " samples)", samp= les); audio_rate_start(rate); samples =3D 0; } =20 - ret =3D MIN(samples << info->shift, bytes_avail); + ret =3D MIN(samples * info->bytes_per_frame, bytes_avail); rate->bytes_sent +=3D ret; return ret; } diff --git a/audio/coreaudio.c b/audio/coreaudio.c index a43f72a495..2539a84285 100644 --- a/audio/coreaudio.c +++ b/audio/coreaudio.c @@ -441,7 +441,7 @@ static OSStatus audioDeviceIOProc( } =20 frameCount =3D core->audioDevicePropertyBufferFrameSize; - pending_frames =3D hw->pending_emul >> hw->info.shift; + pending_frames =3D hw->pending_emul / hw->info.bytes_per_frame; =20 /* if there are not enough samples, set signal and return */ if (pending_frames < frameCount) { @@ -450,7 +450,7 @@ static OSStatus audioDeviceIOProc( return 0; } =20 - len =3D frameCount << hw->info.shift; + 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; diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c index 9504265166..cc7999fc95 100644 --- a/audio/dsoundaudio.c +++ b/audio/dsoundaudio.c @@ -322,8 +322,8 @@ static void dsound_clear_sample (HWVoiceOut *hw, LPDIRE= CTSOUNDBUFFER dsb, return; } =20 - len1 =3D blen1 >> hw->info.shift; - len2 =3D blen2 >> hw->info.shift; + len1 =3D blen1 / hw->info.bytes_per_frame; + len2 =3D blen2 / hw->info.bytes_per_frame; =20 #ifdef DEBUG_DSOUND dolog ("clear %p,%ld,%ld %p,%ld,%ld\n", diff --git a/audio/noaudio.c b/audio/noaudio.c index 4cf3714093..6dd4d47887 100644 --- a/audio/noaudio.c +++ b/audio/noaudio.c @@ -89,7 +89,7 @@ static size_t no_read(HWVoiceIn *hw, void *buf, size_t si= ze) NoVoiceIn *no =3D (NoVoiceIn *) hw; int64_t bytes =3D audio_rate_get_bytes(&hw->info, &no->rate, size); =20 - audio_pcm_info_clear_buf(&hw->info, buf, bytes >> hw->info.shift); + audio_pcm_info_clear_buf(&hw->info, buf, bytes / hw->info.bytes_per_fr= ame); return bytes; } =20 diff --git a/audio/ossaudio.c b/audio/ossaudio.c index cc91956ab7..5c13c3e9d5 100644 --- a/audio/ossaudio.c +++ b/audio/ossaudio.c @@ -508,16 +508,16 @@ static int oss_init_out(HWVoiceOut *hw, struct audset= tings *as, oss->nfrags =3D obt.nfrags; oss->fragsize =3D obt.fragsize; =20 - if (obt.nfrags * obt.fragsize & hw->info.align) { + if (obt.nfrags * obt.fragsize % hw->info.bytes_per_frame) { dolog ("warning: Misaligned DAC buffer, size %d, alignment %d\n", - obt.nfrags * obt.fragsize, hw->info.align + 1); + obt.nfrags * obt.fragsize, hw->info.bytes_per_frame); } =20 - oss->samples =3D (obt.nfrags * obt.fragsize) >> hw->info.shift; + oss->samples =3D (obt.nfrags * obt.fragsize) / hw->info.bytes_per_fram= e; =20 oss->mmapped =3D 0; if (oopts->has_try_mmap && oopts->try_mmap) { - hw->size_emul =3D oss->samples << hw->info.shift; + hw->size_emul =3D oss->samples * hw->info.bytes_per_frame; hw->buf_emul =3D mmap( NULL, hw->size_emul, @@ -652,12 +652,12 @@ static int oss_init_in(HWVoiceIn *hw, struct audsetti= ngs *as, void *drv_opaque) oss->nfrags =3D obt.nfrags; oss->fragsize =3D obt.fragsize; =20 - if (obt.nfrags * obt.fragsize & hw->info.align) { + if (obt.nfrags * obt.fragsize % hw->info.bytes_per_frame) { dolog ("warning: Misaligned ADC buffer, size %d, alignment %d\n", - obt.nfrags * obt.fragsize, hw->info.align + 1); + obt.nfrags * obt.fragsize, hw->info.bytes_per_frame); } =20 - oss->samples =3D (obt.nfrags * obt.fragsize) >> hw->info.shift; + oss->samples =3D (obt.nfrags * obt.fragsize) / hw->info.bytes_per_fram= e; =20 oss->fd =3D fd; oss->dev =3D dev; diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c index fcd8ffa810..ea15c49ad7 100644 --- a/audio/spiceaudio.c +++ b/audio/spiceaudio.c @@ -133,8 +133,9 @@ static void *line_out_get_buffer(HWVoiceOut *hw, size_t= *size) out->fpos =3D 0; } =20 - *size =3D audio_rate_get_bytes(&hw->info, &out->rate, - (out->fsize - out->fpos) << hw->info.shif= t); + *size =3D audio_rate_get_bytes( + &hw->info, &out->rate, + (out->fsize - out->fpos) * hw->info.bytes_per_frame); return out->frame + out->fpos; } =20 diff --git a/audio/wavaudio.c b/audio/wavaudio.c index 9b9f75effc..01062ec426 100644 --- a/audio/wavaudio.c +++ b/audio/wavaudio.c @@ -43,14 +43,14 @@ static size_t wav_write_out(HWVoiceOut *hw, void *buf, = size_t len) { WAVVoiceOut *wav =3D (WAVVoiceOut *) hw; int64_t bytes =3D audio_rate_get_bytes(&hw->info, &wav->rate, len); - assert(bytes >> hw->info.shift << hw->info.shift =3D=3D bytes); + assert(bytes % hw->info.bytes_per_frame =3D=3D 0); =20 if (bytes && fwrite(buf, bytes, 1, wav->f) !=3D 1) { dolog("wav_write_out: fwrite of %zu bytes failed\nReaons: %s\n", bytes, strerror(errno)); } =20 - wav->total_samples +=3D bytes >> hw->info.shift; + wav->total_samples +=3D bytes / hw->info.bytes_per_frame; return bytes; } =20 @@ -133,7 +133,7 @@ static void wav_fini_out (HWVoiceOut *hw) WAVVoiceOut *wav =3D (WAVVoiceOut *) hw; uint8_t rlen[4]; uint8_t dlen[4]; - uint32_t datalen =3D wav->total_samples << hw->info.shift; + uint32_t datalen =3D wav->total_samples * hw->info.bytes_per_frame; uint32_t rifflen =3D datalen + 36; =20 if (!wav->f) { --=20 2.22.0