From patchwork Fri Oct 7 20:25:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 38614 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:789c:b0:9c:c2cd:5584 with SMTP id bf28csp206226pzc; Fri, 7 Oct 2022 13:26:26 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7wuiCnZ0qo5uDG/TbNqdXTHxDN0BMxV0oeF0i4qExkDuxtMqbw1xhXdsQ4/uxZPilSwKYO X-Received: by 2002:a05:6402:1604:b0:458:b2b7:bd5a with SMTP id f4-20020a056402160400b00458b2b7bd5amr6010326edv.73.1665174386604; Fri, 07 Oct 2022 13:26:26 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id mp14-20020a1709071b0e00b00783204942e5si3665548ejc.885.2022.10.07.13.26.26; Fri, 07 Oct 2022 13:26:26 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=JsOVM88g; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C80AF68BBFD; Fri, 7 Oct 2022 23:25:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2027.outbound.protection.outlook.com [40.92.91.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8F27B68BB66 for ; Fri, 7 Oct 2022 23:25:49 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DZTOtb4wpVFp0h/Ras35KTDgUvgnwxo7aeZVgVSla4fswr2xRr+cfURqRVA9yu/uSoXCW22gDOdsThUcgWCDjvN3vdiQPQ5bR7o8V+PYY68o7hqQYReQsjgGXByLhLp9s3a4d6m8rkThOH/2c1DVNRPY9piLMI3jhu+sIkEKuqTqQaNuMPzq8rzzx+JomljL/yJxEsVqp8O70J6YO4DWpyqyOgxkbyPwKWsiSJ/HXsDaV9TQTIyJeY1PgrNX6XN8VpcuGjt7Sxa6avfILAXs5cfTMzp7G7EW558qHKQFD6vyN0HTYw4AyO3ovr7DVhnKpCBEOGBodsMDoLCl3bggCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wxaGL7JehcgOWKnyZseMdYYCbX6U+mAhgTq5dbsXfrY=; b=WUkZbfSTh5QPR0vvTsUYxgp8t8tKFKiWlWWlY24HTza8bfJ0EmT2BkrqoSD+ggK0Seu0/T6VMTnU6acF5TaP2Lru6xuziILDTOE/QLrXO7NGB0yM/MaECoc1+geophrq/aq3Ls7WICZZJ9SteINGcut6Acfc9iLSwR3kf5vTESy9pHNpYYpK09WEBTDTrehRtQO+GTaD49XG8ULYPwJOODKRr0ORYI4mfiELCktqtic38xq1HeIXzfIoTWHCOkrMa+ucTOkEQ7db4+4uElLmcXRq5wqzc5oAN1alB28j1ukOg443CJgQGNRbrNoq93vlpU0oew7I72pp3/P8p8LqtQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wxaGL7JehcgOWKnyZseMdYYCbX6U+mAhgTq5dbsXfrY=; b=JsOVM88g4GdDHRKjAygWtXR0zruVj4Anfx0+xauBzpFgAePxqC1KTMxb5SlYZSujqfduknG9PXEhXWVKA+iBtBKtG8pN8G0u4ns0VUfKKRNWHHfj9dUxGQlXizSZrye5Qj+n2u1MBph9Rdx8ELiEqRdEPzDzxobNps7X6S0lH5b+7ff9kWq2fBQlJa+cJRx1mtp0PK1FPpY34nVFhMENGTVXAIcxkbhqt5S05Dzr8xpCvE4PuTPplbeVahgmJLMI55yEKbKnmXUmSsqrtOfvet7gSOlhdiigNF5DGgZ/yz1PCl3h5AheT8q+xXjqih1gek2V00kPqvMThSmX+sHVoQ== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU2P250MB0285.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.15; Fri, 7 Oct 2022 20:25:47 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::68bd:2fc7:ac52:38f8]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::68bd:2fc7:ac52:38f8%9]) with mapi id 15.20.5676.028; Fri, 7 Oct 2022 20:25:47 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 Oct 2022 22:25:08 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [ZYaCX5qbu62DN05Tk5QrVctWA/CC9XaGJkOMIxVT1CM=] X-ClientProxiedBy: ZR0P278CA0106.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:23::21) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20221007202508.4188148-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU2P250MB0285:EE_ X-MS-Office365-Filtering-Correlation-Id: c01feb82-964d-4a03-5c7c-08daa8a21e77 X-MS-Exchange-SLBlob-MailProps: AZnQBsB9XmpXYlgiiriwpqBJSiirmy7K/np4/kextCOtHBL6l87Ud5nGvGfDuHCyR9knAek64QPkIADnbQcW+lIf77npK+tLn0MPrHBXnm1PkX8FeDUBoxIEtIQJjaoDAesTfXvLKG3rFdzxkIpe/xAKo+EKkGIPycCvRFqt5ISel1u194ngOq6ZhgLRPV2aDhxTuwGl+9JpZiiS81mid0IR29WF5FXT53VPtC7y5JXtzUWLAwhPoIFgv3jFrY2CBqi8r6IFfdrswiMWqtuERGKrsrg/MRVCDoS/MMylgCl2tRvGB0u/TN06wnPicRkkoYrxbsJRDFmz9AKG74I8ccJN1+o5d4CNl56CsS2OOsINoZ9CQTsFiX3p06X/WcHLlcG/JlzKKQbJms/tikk5le/pj9fEzrYk9qDwxw7smeMnDdrjIdtScSBNIlelQgrAPrMgubbUNi3xzViMaa4PtyJD7wWfidIYsPYHmzL7aCQCxcv57ynioiPe1bsXL19XVg7PXV+Xeeq1yZ9avHdgnVdOuOOrq+oI1SVg9SNLNi1pL29pNbpTa1T0bBiZmdQ/hPVHYezlHmJji5OkU4bsuymyTWgrE4Iw2a3EIT8pANdpdl/98gLsbwc9zAsxfEWAHUeD1Khess7AdY4bRtIW2HsYtFdr7vbh15errBm8IB1GJiik6/e+H+PNwl6XPUhgppnlKW+teGOHCQyQGEgu9Stww6EZs4TI5M9ZVK9fBmzxZbQixGIr/vGK3hWMd0yueR5U1WhrEhw= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 21cr7jB/9L96Dgz6/tpGEjbdMIvBUlsq9Xcpq6r02xTD1qycitOfK9rF5IadyeaU1NXxpJiud84hCVTOKrHrfe5naYVOio48howp24O9ALzJzJPVTZYlT7aeiUiA+vojwYPn2CJUJMke/yhVYr9zFsgXxVisstD6cLI7PY8s4OH03RgnaZ7EVz4j5CvWF4BYmcL0rYq9YSZDIYQHwAiGu6w05ZBCzyu0hAVwf1Ypv3U/dGi35/n6H2TxUsW6Wxxm1gx8oLWC5Xy867V0pRG/3zWtmp7C/IkGKZ7JoO6b+WOFzemV2GaHHXX46zbjOVsW2khNor8cVJG7CvEkqF/0eF37vAy0KqYCNDIrNpoUJU1PeBQuHgpbHseuvb0i6IA+JTXQmT20pyjG2XBsSBIU5HtQ6iyiA0w0MFZKaRqte1YDNwEC3FNKWcO4pznhLOokSoxy47tDjee/DaOqFcCcDnPUzKJjaRuWiXNdWQoHix13b52EO7Pfy8iF/KAh+kuW7rzSRZkk0meCdPrc03nVAUKaVTA4RVZwpUYLOoHewkRW0bu/nEOJzbbNW7e4tj5gAN3ZXZ2/6v1KSqIb0eh66kvvkh18YyPjVMb1+yNY3P1cl6/vlPTV/DPJltdfDkz7VSM46nPBJ8wqdVNRIXfW/DTLeo8aQhIq0ntTD0Ll84aFhIQCP+Y/ywsvkTdtAITe X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: t++9cxWpFNcYlFVWBcP2i0pwUCLIORRcHirl0tF13v8s/sKTzXhqDgiFoUfiNfaozgsOEPOMfcX49B8FcErykTHUcf4IEv2wYpGXkruvpfPywz1vEq0i84YROaqD3R3s9Zz4UG4QU7zjXfg4WX0EOF2sMl9RHpYhNNU0KQGh2hTejACwmnEMO6CFJJIFQ+dvb5o7Xe/olAaqioNNOwCNJY26xnr22KZfn9elCnat/h5hQvVhBOVBcMI+FTiJt7Nzwrso37dvqHJXmn+QouQpPcZsX7pF4v4TXCE2InY1WY658DihHDkpggt4poBWqPBpNZcz7fyiyR39WSU2B9sd5tm+Ko6YV3kmSHvFZekn9ZXyn6bVNSb4C9BklbSQSLJ6D0YYXSZYMdVDkznGeEUlZEYVZOsWZXKE71JVaB8emQfHxDK1Jc/N+fVOduw3LVK2BhsrVTQWHGM3gGq+IhxbJRCI8e5sIf3/glk0pCJNQPQ22nXQDUbx9YnJ+h4WWB3/tl30C7nACsBAx9j19WVcmTsoO5jz/h3kbYWQKp2h4YUaoyEiRXhjnUZcQtvmHe8RVuDYzyDnaAEbmzRLswXMI/a+aGmymINsYW8YxLaoQrbHzZC0MhMsgAVPXQBk/v7fhQgbBEtafZJp+yLunCb8h8u/FpZswq4qO9BbUi9pOYtA+vEhJvrH+z8BTegZmZwrTdAyRcIc0KdM6CvG0pK1Y5iUEyfGpkO/eLFcpSbCQ2Hs79z3y9766tE8rPpIyUOLBLh/82qLYqbSZpuKe6XKF4ZGwUgNGtap2B2+wLdeMkJKQqLh/vbNaSwkL0/kIAEoyI+6bkdioq9GM56trgqGFDd/SlFxNs8zkx0dOw8af57/jCYmoKLApLsFa98UkFQiiJ3zKuZ9WrR1OhRrg5AYNklmPp5pGQI7cujtL0b+RamWPKoUFwQWm1zSeDFsmWpuNEztPVY8yMrYXtgNa1wqTc6sRrKzFfAyyxQXQ6qRtdMfQspgd37EXMDJJXMSUJ9ReB3tho2dqy2zYoNt2AvVtuNP0AQOmkYQY1JWFrKJHZuKee9PkSj2Wjw9g7Wp5EMec5+zt8XpFLV8s/G7IE2lYFEcVhG1xjrmWxFk73SOMJc9+l8/gOH/Z/E5H7icu8n6B5bAl8CZAa+3qoD1q3iTYPqQz5DfxXLsePYJ7/CEQPKA9f+NuKVzC2vmej0no/4DSWjUr5L+V7BkJBWAQ13si0NA0e8u7h7tM4J61JitgvhI5kci6VfsMFsudM3Y9jf/4djWZ7zq9Mu0+iZ1N119s4M0/+oG4fNVJl6PHxDK0go= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c01feb82-964d-4a03-5c7c-08daa8a21e77 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Oct 2022 20:25:47.7215 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P250MB0285 Subject: [FFmpeg-devel] [PATCH 9/9] avcodec/opus_pvq: Avoid indirection when possible X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 0X87aGZvB/0P Signed-off-by: Andreas Rheinhardt --- libavcodec/opus_pvq.c | 4 ++-- libavcodec/opus_pvq.h | 3 +++ libavcodec/opus_pvq_template.c | 35 ++++++++++++++++++---------------- libavcodec/opusenc_psy.c | 12 ++++++------ 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/libavcodec/opus_pvq.c b/libavcodec/opus_pvq.c index 8ef0f85a81..26d4e436e1 100644 --- a/libavcodec/opus_pvq.c +++ b/libavcodec/opus_pvq.c @@ -511,9 +511,9 @@ int av_cold ff_celt_pvq_init(CeltPVQ **pvq, int encode) #if CONFIG_OPUS_ENCODER #if CONFIG_OPUS_DECODER - s->quant_band = encode ? pvq_quant_band_enc : pvq_quant_band_dec; + s->quant_band = encode ? ff_pvq_quant_band_enc : pvq_quant_band_dec; #else - s->quant_band = pvq_quant_band_enc; + s->quant_band = ff_pvq_quant_band_enc; #endif s->pvq_search = ppp_pvq_search_c; #if ARCH_X86 diff --git a/libavcodec/opus_pvq.h b/libavcodec/opus_pvq.h index b71bc49034..4907025125 100644 --- a/libavcodec/opus_pvq.h +++ b/libavcodec/opus_pvq.h @@ -26,6 +26,7 @@ #include "libavutil/mem_internal.h" #include "opus_celt.h" +#include "opus_rc.h" #define QUANT_FN(name) uint32_t (name)(struct CeltPVQ *pvq, CeltFrame *f, \ OpusRangeCoder *rc, const int band, float *X, \ @@ -47,4 +48,6 @@ void ff_celt_pvq_init_x86(struct CeltPVQ *s); int ff_celt_pvq_init(struct CeltPVQ **pvq, int encode); void ff_celt_pvq_uninit(struct CeltPVQ **pvq); +QUANT_FN(ff_pvq_quant_band_enc); + #endif /* AVCODEC_OPUS_PVQ_H */ diff --git a/libavcodec/opus_pvq_template.c b/libavcodec/opus_pvq_template.c index 5f03f3d415..79e8e4ca52 100644 --- a/libavcodec/opus_pvq_template.c +++ b/libavcodec/opus_pvq_template.c @@ -24,14 +24,17 @@ */ #undef FUNC +#undef STATIC #if ENCODING -#define FUNC(name) name ## _enc +#define STATIC +#define FUNC(name) ff_ ## name ## _enc #else +#define STATIC static #define FUNC(name) name ## _dec #endif -static +STATIC uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f, OpusRangeCoder *const rc, const int band, float *X, @@ -256,8 +259,8 @@ uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f, sign = 1 - 2 * sign; /* We use orig_fill here because we want to fold the side, but if itheta==16384, we'll have cleared the low bits of fill. */ - cm = pvq->quant_band(pvq, f, rc, band, x2, NULL, N, mbits, blocks, lowband, duration, - lowband_out, level, gain, lowband_scratch, orig_fill); + cm = FUNC(pvq_quant_band)(pvq, f, rc, band, x2, NULL, N, mbits, blocks, lowband, duration, + lowband_out, level, gain, lowband_scratch, orig_fill); /* We don't split N=2 bands, so cm is either 1 or 0 (for a fold-collapse), and there's no need to worry about mixing with the other channel. */ y2[0] = -sign * x2[1]; @@ -309,25 +312,25 @@ uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f, if (mbits >= sbits) { /* In stereo mode, we do not apply a scaling to the mid * because we need the normalized mid for folding later */ - cm = pvq->quant_band(pvq, f, rc, band, X, NULL, N, mbits, blocks, - lowband, duration, next_lowband_out1, next_level, - stereo ? 1.0f : (gain * mid), lowband_scratch, fill); + cm = FUNC(pvq_quant_band)(pvq, f, rc, band, X, NULL, N, mbits, blocks, + lowband, duration, next_lowband_out1, next_level, + stereo ? 1.0f : (gain * mid), lowband_scratch, fill); rebalance = mbits - (rebalance - f->remaining2); if (rebalance > 3 << 3 && itheta != 0) sbits += rebalance - (3 << 3); /* For a stereo split, the high bits of fill are always zero, * so no folding will be done to the side. */ - cmt = pvq->quant_band(pvq, f, rc, band, Y, NULL, N, sbits, blocks, - next_lowband2, duration, NULL, next_level, - gain * side, NULL, fill >> blocks); + cmt = FUNC(pvq_quant_band)(pvq, f, rc, band, Y, NULL, N, sbits, blocks, + next_lowband2, duration, NULL, next_level, + gain * side, NULL, fill >> blocks); cm |= cmt << ((B0 >> 1) & (stereo - 1)); } else { /* For a stereo split, the high bits of fill are always zero, * so no folding will be done to the side. */ - cm = pvq->quant_band(pvq, f, rc, band, Y, NULL, N, sbits, blocks, - next_lowband2, duration, NULL, next_level, - gain * side, NULL, fill >> blocks); + cm = FUNC(pvq_quant_band)(pvq, f, rc, band, Y, NULL, N, sbits, blocks, + next_lowband2, duration, NULL, next_level, + gain * side, NULL, fill >> blocks); cm <<= ((B0 >> 1) & (stereo - 1)); rebalance = sbits - (rebalance - f->remaining2); if (rebalance > 3 << 3 && itheta != 16384) @@ -335,9 +338,9 @@ uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f, /* In stereo mode, we do not apply a scaling to the mid because * we need the normalized mid for folding later */ - cm |= pvq->quant_band(pvq, f, rc, band, X, NULL, N, mbits, blocks, - lowband, duration, next_lowband_out1, next_level, - stereo ? 1.0f : (gain * mid), lowband_scratch, fill); + cm |= FUNC(pvq_quant_band)(pvq, f, rc, band, X, NULL, N, mbits, blocks, + lowband, duration, next_lowband_out1, next_level, + stereo ? 1.0f : (gain * mid), lowband_scratch, fill); } } } else { diff --git a/libavcodec/opusenc_psy.c b/libavcodec/opusenc_psy.c index 17a2efd8d5..0ec915d3c5 100644 --- a/libavcodec/opusenc_psy.c +++ b/libavcodec/opusenc_psy.c @@ -54,14 +54,14 @@ static float pvq_band_cost(CeltPVQ *pvq, CeltFrame *f, OpusEncRangeCoder *rce, i } if (f->dual_stereo) { - pvq->quant_band(pvq, f, rc, band, X, NULL, band_size, b / 2, f->blocks, NULL, - f->size, norm1, 0, 1.0f, lowband_scratch, cm[0]); + ff_pvq_quant_band_enc(pvq, f, rc, band, X, NULL, band_size, b / 2, f->blocks, NULL, + f->size, norm1, 0, 1.0f, lowband_scratch, cm[0]); - pvq->quant_band(pvq, f, rc, band, Y, NULL, band_size, b / 2, f->blocks, NULL, - f->size, norm2, 0, 1.0f, lowband_scratch, cm[1]); + ff_pvq_quant_band_enc(pvq, f, rc, band, Y, NULL, band_size, b / 2, f->blocks, NULL, + f->size, norm2, 0, 1.0f, lowband_scratch, cm[1]); } else { - pvq->quant_band(pvq, f, rc, band, X, Y, band_size, b, f->blocks, NULL, f->size, - norm1, 0, 1.0f, lowband_scratch, cm[0] | cm[1]); + ff_pvq_quant_band_enc(pvq, f, rc, band, X, Y, band_size, b, f->blocks, NULL, f->size, + norm1, 0, 1.0f, lowband_scratch, cm[0] | cm[1]); } for (i = 0; i < band_size; i++) {