From patchwork Tue Sep 13 11:33: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: 37893 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp628458pzh; Tue, 13 Sep 2022 04:34:45 -0700 (PDT) X-Google-Smtp-Source: AA6agR4amoKN8Ma/iXXN6PxQYwBYs20tlvfCKvhiJ/8/JVc/iej3tgSNgVhIdO3vtCLePwhRg6as X-Received: by 2002:a17:906:7304:b0:6ff:a76:5b09 with SMTP id di4-20020a170906730400b006ff0a765b09mr21318160ejc.193.1663068885276; Tue, 13 Sep 2022 04:34:45 -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 x19-20020a170906711300b007801a197a1bsi126248ejj.449.2022.09.13.04.34.44; Tue, 13 Sep 2022 04:34:45 -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="U3TM/Lq5"; 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 1F3EF68BB45; Tue, 13 Sep 2022 14:33:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067064.outbound.protection.outlook.com [40.92.67.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8F67E68BB3C for ; Tue, 13 Sep 2022 14:33:34 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OHlQtG2MBqeFZ/TGeftfYkWlwhHl5AxUA/gCZGA+I0FeKD2OlZrF6R0nmFhtghGfFGdO2JS7k0pxP5hHGfEEs/g/dGbUO/XEdPNSmdkfWitkic2rGbgf+hqvvnwVM8t7B2tFrdN1lut+xVzoyP29sdN3NpmFVjUDyzc1s4ih5jRK5G7gc2jz289jBIYla2PqA5wbY6lOf/aAZH/3HDs4bpnNjGP0SBVs8iaIaZNQIzgMoKu9bWB9EaUaTdgjkND1eIrK0Hu4bRIM/yGjlklkhVyN6TzkSnfX3gBumaWtZVD/jNWMa9R5pXhcPtYKwfjgirNWxvPZ9rlHF1RooDe5Xw== 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=Yc6xf7ztaQhKW+6ZRNHX6nLqbX67BdBpjJY4Iwf7V7A=; b=erINAeYj52/EQXiZ6RsXCBjE1dXYe+UnvezfZejzu++F/0NhZlHcmWmLgrJ3Lvc4ANzbRHuvj2AImeattquqrX748b5o3eG1vW0ve6931KYhwRQeQxpWDqnvLtXw91F94E+9xVvVuteHt0HMWe6YqpNtkZ7x0amS/SLc+deuYHx0DrxpKd8/dJk/Epbuc2znCTPxmmwtDFtOp/uwTgT/wnZrRuCQ/2iXafVcDPUWZjELJ8Enim3HU0alS8wMCW+59wQfwCk082HsOpAP2fw7fLGCKyt5hmY0qGY0xELY3Pyioe3yHajeM7YoCIAxwFCxdIbxUpov3zXLn3Wrya4w9g== 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=Yc6xf7ztaQhKW+6ZRNHX6nLqbX67BdBpjJY4Iwf7V7A=; b=U3TM/Lq51nH8hrBQncqi/+2Q1UNc5hUtEvvL+rhx2bMCKO4fr0/cw5ISCAzwtQug8f4gkFV1w51v7Ed3jSw6iw0IJqt0U7syFpp+tucV4WuWhOqeSreJ93+pEm7UUeeglhP5u4vT3Qm2EN3OGc0QjhTpiyV3wEzDSp/aZW1OVYWJDYU0r17NlW4FNmtFeVBiYYmn2YRG7WhcHzgabp8QNyKfsr/WkEX7MJCvD6THjvzroTKJKFredDT06ZyXczaFMT7dUcXLkbRB1/Glk5BrpwHMdxtEP4rxHiobeoHfaCoTFIcdYMmS+bgzWtevPLG3MfCbsWS5LQsHJXlXfJl58w== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS8P250MB0072.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:374::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5612.22; Tue, 13 Sep 2022 11:33:29 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::51a4:ed23:ea45:dfeb]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::51a4:ed23:ea45:dfeb%7]) with mapi id 15.20.5612.022; Tue, 13 Sep 2022 11:33:29 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 13 Sep 2022 13:33:08 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [k7eRGqhbmEpGNMW3QgrI3Opyri7+t4twkX6g1HUJawE=] X-ClientProxiedBy: AS9PR06CA0296.eurprd06.prod.outlook.com (2603:10a6:20b:45a::16) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20220913113310.451876-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS8P250MB0072:EE_ X-MS-Office365-Filtering-Correlation-Id: 445ff778-02fd-4599-f7f3-08da957bc79d X-MS-Exchange-SLBlob-MailProps: EgT5Wr3QDKy7YnLMs5Csile4q0ca2x3w9F8yamsprfBG20LD1f3HOxu7oxu1z7hkLaII65ouYV/FyKcovssQ0vVj1eaygPSSjhvhPsfDY2yZQ7aLIt7K9RGfxIeohl6tjL3FtzsT/KoFojx6Do24M9cE4BBygSnbw3iCPRGv/Xx6HCxsJOVY+F/E3fKImQnIgqmoxuCvRWM+LvjVZ4EOrWznx7K2W2IOjo2BE3UgNSMgEcQIOmalpOs3ms+lIYoZEgVw2fEvZfYRLCg0xb9FjfwzMd6Sw1k+I3S5bllrrFXt/5AJsDMuK74RNwq2jCBuhmYc2ieX67WVgrcoicN1VbAXJp9gbhRD4ZY+HhLTXyWgTJiVs3+oNnl6U2EWYBlTMH/Str58fEhdqhBm+bfGxVkyIS25MPmhWf/Iv5PLhs/B/we2IN0GMHQKRxxBeZ5Iada6Np21gRlxjHfYXlCqf59hPsDf/B0eSZAavlCkrnIaYyr227mKHsdPb11OvfAMXk9mcPVv7qyFr9Pi2Xw8e2F3Lnf76skeI0y7is5vsVUXP1BrjaaKhh8NtrGSErbQfkHIf/ITE+gNzaEYjSn110+MLIu1KDhSC7DRfrfkivuIO9s8FCveuvQNioyEsJhSDGTk4cXLSooMnqiF+62dnHRzL8gar+Mblwz1z532E6Xlbs/nvSO++JBz6asfSqFiYkT8qYhOfPWUjZT4qpKcDdVvH7axzqmx6qEEnvX3l5E= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KNqSFIx/51sjn6wDvspxMMHf5mUNaEAaB3SOOynK7zFqJ75uIu+KyJuGMt8vZCsgqC9qOyL0/7m08l0XPbugAx7oNkTcm+VLg7li8MS/pKkYSrA4ZHNCoGup5nV5JbaiEdsA/He29dC9fAFnSmPZV9TRlggd3mhVt7ZyY8ngwGum1L6PDTR8rfoLtH5XSzTzPX5ChNAJcRcOOu8PUn85VLSJGdp9Loo4R7Q84Hyc71WL5fAKVCIxSNraMRET8A/ihUN0TvvbjCCC7sPD1o+pBFkbM7UI1Fl2oTdjLG9a7DskXJXMnbg1eJ0nNAn6fs+j3EQZ1FgBAj7wMuQ0jNrgfTwEsX2LScF/odf5gS34kjs8tLpeKQ2f2PNUKK3PxUj8nbbnaac8exn2yVNe9Mkk5kxAHwoL2PyBjgftkSeF9A6VnUzAWNfmMZqh4zyeGDIBxoGBLeghgSuYnOrdEA1HeVS6+rImy+XRfy/1BQBZeHLfXHbYzWW4TWXnYxBHuS1aqPekspG35KpXNRgMjg0eTAbPIvGI+89m5i1cBUPtIYRTtTGrP3+gDrdWDXg9PRjvY8jMkz+J4zcLe6Z+V882whzehGyCXcJKbVCiWAFOBo0j23+5rg6sFSnSgO84llMzueF80WlegtSvmet7brmHCQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EPs8sis7sSCnTbuQU1oXHk1XE6w4l5MqTzuhfJkFb4jfiTR0gqVPgjsrZxQ23u6jvSggCSYSrBtXNIxyMem1ClaCjjJvdX4K1ZEBOPzRo0Uabees576VqgnUE1JdRIAVUPQ7hjNE5UET9e82soLGnMDU7teMeHz60JNyhO3OAS+EUEO+FQkODHfswEc3BgEGyvfniAWsasXYMpzQru5OzN4s/BqPZE4N70jCS9QTBWW2CD0Gr8ynV/RpN/qnDBQKcACjvWfryS0rC2GAbi3SJCKII37aGURbr7X4etbmYWlClwEsvXKfss8mzmzvboV6mAyAl1raWe4xoK3MMNZXTHw60bdVuK05dEmasapWF0156NX50Ld7WxK05Tjw3wYL0Pa7LINEWRlfJ3HdNDDw113fLhyzyU3zAxaLo/z+qph2voBlkXI2EHNbN7MBNoQhlq7L0iViS7VCJXBE61GhQF0OOMmO/MOd2I0YXOLQw72H9mQN1egvFlbQnDBtc8PL7KxQlKcQU6K/6sL7HqfCDZ6lyjV9x6Tb2HV3K5ZXKKp/eyfekwMf03xr64L7WiXVii1zoioSwmWrxQ9wAbYo+zfIHJqq2m+9vnxmzZwfzHWw6lXqYNEroz+kyPXEPTPZ/Hw1OxvV37TzSSzg5JCtZ3WRZ/yg9DnelfBhIU0vfdLl+TLFnMM44LjtrWjX9rnUlbMZ3tSgEeta75h5TVYxkrEglHJoi2tsYmmdyPe+DPsXuJQbfExLITDt4GbaNZBJgB/uAljmqwWpvparxvzlTYfG+FD8lUrWyBm5cPWyyns9dd1yPDHdmv6k8fmDJL/fAb73XgE159AhY++Ei6QtmT7QqHLF7GO+Bamt6S1tTzp5tBxviwbI4Z9PyJE3IkFZuo+/dXIbNdwx+gk7dsycQ0zeEzsvOY3c+HySR3qpLWIC2eaATyZBwx7aLn/ct1/Sqo0VBen5XIUZu3H+d/NJ2hhuR07Odn4T+n7Xmq8AyAYisf+bxfdyPKhX7nbbr2Wpu94elIYr5PVLkCcbeM5mJ45KnGe5fADPwGI9Dhiqd+hojnecuU2nJhxC+IyCQkLzbp7FEuv0nuhSk7Kvt4MNsRM//p9fTrgf8M7Xcpom9c1xQ8brnQLHodOgPQWzsiZ+2XKl5h58moW/GbybvieSnm6DDqeNQ4wBOq3jUzn8ZK9RpFtLkfhI/FibtxCL5yswFCgcNd+BbonEFYqhgPlXwirluSZnjlNbqyeQFcn+NWsq+DGGXuVuQ30He1RFl+1NRc2WtohwjpTWKvg3WjHjt1us1DUt1A7HipkACnQMB8dDuw2UQG0+a7cL2rekNPxG X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 445ff778-02fd-4599-f7f3-08da957bc79d X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2022 11:33:29.0599 (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: AS8P250MB0072 Subject: [FFmpeg-devel] [PATCH 11/13] avcodec/dcahuff: Replace DCAVLC by ordinary VLCs 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: NqTP7E3rDic2 This is possible now that the offsets are already applied when creating the VLC. Signed-off-by: Andreas Rheinhardt --- libavcodec/dca_core.c | 10 +++++----- libavcodec/dcahuff.c | 13 +++++-------- libavcodec/dcahuff.h | 9 ++------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/libavcodec/dca_core.c b/libavcodec/dca_core.c index 7b23a40df4..c204e41cb7 100644 --- a/libavcodec/dca_core.c +++ b/libavcodec/dca_core.c @@ -67,9 +67,9 @@ static const uint8_t block_code_nbits[7] = { 7, 10, 12, 13, 15, 17, 19 }; -static int dca_get_vlc(GetBitContext *s, DCAVLC *v, int i) +static int dca_get_vlc(GetBitContext *s, const VLC *vlc) { - return get_vlc2(s, v->vlc[i].table, v->vlc[i].bits, 2); + return get_vlc2(s, vlc->table, vlc->bits, 2); } static void get_array(GetBitContext *s, int32_t *array, int size, int n) @@ -435,7 +435,7 @@ static int parse_subframe_header(DCACoreDecoder *s, int sf, int abits; if (sel < 5) - abits = dca_get_vlc(&s->gb, &ff_dca_vlc_bit_allocation, sel); + abits = dca_get_vlc(&s->gb, &ff_dca_vlc_bit_allocation[sel]); else abits = get_bits(&s->gb, sel - 1); @@ -570,7 +570,7 @@ static inline int parse_huffman_codes(DCACoreDecoder *s, int32_t *audio, int abi // Extract Huffman codes from the bit stream for (i = 0; i < DCA_SUBBAND_SAMPLES; i++) - audio[i] = dca_get_vlc(&s->gb, &ff_dca_vlc_quant_index[abits - 1], sel); + audio[i] = dca_get_vlc(&s->gb, &ff_dca_vlc_quant_index[abits - 1][sel]); return 1; } @@ -1340,7 +1340,7 @@ static int parse_x96_subframe_header(DCACoreDecoder *s, int xch_base) for (band = s->x96_subband_start; band < s->nsubbands[ch]; band++) { // If Huffman code was used, the difference of abits was encoded if (sel < 7) - abits += dca_get_vlc(&s->gb, &ff_dca_vlc_quant_index[5 + 2 * s->x96_high_res], sel); + abits += dca_get_vlc(&s->gb, &ff_dca_vlc_quant_index[5 + 2 * s->x96_high_res][sel]); else abits = get_bits(&s->gb, 3 + s->x96_high_res); diff --git a/libavcodec/dcahuff.c b/libavcodec/dcahuff.c index a7518aded8..937a87ee05 100644 --- a/libavcodec/dcahuff.c +++ b/libavcodec/dcahuff.c @@ -768,10 +768,10 @@ const uint8_t ff_dca_vlc_src_tables[][2] = { { 4, 3 }, { 0, 3 }, { 2, 2 }, { 3, 2 }, }; -DCAVLC ff_dca_vlc_bit_allocation; +VLC ff_dca_vlc_bit_allocation[5]; VLC ff_dca_vlc_transition_mode[4]; VLC ff_dca_vlc_scale_factor[5]; -DCAVLC ff_dca_vlc_quant_index[DCA_CODE_BOOKS]; +VLC ff_dca_vlc_quant_index[DCA_CODE_BOOKS][7]; VLC ff_dca_vlc_tnl_grp[5]; VLC ff_dca_vlc_tnl_scf; @@ -791,7 +791,6 @@ av_cold void ff_dca_init_vlcs(void) static VLCElem dca_table[30218]; const uint8_t (*src_table)[2] = ff_dca_vlc_src_tables; unsigned offset = 0; - int i; #define DCA_INIT_VLC(vlc, nb_bits, nb_codes, entry_offset) \ do { \ @@ -805,15 +804,13 @@ av_cold void ff_dca_init_vlcs(void) } while (0) for (unsigned i = 0; i < DCA_CODE_BOOKS; i++) { - ff_dca_vlc_quant_index[i].max_depth = 1 + (i > 4); for (unsigned j = 0; j < ff_dca_quant_index_group_size[i]; j++) - DCA_INIT_VLC(ff_dca_vlc_quant_index[i].vlc[j], bitalloc_maxbits[i][j], + DCA_INIT_VLC(ff_dca_vlc_quant_index[i][j], bitalloc_maxbits[i][j], ff_dca_bitalloc_sizes[i], ff_dca_bitalloc_offsets[i]); } - ff_dca_vlc_bit_allocation.max_depth = 2; - for (i = 0; i < 5; i++) - DCA_INIT_VLC(ff_dca_vlc_bit_allocation.vlc[i], bitalloc_12_vlc_bits[i], 12, 1); + for (unsigned i = 0; i < FF_ARRAY_ELEMS(ff_dca_vlc_bit_allocation); i++) + DCA_INIT_VLC(ff_dca_vlc_bit_allocation[i], bitalloc_12_vlc_bits[i], 12, 1); for (unsigned i = 0; i < FF_ARRAY_ELEMS(ff_dca_vlc_scale_factor); i++) DCA_INIT_VLC(ff_dca_vlc_scale_factor[i], DCA_SCALES_VLC_BITS, 129, -64); diff --git a/libavcodec/dcahuff.h b/libavcodec/dcahuff.h index 8663f8ba12..eaae234479 100644 --- a/libavcodec/dcahuff.h +++ b/libavcodec/dcahuff.h @@ -35,17 +35,12 @@ 3 * (5 + 7 + 9 + 13) \ + 7 * (17 + 25 + 33 + 65 + 129)) -typedef struct DCAVLC { - int max_depth; ///< Parameter for get_vlc2() - VLC vlc[7]; ///< Actual codes -} DCAVLC; - -extern DCAVLC ff_dca_vlc_bit_allocation; +extern VLC ff_dca_vlc_bit_allocation[5]; #define DCA_TMODE_VLC_BITS 3 extern VLC ff_dca_vlc_transition_mode[4]; #define DCA_SCALES_VLC_BITS 9 extern VLC ff_dca_vlc_scale_factor[5]; -extern DCAVLC ff_dca_vlc_quant_index[DCA_CODE_BOOKS]; +extern VLC ff_dca_vlc_quant_index[DCA_CODE_BOOKS][7]; extern VLC ff_dca_vlc_tnl_grp[5]; extern VLC ff_dca_vlc_tnl_scf;