From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 3B5A04789F for ; Tue, 26 Sep 2023 22:18:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E7C4D68CABB; Wed, 27 Sep 2023 01:17:30 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2101.outbound.protection.outlook.com [40.92.90.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9793968CA6F for ; Wed, 27 Sep 2023 01:17:27 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EJ+xUgx3Ut5RZNTKtstCht/BqJlIjOUAGTs7j9yp/dMlkHn40EBr7zUouvG55Cw99JSBdEKQtbqjhuV9pXQaVzIGf5Szgi+BHyTcZ8pcjjjzKekE6xR+jdLaGq2b3+BBTNuMszr9cTh26X+07xiSQhnjXOSGNssVADVVdLP0UBO17w2n805FreJ0/Jwt1x+T5qhh6+9kQPyWIAKsHosD1YZbIhJPRf1+ve6iy67mQj4Dbgg55we46oMEiMSsblGEoxStOcpN63V55lAS4y25ZvWRcpANqPa7uALDJWV2FB0hMVUe8Bqd97DtJrADdiwo7BbEqaaJP7c/CdNjRP7Rig== 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=3MGstmGNU6LRwGHhQtV+iusua+nwFI3pgtfbFbU/z08=; b=WQUBW/T0y0onfXG/NeLUKehiComEFmml6hMBEOaPK9RbWm1vDg4cY4ztC8dNKiPSejUejZl+bqaa8E+SWR9fuesC4AUobbsFj+pyFS0xr5Kkit3RtCoANZLccvOterNWZ524S6cZkEbth9iyiUrfRr3USbM+ggNQgpr6XmH6Y3Wp6T6Lz7xHjApFlKY656IgmUjCNFV2uCKD6WIn71amjk0PxuzMj/XN19JUXLzmVFtX5xtbzKRYc9jyUr3DU6gaI1ufEnh6Xgy0oloVvcK8DugRxGc4pvUNzYZbPOlPEJ0jbv5+gZLTx5wh2UkJu893P05Qjc5hThKwMGBgqpyn7Q== 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=3MGstmGNU6LRwGHhQtV+iusua+nwFI3pgtfbFbU/z08=; b=RjyZYDt45VJ7AqfhmVZIQcK0I6TuKpI6oGFpeLXejTs0EvEWNo6Irxl+7Iiq5Jhqa1qzybFW4M/9IY51GkPmeYSSd6tN6+sUy0DlLCC9Q//l9M6w56c6jCkl1kwQj85Gsu76DrBy6LkE9aA8eto7gH/6tgGTucaUa+qSeztDtJXAGK/zibJBgY6gYEb3GSdbzLoOXCYLZLswVaCTjIkHyBjC/Lu2PoXH3kD8hIA0fqsDCN6I47xmfMlqjo+JZcQzgZ7vlNXEdAXf9H6mEKVqD8Gvj6PtqXWHLiDiSa5jcBZ9oc82jqxokSt2QUrIuJcrzX/NUVEsr7cfDTJOxUqJyg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS4P250MB0413.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Tue, 26 Sep 2023 22:17:26 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9d42:7b4f:71ef:c76a]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9d42:7b4f:71ef:c76a%3]) with mapi id 15.20.6813.027; Tue, 26 Sep 2023 22:17:26 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 00:16:48 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [ATrS/4sSXXmsWommUA+OFDCST1GWiKTS] X-ClientProxiedBy: FR3P281CA0019.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::6) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20230926221732.3711507-16-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS4P250MB0413:EE_ X-MS-Office365-Filtering-Correlation-Id: 6c2c77f0-3059-45af-ab62-08dbbede5d55 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RcGgHoLOR+1ImS3vTRklY+gJ9oImbfeVZXTy560SZwBbSLSuwk9NyUBvfSweAwtqqhHHIKRA02sHGf9kOAFokd8yVUZKiTOnrjXl8VSDaI+GDix24LXxP/jWbNbdHOucBCfRjhlvGtIHyvNfwGLZ/GnhAYFspa05J3/VN5RUKmXyqxE5yghojgEm5f5PY8YRZMqKbqqK9ytVql15AMhnYodD6vW0iXhhYDpo0vATk4KzoZg2N/tgRKmwHvqHysI4lEVE8BO7mF+zcqWtGXt+ixUr51SVvpuDnZRNzqX5AO4QiXAatrxgSlubTfcgwOFkpuUYDTLPYFC3R1atdFgmIUUNyNFGKPf3I3u4svT9npcSGkubVKweUeB/5L4S7yrP8/K+zWh6fQf2L1+K0SZQbXOnwEEM86iR/l9TvX4apArf+p+E3maDWbpZEl5x5rL7WLvdCExm1Fj9o+iqmBgM3RX6gl1izRfno0d812IBKlsH3SVknnNfxhHw1jMR977yYAj4fXHprjCu1hRwuKr+poGlVg6196XrLJscRUG/1v+rFfQiyWO+O4K0azQRTm2ugiiOm9eaxEJkZZkTShRykY9Gj2aPcEJnQy9V2+svXmF93Pe5THa3iK/ReGu+PHlc X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qpvIzUIImL25WsiJaPDXc0v3iPqW1kCOelDjxGRo09oJwiF8IguFGe4U0+wS?= =?us-ascii?Q?QY14/Z2dCih0ywrT0psclpx3nXdOq7NqOwYWiD2UOtYXvcw9ObkzQoH/wDjy?= =?us-ascii?Q?H2x5kLgY865//uJLKsNhMkKOaEW2IqNieEfiiWpAe2jTLLF5p+O0wmSWpBSl?= =?us-ascii?Q?Xj9sbphurWLd6GkAYQSLZYJ3HJXfriBdljxk1eZErLQalJepJ3kjToi2rMvx?= =?us-ascii?Q?4ZCzlNgvWQclOJY9ciWLwceeDUAnQ68yQlMCGDonaVlGhXmqgb1K2R20ZYq5?= =?us-ascii?Q?My/2N15rl9npnkAlgteSWXty3uCVUUO00Q5APt3Py4ZRWWBotKymJGVm8r+A?= =?us-ascii?Q?ViKATAfLdXabd8rw7aPsj1nzu6yqcHM+v8VXkBtnY9vKniI3IohV8iVlo3nW?= =?us-ascii?Q?VHxKMOMGjvb3uLf06CXNssUeBTHPzSXuU6XlVHSJthUJ39lpVu+ZOREWqAcg?= =?us-ascii?Q?CzTA5sf5b88tkRdHKTqxazOBiC/zh9098d+5SrDZivobkpMYY3Aff3q5+qnr?= =?us-ascii?Q?yNelYQB2TX3Sea0/ZUME6g8C5jEwtr90lFFwGKBbRSIEbx62mqxVbfddwr+X?= =?us-ascii?Q?HKnF01JuE7j3zs3sDSl4FQas7rzP/vTEOySsFyyMRNRfVX/r7nI+iW08mLZe?= =?us-ascii?Q?K286MSpL6L+coyDJ3xt3BArWUtXZLYbb6eO6Cfw/uSXX1rWA8KIbTJXiKcGP?= =?us-ascii?Q?nsQx9+pzEfCtr9fsUV4fsOuVW0DYBgV2TRNbO8Nyj1p4s6maWwMdRkG5LhEj?= =?us-ascii?Q?0ql8RSgKjAFu1PB5kyhZvVyOUqsXwJ+zrGPLessZeFevCVy/Rt3N/TSHKFNa?= =?us-ascii?Q?leitS7UJ63WJ1uXyHyfJd2ZGWnTotft7e9WLPxbZSHU4zE/7GtqkMCp2Egby?= =?us-ascii?Q?Iw+rdpWcQIZQ4DWu9bnyH6KDiy4+Zf/H/zgtStDaY2TiPrgo/fLAuEY0Lq5g?= =?us-ascii?Q?NgYA2xTX70TtdIfzayP1xi3A7cPmIPUWkj3LTsB9+1FtZte5392rfpy2RYQz?= =?us-ascii?Q?sYfl8zUZ6+uVuP20q0gztqG3HrHFWS1HXC7sujyjkcMkqmOx2H9KMIsq7Xwz?= =?us-ascii?Q?2LQ3yvQGWEVqdgrIrqq5uUhiY3MFkDMst72faX80rjyVWrcqvpo2icfDojOU?= =?us-ascii?Q?ysw+4ANMGWH18W+PRHqNSg4BTjehOsB7RKwv0/bB8wr59dm8KfC6nhpa1Rlx?= =?us-ascii?Q?+T4X2OefCYRzEhYtiqpHtdAmegkRMn2AWYu1NGv8U/QfkvvPviKfkIrIk9v5?= =?us-ascii?Q?9r4JZYR3urGkatSr/gA4?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c2c77f0-3059-45af-ab62-08dbbede5d55 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2023 22:17:26.3568 (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: AS4P250MB0413 Subject: [FFmpeg-devel] [PATCH 17/61] avcodec/clearvideo: Avoid superfluous VLC structures 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Of all these VLCs here, only VLC.table was really used after init, so use the ff_vlc_init_tables API to get rid of them. Signed-off-by: Andreas Rheinhardt --- libavcodec/clearvideo.c | 74 ++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c index 7f2c1c5f55..0b59d44cd6 100644 --- a/libavcodec/clearvideo.c +++ b/libavcodec/clearvideo.c @@ -39,9 +39,9 @@ #define CLV_VLC_BITS 9 typedef struct LevelCodes { - VLC flags_cb; - VLC mv_cb; - VLC bias_cb; + const VLCElem *flags_cb; + const VLCElem *mv_cb; + const VLCElem *bias_cb; } LevelCodes; typedef struct MV { @@ -75,9 +75,8 @@ typedef struct CLVContext { int top_dc[3], left_dc[4]; } CLVContext; -static VLC dc_vlc, ac_vlc; +static VLCElem dc_vlc[1104], ac_vlc[554]; static LevelCodes lev[4 + 3 + 3]; // 0..3: Y, 4..6: U, 7..9: V -static VLCElem vlc_buf[16716]; static inline int decode_block(CLVContext *ctx, int16_t *blk, int has_ac, int ac_quant) @@ -86,13 +85,13 @@ static inline int decode_block(CLVContext *ctx, int16_t *blk, int has_ac, int idx = 1, last = 0, val, skip; memset(blk, 0, sizeof(*blk) * 64); - blk[0] = get_vlc2(gb, dc_vlc.table, CLV_VLC_BITS, 3); + blk[0] = get_vlc2(gb, dc_vlc, CLV_VLC_BITS, 3); if (!has_ac) return 0; while (idx < 64 && !last) { - val = get_vlc2(gb, ac_vlc.table, CLV_VLC_BITS, 2); + val = get_vlc2(gb, ac_vlc, CLV_VLC_BITS, 2); if (val < 0) return AVERROR_INVALIDDATA; if (val != 0x1BFF) { @@ -387,11 +386,11 @@ static int decode_tile(AVCodecContext *avctx, GetBitContext *gb, MV mv = { 0 }; int err; - if (lc->flags_cb.table) - flags = get_vlc2(gb, lc->flags_cb.table, CLV_VLC_BITS, 2); + if (lc->flags_cb) + flags = get_vlc2(gb, lc->flags_cb, CLV_VLC_BITS, 2); - if (lc->mv_cb.table) { - uint16_t mv_code = get_vlc2(gb, lc->mv_cb.table, CLV_VLC_BITS, 2); + if (lc->mv_cb) { + uint16_t mv_code = get_vlc2(gb, lc->mv_cb, CLV_VLC_BITS, 2); if (mv_code != MV_ESC) { mv.x = (int8_t)(mv_code & 0xff); @@ -406,8 +405,8 @@ static int decode_tile(AVCodecContext *avctx, GetBitContext *gb, mv.x += root_mv.x; mv.y += root_mv.y; - if (lc->bias_cb.table) { - uint16_t bias_val = get_vlc2(gb, lc->bias_cb.table, CLV_VLC_BITS, 2); + if (lc->bias_cb) { + uint16_t bias_val = get_vlc2(gb, lc->bias_cb, CLV_VLC_BITS, 2); if (bias_val != BIAS_ESC) { bias = (int16_t)(bias_val); @@ -622,10 +621,12 @@ static int clv_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return mb_ret < 0 ? mb_ret : buf_size; } -static av_cold void build_vlc(VLC *vlc, const uint8_t counts[16], - const uint16_t **syms, unsigned *offset) +static av_cold const VLCElem *build_vlc(VLCInitState *state, + const uint8_t counts[16], + const uint16_t **syms) { uint8_t lens[MAX_VLC_ENTRIES]; + const uint16_t *symbols = *syms; unsigned num = 0; for (int i = 0; i < 16; i++) { @@ -635,42 +636,39 @@ static av_cold void build_vlc(VLC *vlc, const uint8_t counts[16], for (count += num; num < count; num++) lens[num] = i + 1; } - vlc->table = &vlc_buf[*offset]; - vlc->table_allocated = FF_ARRAY_ELEMS(vlc_buf) - *offset; - ff_vlc_init_from_lengths(vlc, CLV_VLC_BITS, num, lens, 1, - *syms, 2, 2, 0, VLC_INIT_STATIC_OVERLONG, NULL); *syms += num; - *offset += vlc->table_size; + return ff_vlc_init_tables_from_lengths(state, CLV_VLC_BITS, num, lens, 1, + symbols, 2, 2, 0, 0); } static av_cold void clv_init_static(void) { + static VLCElem vlc_buf[16716]; + VLCInitState state = VLC_INIT_STATE(vlc_buf); const uint16_t *mv_syms = clv_mv_syms, *bias_syms = clv_bias_syms; - VLC_INIT_STATIC_FROM_LENGTHS(&dc_vlc, CLV_VLC_BITS, NUM_DC_CODES, - clv_dc_lens, 1, - clv_dc_syms, 1, 1, -63, 0, 1104); - VLC_INIT_STATIC_FROM_LENGTHS(&ac_vlc, CLV_VLC_BITS, NUM_AC_CODES, - clv_ac_bits, 1, - clv_ac_syms, 2, 2, 0, 0, 554); - for (unsigned i = 0, j = 0, k = 0, offset = 0;; i++) { + VLC_INIT_STATIC_TABLE_FROM_LENGTHS(dc_vlc, CLV_VLC_BITS, NUM_DC_CODES, + clv_dc_lens, 1, + clv_dc_syms, 1, 1, -63, 0); + VLC_INIT_STATIC_TABLE_FROM_LENGTHS(ac_vlc, CLV_VLC_BITS, NUM_AC_CODES, + clv_ac_bits, 1, + clv_ac_syms, 2, 2, 0, 0); + for (unsigned i = 0, j = 0, k = 0;; i++) { if (0x36F & (1 << i)) { - build_vlc(&lev[i].mv_cb, clv_mv_len_counts[k], &mv_syms, &offset); + lev[i].mv_cb = build_vlc(&state, clv_mv_len_counts[k], &mv_syms); k++; } if (i == FF_ARRAY_ELEMS(lev) - 1) break; if (0x1B7 & (1 << i)) { - lev[i].flags_cb.table = &vlc_buf[offset]; - lev[i].flags_cb.table_allocated = FF_ARRAY_ELEMS(vlc_buf) - offset; - ff_vlc_init_from_lengths(&lev[i].flags_cb, CLV_VLC_BITS, 16, - clv_flags_bits[j], 1, - clv_flags_syms[j], 1, 1, - 0, VLC_INIT_STATIC_OVERLONG, NULL); - offset += lev[i].flags_cb.table_size; - - build_vlc(&lev[i + 1].bias_cb, clv_bias_len_counts[j], - &bias_syms, &offset); + lev[i].flags_cb = + ff_vlc_init_tables_from_lengths(&state, CLV_VLC_BITS, 16, + clv_flags_bits[j], 1, + clv_flags_syms[j], 1, 1, + 0, 0); + + lev[i + 1].bias_cb = build_vlc(&state, clv_bias_len_counts[j], + &bias_syms); j++; } } -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".