From patchwork Sun Oct 18 06:40:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23060 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 1E59F447EE5 for ; Sun, 18 Oct 2020 09:40:45 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0CC8A68B925; Sun, 18 Oct 2020 09:40:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A62F68B5F6 for ; Sun, 18 Oct 2020 09:40:38 +0300 (EEST) Received: by mail-wr1-f67.google.com with SMTP id i1so7882350wro.1 for ; Sat, 17 Oct 2020 23:40:38 -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=UQyn24v9Aibm0O+wpRAw3gMhOWdiQjDAPVjdHMe4MNE=; b=gII4JvcqMc/QtczAfNsTt78yEwbFTZrt1y0vAlqpYs15a5WaEuCYQHG8Kf/gR7yDdT Gr4qQ8gL0famaTPPUnmBcQEF05hNGwyWJAhqulSqgDUCE46FGfyEPhjv5KUbLZfCEsGH B9/n5+tfooRNB55lnYDZC6dLC2oQJjz6r4CZvaBmysafyFOmRulIBMI/6G2yjY+5f5xu 1V7IGN3FxrfBYGjlwmeiIh9kGG6KcvgDaJc71fuI0HDM0YsafZEXRmg0pvg0xAfwWsmF DcqYkylHYF0nzBd6AH7TyAuEDVc9txoOC2Jlyb+FQPd5aEQHRjQlug68d5Yo/x84ofik cuOQ== 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=UQyn24v9Aibm0O+wpRAw3gMhOWdiQjDAPVjdHMe4MNE=; b=DYhLhFQBpwfqQis9STGrJRcODWpRC8WqCd/fIfYYuQOo7WR2Tlkq/FpTrBAvqJG13s I3w2XW/HPisxxpJw+vMr03Y+hWEX1RiOPNV3DOQeBdzxYCOs/peRCivUGmV72SIwk3BV mh3a5pXPO94Q8UkS1WHObGAUsmtAp13zDkb1x0ZWt4LCHqtYFbjcyaaRflf1c1Z6a8Z3 3Hbc8DbENtjFxeUK/wWJ4lboRf2ElAsBBCQ55ofi8bVvPo/lJeVwqJlsYg3uf4PnoeDD IRaMJ6dQOP5ZNxDT1c7rWgoRhtQkLn5rj8GkrPRfYjYVrN1nFVnwbrBY/6tFjzi9KteA XQ4w== X-Gm-Message-State: AOAM5323AN/aznKui4Yz+pz04GhPyijdYBBakRGVB/QQ6voDEv8PDjGw fz/68MuU3iTnrR/BTByv15wiLmb7/k0= X-Google-Smtp-Source: ABdhPJzM+apPnhCLf5NJe3xfvRYRYYAi5mUu2Usj3Nvhbz9D1KSZ75MoAmYsgtr6m9smHQTVcQijyQ== X-Received: by 2002:a5d:4fcc:: with SMTP id h12mr14008035wrw.132.1603003237254; Sat, 17 Oct 2020 23:40:37 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id f8sm12360327wrw.85.2020.10.17.23.40.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 Oct 2020 23:40:36 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Oct 2020 08:40:03 +0200 Message-Id: <20201018064004.667741-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201018064004.667741-1-andreas.rheinhardt@gmail.com> References: <20201018064004.667741-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] avcodec/on2avc: Unify initializing quad and pair VLCs 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Up until now, quad VLCs are initialized with codes of type uint32_t, pair VLCs with codes of type uint16_t. There were two separate loops in the decoder's init function for each type of VLC. This commit unifies this: The type of the codes are now passed in as void * and the actual size of the codes is obtained from a table. This approach also allows to use the smallest type for each VLC code table: some quad tables actually fitted in uint16_t. This allows to remove about 7KB from the binary. Signed-off-by: Andreas Rheinhardt --- libavcodec/on2avc.c | 21 ++++--------- libavcodec/on2avcdata.c | 65 ++++++++++++++++++----------------------- libavcodec/on2avcdata.h | 13 ++++----- 3 files changed, 40 insertions(+), 59 deletions(-) diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c index 00e5bf5397..e54c23cb1c 100644 --- a/libavcodec/on2avc.c +++ b/libavcodec/on2avc.c @@ -961,21 +961,12 @@ static av_cold int on2avc_decode_init(AVCodecContext *avctx) ff_on2avc_scale_diff_codes, 4, 4, 0)) { goto vlc_fail; } - for (i = 1; i < 9; i++) { - int idx = i - 1; - if (ff_init_vlc_sparse(&c->cb_vlc[i], 9, ff_on2avc_quad_cb_elems[idx], - ff_on2avc_quad_cb_bits[idx], 1, 1, - ff_on2avc_quad_cb_codes[idx], 4, 4, - ff_on2avc_quad_cb_syms[idx], 2, 2, 0)) { - goto vlc_fail; - } - } - for (i = 9; i < 16; i++) { - int idx = i - 9; - if (ff_init_vlc_sparse(&c->cb_vlc[i], 9, ff_on2avc_pair_cb_elems[idx], - ff_on2avc_pair_cb_bits[idx], 1, 1, - ff_on2avc_pair_cb_codes[idx], 2, 2, - ff_on2avc_pair_cb_syms[idx], 2, 2, 0)) { + for (i = 1; i < 16; i++) { + int idx = i - 1, codes_size = ff_on2avc_cb_codes_sizes[idx]; + if (ff_init_vlc_sparse(&c->cb_vlc[i], 9, ff_on2avc_cb_elems[idx], + ff_on2avc_cb_bits[idx], 1, 1, + ff_on2avc_cb_codes[idx], codes_size, codes_size, + ff_on2avc_cb_syms[idx], 2, 2, 0)) { goto vlc_fail; } } diff --git a/libavcodec/on2avcdata.c b/libavcodec/on2avcdata.c index 0aa49cee78..482cf5e5e9 100644 --- a/libavcodec/on2avcdata.c +++ b/libavcodec/on2avcdata.c @@ -159,7 +159,7 @@ const uint8_t ff_on2avc_scale_diff_bits[ON2AVC_SCALE_DIFFS] = { }; #define ON2AVC_CB1_2_CODES 41 -static const uint32_t on2avc_cb1_codes[ON2AVC_CB1_2_CODES] = { +static const uint16_t on2avc_cb1_codes[ON2AVC_CB1_2_CODES] = { 0x0000, 0x0022, 0x001C, 0x001B, 0x0024, 0x0030, 0x0029, 0x0027, 0x0021, 0x002B, 0x002E, 0x0020, 0x0026, 0x0033, 0x0031, 0x002C, 0x002A, 0x001E, @@ -189,14 +189,14 @@ static const uint16_t on2avc_cb1_2_syms[ON2AVC_CB1_2_CODES] = { 0xFF00, 0xFF11, 0xFF1F, 0xFFF1, 0xFFFF, }; -static const uint32_t on2avc_cb2_codes[ON2AVC_CB1_2_CODES] = { - 0x0006, 0x0003, 0x001F, 0x001E, 0x0000, 0x0014, - 0x0009, 0x000E, 0x000D, 0x000C, 0x0015, 0x0008, - 0x0010, 0x000F, 0x0004, 0x0012, 0x0007, 0x0016, - 0x0005, 0x002F, 0x0017, 0x0006, 0x001D, 0x002C, - 0x005E, 0x0014, 0x0016, 0x0006, 0x0011, 0x000A, - 0x0013, 0x001C, 0x002D, 0x0015, 0x005F, 0x002E, - 0x0002, 0x0007, 0x005D, 0x005C, 0x0004, +static const uint8_t on2avc_cb2_codes[ON2AVC_CB1_2_CODES] = { + 0x06, 0x03, 0x1F, 0x1E, 0x00, 0x14, + 0x09, 0x0E, 0x0D, 0x0C, 0x15, 0x08, + 0x10, 0x0F, 0x04, 0x12, 0x07, 0x16, + 0x05, 0x2F, 0x17, 0x06, 0x1D, 0x2C, + 0x5E, 0x14, 0x16, 0x06, 0x11, 0x0A, + 0x13, 0x1C, 0x2D, 0x15, 0x5F, 0x2E, + 0x02, 0x07, 0x5D, 0x5C, 0x04, }; static const uint8_t on2avc_cb2_bits[ON2AVC_CB1_2_CODES] = { @@ -378,7 +378,7 @@ static const uint16_t on2avc_cb3_4_syms[ON2AVC_CB3_4_CODES] = { 0xFFFF, }; -static const uint32_t on2avc_cb4_codes[ON2AVC_CB3_4_CODES] = { +static const uint16_t on2avc_cb4_codes[ON2AVC_CB3_4_CODES] = { 0x000A, 0x013B, 0x0127, 0x0004, 0x0015, 0x012C, 0x065F, 0x08CD, 0x016A, 0x08E7, 0x06BA, 0x001B, 0x001D, 0x0018, 0x000A, 0x0002, 0x00C0, 0x012B, @@ -3162,7 +3162,7 @@ static const uint16_t on2avc_cb7_8_syms[ON2AVC_CB7_8_CODES] = { 0xFFEE, 0xFFF1, 0xFFF3, 0xFFFD, 0xFFFF, }; -static const uint32_t on2avc_cb8_codes[ON2AVC_CB7_8_CODES] = { +static const uint16_t on2avc_cb8_codes[ON2AVC_CB7_8_CODES] = { 0x028C, 0x05E6, 0xFAD9, 0x7DEF, 0x06CE, 0x004C, 0x0178, 0x0A1D, 0x00AE, 0x046E, 0x03D5, 0x3F58, 0x0EAA, 0x0233, 0x1A6A, 0x271F, 0x05CE, 0x0179, @@ -5996,42 +5996,35 @@ static const uint16_t on2avc_cb15_syms[ON2AVC_CB15_CODES] = { 0xFFFD, 0xFFFE, 0xFFFF, }; -const uint32_t * const ff_on2avc_quad_cb_codes[] = { - on2avc_cb1_codes, on2avc_cb2_codes, on2avc_cb3_codes, on2avc_cb4_codes, - on2avc_cb5_codes, on2avc_cb6_codes, on2avc_cb7_codes, on2avc_cb8_codes -}; - -const uint8_t * const ff_on2avc_quad_cb_bits[] = { - on2avc_cb1_bits, on2avc_cb2_bits, on2avc_cb3_bits, on2avc_cb4_bits, - on2avc_cb5_bits, on2avc_cb6_bits, on2avc_cb7_bits, on2avc_cb8_bits -}; - -const uint16_t * const ff_on2avc_quad_cb_syms[] = { - on2avc_cb1_2_syms, on2avc_cb1_2_syms, on2avc_cb3_4_syms, on2avc_cb3_4_syms, - on2avc_cb5_6_syms, on2avc_cb5_6_syms, on2avc_cb7_8_syms, on2avc_cb7_8_syms -}; - -const int ff_on2avc_quad_cb_elems[] = { - ON2AVC_CB1_2_CODES, ON2AVC_CB1_2_CODES, ON2AVC_CB3_4_CODES, ON2AVC_CB3_4_CODES, - ON2AVC_CB5_6_CODES, ON2AVC_CB5_6_CODES, ON2AVC_CB7_8_CODES, ON2AVC_CB7_8_CODES, -}; - -const uint16_t * const ff_on2avc_pair_cb_codes[] = { +const void * const ff_on2avc_cb_codes[] = { + on2avc_cb1_codes, on2avc_cb2_codes, on2avc_cb3_codes, on2avc_cb4_codes, + on2avc_cb5_codes, on2avc_cb6_codes, on2avc_cb7_codes, on2avc_cb8_codes, on2avc_cb9_codes, on2avc_cb10_codes, on2avc_cb11_codes, on2avc_cb12_codes, on2avc_cb13_codes, on2avc_cb14_codes, on2avc_cb15_codes }; -const uint8_t * const ff_on2avc_pair_cb_bits[] = { + +const uint8_t * const ff_on2avc_cb_bits[] = { + on2avc_cb1_bits, on2avc_cb2_bits, on2avc_cb3_bits, on2avc_cb4_bits, + on2avc_cb5_bits, on2avc_cb6_bits, on2avc_cb7_bits, on2avc_cb8_bits, on2avc_cb9_bits, on2avc_cb10_bits, on2avc_cb11_bits, on2avc_cb12_bits, on2avc_cb13_bits, on2avc_cb14_bits, on2avc_cb15_bits }; -const uint16_t * const ff_on2avc_pair_cb_syms[] = { +const uint16_t * const ff_on2avc_cb_syms[] = { + on2avc_cb1_2_syms, on2avc_cb1_2_syms, on2avc_cb3_4_syms, on2avc_cb3_4_syms, + on2avc_cb5_6_syms, on2avc_cb5_6_syms, on2avc_cb7_8_syms, on2avc_cb7_8_syms, on2avc_cb9_10_syms, on2avc_cb9_10_syms, on2avc_cb11_syms, on2avc_cb12_syms, - on2avc_cb13_syms, on2avc_cb14_syms, on2avc_cb15_syms + on2avc_cb13_syms, on2avc_cb14_syms, on2avc_cb15_syms }; -const int ff_on2avc_pair_cb_elems[] = { +const uint8_t ff_on2avc_cb_codes_sizes[] = { + 2, 1, 4, 2, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +const int ff_on2avc_cb_elems[] = { + ON2AVC_CB1_2_CODES, ON2AVC_CB1_2_CODES, ON2AVC_CB3_4_CODES, ON2AVC_CB3_4_CODES, + ON2AVC_CB5_6_CODES, ON2AVC_CB5_6_CODES, ON2AVC_CB7_8_CODES, ON2AVC_CB7_8_CODES, ON2AVC_CB9_10_CODES, ON2AVC_CB9_10_CODES, ON2AVC_CB11_CODES, ON2AVC_CB12_CODES, ON2AVC_CB13_CODES, ON2AVC_CB14_CODES, ON2AVC_CB15_CODES, }; diff --git a/libavcodec/on2avcdata.h b/libavcodec/on2avcdata.h index dc7833feff..2395b80e68 100644 --- a/libavcodec/on2avcdata.h +++ b/libavcodec/on2avcdata.h @@ -41,14 +41,11 @@ extern const On2AVCMode ff_on2avc_modes_44[8]; extern const uint32_t ff_on2avc_scale_diff_codes[]; extern const uint8_t ff_on2avc_scale_diff_bits[]; -extern const uint32_t * const ff_on2avc_quad_cb_codes[]; -extern const uint8_t * const ff_on2avc_quad_cb_bits[]; -extern const uint16_t * const ff_on2avc_quad_cb_syms[]; -extern const int ff_on2avc_quad_cb_elems[]; -extern const uint16_t * const ff_on2avc_pair_cb_codes[]; -extern const uint8_t * const ff_on2avc_pair_cb_bits[]; -extern const uint16_t * const ff_on2avc_pair_cb_syms[]; -extern const int ff_on2avc_pair_cb_elems[]; +extern const void * const ff_on2avc_cb_codes[]; +extern const uint8_t * const ff_on2avc_cb_bits[]; +extern const uint16_t * const ff_on2avc_cb_syms[]; +extern const uint8_t ff_on2avc_cb_codes_sizes[]; +extern const int ff_on2avc_cb_elems[]; extern const float ff_on2avc_window_long_32000[1024]; extern const float ff_on2avc_window_long_24000[1024];