From patchwork Tue Nov 10 10:48:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23481 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 F1755449E81 for ; Tue, 10 Nov 2020 12:50:51 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D42E368BF0F; Tue, 10 Nov 2020 12:50:51 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2964568BF24 for ; Tue, 10 Nov 2020 12:50:36 +0200 (EET) Received: by mail-wm1-f65.google.com with SMTP id w24so2553661wmi.0 for ; Tue, 10 Nov 2020 02:50:36 -0800 (PST) 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:reply-to :mime-version:content-transfer-encoding; bh=XKUpVuhPmO6pLszGQhjoSyeVy1gzcB+SMoRitA9UfJk=; b=D12yVn2bCosOHJB1FqR7IJTsNaXJRypHMb5nDrXA2q7d1Fk+F+S1nbojpoMWrsmiza raDImI/YF4oimhcmWmsXnYERDaOLw7LHkel81bXNCSdNvKCEBdt2UzGKZoSkQ913JkGY VpFkhUN0uZ/zJBx8zOyIVUErvsA+/Gk9kSXGrIPQlG1s7Ce6igZT+KrQCyDRj6jkgMVZ XOEX9vHMH+ERF674AX/2DSRpHpm4ksm4HgDwlpbN+ojEpE1SSZ/fcnSRnMdXhZXAhtae RHiTjmaD8DHcjFjp23KbS2/KyhUoYWyiYDRk3jcg84i6PqoExboUYEju1tiDsA0je7VW 5a5g== 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:reply-to:mime-version:content-transfer-encoding; bh=XKUpVuhPmO6pLszGQhjoSyeVy1gzcB+SMoRitA9UfJk=; b=Kt4ET9rWMFEh35VcxItLsXN8ktTR6ajZc+HE49sZ+xUZY3X+2Pqrx3KyCYNwJI6Oo6 fKw+QJe1gr1u0/aXAl0qfoKEAkHsBmi+85aaQFUY0PNFGdBibOwH12tG6+HoN7G3wWuv HGOeIbndbd2eyqOGXnSHXQp5VFeZnX12cAabTFzAxS6CJwYAmq/lPzg9bqokzlI40G0r 4cVOcMpzU2Q+7JE3fdqfFLG/bAmzVQSG4vhjp+UZ0hI2MSzjfVX9LWu0p6Vblnnsf0CI eKe/jCmaXdnB4pIreJ2BdNRTALypi9AxkYcpDSJPXKjzsVNQ18n801XDXu0/S57qd6xD E+vg== X-Gm-Message-State: AOAM533FmNtNLDW2SQuKlnwckyZP6lBgXwNiBOi5720cHxbXYCzIjOxn 5sp/2cu3836GQJGh5mAxPOdkQ1c/xQE= X-Google-Smtp-Source: ABdhPJxxP0tDqGCZRm2YUdFtidqmyjn4WAe1Y5vKMHvlyd7710Es4XjQWiz+H66a3J0wts71uYkRkQ== X-Received: by 2002:a1c:1982:: with SMTP id 124mr4006135wmz.74.1605005435326; Tue, 10 Nov 2020 02:50:35 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id l24sm2572543wmi.7.2020.11.10.02.50.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Nov 2020 02:50:34 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Nov 2020 11:48:14 +0100 Message-Id: <20201110104851.321029-78-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201110104851.321029-1-andreas.rheinhardt@gmail.com> References: <20201110104851.321029-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 077/114] avcodec/vc1: Use symbols table for VLC for Block-level Transform Type 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" Expressions like array[get_vlc2()] can be optimized by using a symbols table if the array is always the same for a given VLC. This requirement is fulfilled for the VLC for the Block-level Transform Type and therefore this commit implements this; switching from ff_init_vlc_sparse() to ff_init_vlc_from_lengths() means that we can also remove the codes table in the process which had the same size as the new symbols table; the array used to translate the get_vlc2() values to the desired form has also been removed, saving space. Signed-off-by: Andreas Rheinhardt --- libavcodec/vc1.c | 7 ++++--- libavcodec/vc1_block.c | 2 +- libavcodec/vc1data.c | 30 +++++++++++++----------------- libavcodec/vc1data.h | 6 +----- 4 files changed, 19 insertions(+), 26 deletions(-) diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 68180dc797..68855ae1d5 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -1611,9 +1611,10 @@ av_cold int ff_vc1_init_common(VC1Context *v) ff_vc1_ttmb_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); ff_vc1_ttblk_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 1]]; ff_vc1_ttblk_vlc[i].table_allocated = vlc_offs[i * 3 + 2] - vlc_offs[i * 3 + 1]; - init_vlc(&ff_vc1_ttblk_vlc[i], VC1_TTBLK_VLC_BITS, 8, - ff_vc1_ttblk_bits[i], 1, 1, - ff_vc1_ttblk_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC); + ff_init_vlc_from_lengths(&ff_vc1_ttblk_vlc[i], VC1_TTBLK_VLC_BITS, 8, + &ff_vc1_ttblk_tabs[i][0][1], 2, + &ff_vc1_ttblk_tabs[i][0][0], 2, 1, + 0, INIT_VLC_USE_NEW_STATIC); ff_vc1_subblkpat_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 2]]; ff_vc1_subblkpat_vlc[i].table_allocated = vlc_offs[i * 3 + 3] - vlc_offs[i * 3 + 2]; ff_init_vlc_from_lengths(&ff_vc1_subblkpat_vlc[i], VC1_SUBBLKPAT_VLC_BITS, 15, diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c index b8987b0015..da58a0738f 100644 --- a/libavcodec/vc1_block.c +++ b/libavcodec/vc1_block.c @@ -1140,7 +1140,7 @@ static int vc1_decode_p_block(VC1Context *v, int16_t block[64], int n, s->bdsp.clear_block(block); if (ttmb == -1) { - ttblk = ff_vc1_ttblk_to_tt[v->tt_index][get_vlc2(gb, ff_vc1_ttblk_vlc[v->tt_index].table, VC1_TTBLK_VLC_BITS, 1)]; + ttblk = get_vlc2(gb, ff_vc1_ttblk_vlc[v->tt_index].table, VC1_TTBLK_VLC_BITS, 1); } if (ttblk == TT_4X4) { subblkpat = ~get_vlc2(gb, ff_vc1_subblkpat_vlc[v->tt_index].table, VC1_SUBBLKPAT_VLC_BITS, 1); diff --git a/libavcodec/vc1data.c b/libavcodec/vc1data.c index e92d9b7310..ed5e680527 100644 --- a/libavcodec/vc1data.c +++ b/libavcodec/vc1data.c @@ -30,13 +30,6 @@ #include "vc1.h" #include "vc1data.h" -/** Table for conversion between TTBLK and TTMB */ -const int ff_vc1_ttblk_to_tt[3][8] = { - { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT }, - { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP }, - { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP } -}; - const int ff_vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 }; /** MV P mode - the 5th element is only used for mode 1 */ @@ -908,17 +901,20 @@ const uint8_t ff_vc1_ttmb_bits[3][16] = { 11 } }; - /* TTBLK (Transform Type per Block) tables */ -const uint8_t ff_vc1_ttblk_codes[3][8] = { - { 0, 1, 3, 5, 16, 17, 18, 19 }, - { 3, 0, 1, 2, 3, 5, 8, 9 }, - { 1, 0, 1, 4, 6, 7, 10, 11 } -}; -const uint8_t ff_vc1_ttblk_bits[3][8] = { - { 2, 2, 2, 3, 5, 5, 5, 5 }, - { 2, 3, 3, 3, 3, 3, 4, 4 }, - { 2, 3, 3, 3, 3, 3, 4, 4 } +const uint8_t ff_vc1_ttblk_tabs[3][8][2] = { + { + { TT_8X4, 2 }, { TT_4X8, 2 }, { TT_8X4_TOP, 5 }, { TT_8X4_BOTTOM, 5 }, + { TT_4X8_RIGHT, 5 }, { TT_4X8_LEFT, 5 }, { TT_4X4, 3 }, { TT_8X8, 2 }, + }, + { + { TT_4X8_RIGHT, 3 }, { TT_4X8_LEFT, 3 }, { TT_4X4, 3 }, { TT_8X4, 3 }, + { TT_8X4_BOTTOM, 4 }, { TT_8X4_TOP, 4 }, { TT_4X8, 3 }, { TT_8X8, 2 }, + }, + { + { TT_4X8, 3 }, { TT_4X4, 3 }, { TT_8X8, 2 }, { TT_8X4_BOTTOM, 3 }, + { TT_8X4, 4 }, { TT_8X4_TOP, 4 }, { TT_4X8_RIGHT, 3 }, { TT_4X8_LEFT, 3 }, + }, }; /* SUBBLKPAT tables, p93-94, reordered and offset by 1 */ diff --git a/libavcodec/vc1data.h b/libavcodec/vc1data.h index 6b141b0f76..92d6374cb2 100644 --- a/libavcodec/vc1data.h +++ b/libavcodec/vc1data.h @@ -34,9 +34,6 @@ #include "vlc.h" -/** Table for conversion between TTBLK and TTMB */ -extern const int ff_vc1_ttblk_to_tt[3][8]; - extern const int ff_vc1_ttfrm_to_tt[4]; /** MV P mode - the 5th element is only used for mode 1 */ @@ -149,8 +146,7 @@ extern const uint16_t ff_vc1_ttmb_codes[3][16]; extern const uint8_t ff_vc1_ttmb_bits[3][16]; /* TTBLK (Transform Type per Block) tables */ -extern const uint8_t ff_vc1_ttblk_codes[3][8]; -extern const uint8_t ff_vc1_ttblk_bits[3][8]; +extern const uint8_t ff_vc1_ttblk_tabs[3][8][2]; /* SUBBLKPAT tables, p93-94, reordered and offset by 1 */ extern const uint8_t ff_vc1_subblkpat_tabs[3][15][2];