From patchwork Wed Jun 17 21:45:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: t X-Patchwork-Id: 20443 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id B7AA244B402 for ; Thu, 18 Jun 2020 00:51:04 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 92D3C68B31C; Thu, 18 Jun 2020 00:51:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 98DB568B0D6 for ; Thu, 18 Jun 2020 00:50:58 +0300 (EEST) Received: by mail-oi1-f179.google.com with SMTP id d67so3171259oig.6 for ; Wed, 17 Jun 2020 14:50:58 -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:mime-version :content-transfer-encoding; bh=5Di5r59u5AkjtM56yWK1F7i3bIeEkHFbVbcrYXgWTtU=; b=Cn4T0R1G5akoHukJUOggsQNPQutHb5DmsTDIzkysHK92VEsffaAbuUTwggrUb39tbb hzhmfgMR2l/VPyfXnuyD5ZgvC2M4C9qtZsKSHz18GdkOsRiNdj0C2vW7m7jConlSNPlq ynGko1szNWqW27kOmPg1C3h8If91HUNQ8qm1b39OBXdP2IVhuvjz4EZ/LIDICi5kGvxL S1f7nVw0Bm3In0DEZJ6iQH+HlqL43iYWSufp9RmiSSHXURQ7J5cTe1XB1dw0xid2Ii/Z gE4IqVnaTXnDk09fFYKTPMITqkTD7xaelml2Qk1zedtG3xIoQku87mq8w4G+56klK7ll 8b1Q== 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:mime-version :content-transfer-encoding; bh=5Di5r59u5AkjtM56yWK1F7i3bIeEkHFbVbcrYXgWTtU=; b=hPwnZltmwTObTbi0g3eUCVr0XdYo0tkDxB1fddz4PtlYGgkSkHhZ1FzVxhn/RWBiZT DorLToLteIIqYxHQSVG849u8FCrl8wscj832vIXrtRHVG/X0GN3nI3DeiBKTfD5mjnOJ 8tOuDSLgiAelQLQFl1f/4Y4XIvD/6UxUEzskLsH6BzADptlhMFgaQzUyupiZMeDuIf/d KIyMPvF3FIFI0v+G/0uS0xvfDnxd2KpTSoKtgzkHFr8eM5Gfy4lbJYMtJXiUv8np7ULU R1JfWD6ZlK8DsuPzKEY2QvIlpwf5nwM5llewJWx1+ud7KT64vlp7yCsvUh64YZjPCSWO z2gQ== X-Gm-Message-State: AOAM531hxGApTFbMXtRjusfPgU5sSOYvoeSNshhX+eX0S2RzwcZxs3pN qN+x0IE/06LyKs8W+zTgJhYUUE9lqrs= X-Google-Smtp-Source: ABdhPJzAsYdexHTcwIQnPX/Am1HcnNHYlkdJlh5SlhYjO2kC6fMceCAnuHxtrVS3Zksk1LaojTx+pw== X-Received: by 2002:a17:90a:2c06:: with SMTP id m6mr1080716pjd.216.1592430341099; Wed, 17 Jun 2020 14:45:41 -0700 (PDT) Received: from localhost.localdomain (d154-20-31-151.bchsia.telus.net. [154.20.31.151]) by smtp.gmail.com with ESMTPSA id c2sm749162pfi.71.2020.06.17.14.45.39 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Jun 2020 14:45:40 -0700 (PDT) From: t To: ffmpeg-devel@ffmpeg.org Date: Wed, 17 Jun 2020 14:45:06 -0700 Message-Id: <20200617214507.44381-1-summertriangle.dev@gmail.com> X-Mailer: git-send-email 2.25.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/hcadec: fix decoding of hfr channels X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: t Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" I suspect this was originally broken by b7e5c8f , but even then, it only worked because it read out of bounds from intensity_ratio_table. Signed-off-by: t --- libavcodec/hca_data.h | 14 ++++++++------ libavcodec/hcadec.c | 3 ++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/libavcodec/hca_data.h b/libavcodec/hca_data.h index 80b4a794dc..7093221c2a 100644 --- a/libavcodec/hca_data.h +++ b/libavcodec/hca_data.h @@ -86,18 +86,18 @@ static const float intensity_ratio_table[] = { 2.0, 1.85714, 1.71429, 1.57143, 1.42857, 1.28571, 1.14286, 1.0, 0.857143, 0.714286, 0.571429, 0.428571, 0.285714, 0.142857, 0.0, 0.0, - 0, 1.87066e-08, 2.49253e-08, 3.32113e-08, 4.42518e-08, 5.89626e-08, 7.85637e-08, 1.04681e-07, +}; + +static const float scale_conversion_table[] = +{ + 0, 0, 1.87066e-08, 2.49253e-08, 3.32113e-08, 4.42518e-08, 5.89626e-08, 7.85637e-08, 1.04681e-07, 1.3948e-07, 1.85848e-07, 2.4763e-07, 3.2995e-07, 4.39636e-07, 5.85785e-07, 7.80519e-07, 1.03999e-06, 1.38572e-06, 1.84637e-06, 2.46017e-06, 3.27801e-06, 4.36772e-06, 5.8197e-06, 7.75435e-06, 1.03321e-05, 1.37669e-05, 1.83435e-05, 2.44414e-05, 3.25665e-05, 4.33927e-05, 5.78179e-05, 7.70384e-05, 0.000102648, 0.000136772, 0.00018224, 0.000242822, 0.000323544, 0.000431101, 0.000574413, 0.000765366, 0.0010198, 0.00135881, 0.00181053, 0.0024124, 0.00321437, 0.00428293, 0.00570671, 0.00760381, 0.0101316, 0.0134996, 0.0179873, 0.0239669, 0.0319343, 0.0425503, 0.0566954, 0.0755428, 0.100656, - 0.134117, 0.178702, 0.238108, 0.317263, 0.422731, 0.563261, 0.750507, 0.0, -}; - -static const float scale_conversion_table[] = -{ + 0.134117, 0.178702, 0.238108, 0.317263, 0.422731, 0.563261, 0.750507, 1.0, 1.33243, 1.77538, 2.36557, 3.15196, 4.19978, 5.59592, 7.45618, 9.93486, 13.2375, 17.6381, 23.5016, 31.3143, 41.7242, 55.5947, 74.0762, 98.7015, 131.513, 175.232, 233.485, 311.103, 414.524, 552.326, 735.937, @@ -108,6 +108,8 @@ static const float scale_conversion_table[] = 9.55285e+06, 1.27285e+07, 1.69599e+07, 2.25979e+07, 3.01102e+07, 4.01198e+07, 5.3457e+07, 0, }; +static const int scale_conv_bias = 64; + static const float dequantizer_scaling_table[] = { 1.58838e-07, 2.11641e-07, 2.81998e-07, 3.75743e-07, 5.00652e-07, 6.67085e-07, 8.88846e-07, 1.18433e-06, diff --git a/libavcodec/hcadec.c b/libavcodec/hcadec.c index 5fa87319d2..a890e75a13 100644 --- a/libavcodec/hcadec.c +++ b/libavcodec/hcadec.c @@ -287,7 +287,8 @@ static void reconstruct_hfr(HCAContext *s, ChannelContext *ch, for (int i = 0, k = start_band, l = start_band - 1; i < hfr_group_count; i++){ for (int j = 0; j < bands_per_hfr_group && k < total_band_count && l >= 0; j++, k++, l--){ - ch->imdct_in[k] = scale_conversion_table[ (ch->hfr_scale[i] - ch->scale_factors[l]) & 63 ] * ch->imdct_in[l]; + ch->imdct_in[k] = scale_conversion_table[ scale_conv_bias + + av_clip_intp2(ch->hfr_scale[i] - ch->scale_factors[l], 6) ] * ch->imdct_in[l]; } }