From patchwork Tue Nov 10 10:47:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23527 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 16F2244AA20 for ; Tue, 10 Nov 2020 13:00:42 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 646C168BED4; Tue, 10 Nov 2020 12:50:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BCA4068BE8F for ; Tue, 10 Nov 2020 12:50:06 +0200 (EET) Received: by mail-wr1-f68.google.com with SMTP id l1so7738848wrb.9 for ; Tue, 10 Nov 2020 02:50:06 -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=XXbhNYxbk0WU51B5AzuGBs9lWXTHK76ROC1gn4Fe5U8=; b=Ne4Arj/7r2Y18ZzWdI4ARERiMyEku6IG46Nmm/TEZ8/7P9ZtakAFYPhbD8GbfsenO+ Uqfe/dosscJfAAbeZ8wD70oYD0m0bU55fw4VeYzbJ0YIPUQbaqpQ5mOmkNcTTP9GTKu0 dRLtZccChwZPOzqiQboZtEReb+n5KnLRwaGNmdK3QrpedqQpc/M3g6JqrgYcte3Na6k+ Gahfb6JKGwE994oZTAvpg3v0e8CuS9q+lTrEwWsYYGhwzLlByRi+pWOM0VARy43kKzbb R6jMdUx6sWrM9cJ/ErOejjiFV66ywabeH1AeZO5Dr0IIaqGvf1oGmwDaz37a03mB2v0o qPhg== 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=XXbhNYxbk0WU51B5AzuGBs9lWXTHK76ROC1gn4Fe5U8=; b=d7X0mdsclISEA50LPg83l/U7tCMlxZDZcf7p50e8/PwOxLQvVhBqcUGw1x/XzcK4W6 GmWijl721rSpQox2lFTOihMb8n0GwjEpuysJNq8+/gY6Ks7+xP2Sqyd+hFmToD7QAc+L aB+7NYX2UV11K5V3zQxcVKiFgSC816hbDPvc5zXoUZ7me8Azr0YoqeOXack2SaOSQd8F W1DCO17Wlq22fKPInd7sDT6zXHHeDZkw0DpSL+XFP9KmDE/VGAuF415lhvy8l6Nk9aPd JVMFCYfGOQhqhXaUT1bDhOABedSAJUOKd92FuFy9jmqhKihJo5sxWqvTO7YcdnJwcY+M 4KCg== X-Gm-Message-State: AOAM530LS0VsMAqXOikuLM4QGPmcwwdlm35XU9ZKFjKLe3v44nR4a7sB k2+4dZwuZIv6XuGgNQ8ck1owOWIOSsE= X-Google-Smtp-Source: ABdhPJxuJXUBVNmsoIVFqJa+qw+qI0hICf+cB6dYadKKBbegq30IuoE94eZc5GUE87DlFTO+yjnW7w== X-Received: by 2002:adf:fc84:: with SMTP id g4mr15352386wrr.202.1605005405828; Tue, 10 Nov 2020 02:50:05 -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.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Nov 2020 02:50:05 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Nov 2020 11:47:43 +0100 Message-Id: <20201110104851.321029-47-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 046/114] avcodec/mobiclip: Avoid redundant codes table to initialize 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" If both codes, lengths and symbols tables are ordered so that the codes are sorted from left to right in the tree, the codes can be easily derived from the lengths and therefore become redundant. This is exploited in this commit to remove the codes tables for the mobiclip decoder; notice that tables for the run-length VLC were already ordered correctly. Signed-off-by: Andreas Rheinhardt --- libavcodec/mobiclip.c | 203 +++++++++++++++--------------------------- 1 file changed, 74 insertions(+), 129 deletions(-) diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c index 42d33cf6a5..cb17832898 100644 --- a/libavcodec/mobiclip.c +++ b/libavcodec/mobiclip.c @@ -128,19 +128,6 @@ static const uint8_t bits0[] = { 6, 6, 6, 6, 6, 6, 5, 5, 5, 4, 2, 3, 4, 4, }; -static const uint8_t codes0[] = { - 0x0, 0x4, 0x5, 0x6, 0x7, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, - 0xB, 0xC, 0xD, 0xE, 0xF, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, - 0x26, 0x27, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x3, 0x20, - 0x21, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, - 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, - 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x15, 0xB, 0xC, 0xD, 0x7, 0x2, 0x6, 0xE, 0xF, -}; - static const uint16_t syms0[] = { 0x0, 0x822, 0x803, 0xB, 0xA, 0xB81, 0xB61, 0xB41, 0xB21, 0x122, 0x102, 0xE2, 0xC2, 0xA2, 0x63, 0x43, 0x24, 0xC, 0x25, 0x2E1, 0x301, @@ -172,122 +159,82 @@ static const uint8_t mv_len[16] = static const uint8_t mv_bits[16][10] = { - { 1, 3, 3, 4, 4, 5, 5, 5, 6, 6 }, - { 2, 2, 3, 3, 3, 4, 5, 5 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 1, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 3, 4, 5, 5 }, - { 2, 3, 3, 3, 3, 3, 4, 4 }, + { 3, 4, 5, 5, 3, 5, 6, 6, 4, 1 }, + { 2, 3, 4, 5, 5, 2, 3, 3 }, + { 2, 4, 4, 3, 3, 4, 4, 2 }, + { 1, 4, 4, 3, 4, 4, 3 }, + { 3, 3, 2, 4, 5, 5, 3, 2 }, + { 3, 4, 4, 3, 3, 3, 3, 2 }, { 1, 3, 3, 4, 4, 4, 5, 5 }, - { 1, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, + { 1, 4, 4, 3, 3, 4, 4 }, + { 2, 4, 4, 3, 3, 4, 4, 2 }, { 1, 3, 3, 4, 4, 4, 5, 5 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 3, 4, 4 }, - { 1, 3, 3, 4, 4, 4, 4 }, - { 1, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 3, 4, 4 }, - { 2, 2, 3, 3, 3, 3 }, -}; - -static const uint8_t mv_codes[16][10] = -{ - { 1, 0, 2, 2, 7, 6, 7, 12, 26, 27 }, - { 0, 2, 2, 6, 7, 6, 14, 15 }, - { 0, 3, 3, 4, 4, 5, 10, 11 }, - { 0, 5, 7, 8, 9, 12, 13 }, - { 1, 3, 0, 1, 5, 8, 18, 19 }, - { 3, 0, 2, 3, 4, 5, 2, 3 }, - { 0, 4, 5, 12, 13, 14, 30, 31 }, - { 0, 5, 6, 8, 9, 14, 15 }, - { 0, 3, 3, 4, 4, 5, 10, 11 }, - { 0, 4, 5, 12, 13, 14, 30, 31 }, - { 0, 3, 2, 5, 6, 7, 8, 9 }, - { 0, 3, 2, 3, 5, 8, 9 }, - { 0, 5, 6, 8, 9, 14, 15 }, - { 0, 5, 6, 8, 9, 14, 15 }, - { 0, 3, 2, 3, 5, 8, 9 }, - { 0, 3, 2, 3, 4, 5 }, + { 2, 3, 4, 4, 4, 4, 3, 2 }, + { 2, 3, 3, 4, 4, 3, 2 }, + { 1, 4, 4, 3, 3, 4, 4 }, + { 1, 4, 4, 3, 3, 4, 4 }, + { 2, 3, 3, 4, 4, 3, 2 }, + { 2, 3, 3, 3, 3, 2 }, }; static const uint8_t mv_syms[16][10] = { - { 0, 8, 1, 2, 9, 3, 6, 7, 5, 4 }, - { 9, 1, 2, 8, 0, 3, 5, 4 }, - { 0, 1, 2, 9, 5, 4, 3, 8 }, - { 1, 2, 0, 5, 4, 8, 3 }, - { 8, 1, 2, 9, 0, 3, 5, 4 }, - { 1, 3, 2, 9, 8, 0, 5, 4 }, + { 8, 2, 3, 6, 1, 7, 5, 4, 9, 0 }, + { 9, 2, 3, 5, 4, 1, 8, 0 }, + { 0, 5, 4, 2, 9, 3, 8, 1 }, + { 1, 5, 4, 2, 8, 3, 0 }, + { 2, 9, 8, 3, 5, 4, 0, 1 }, + { 3, 5, 4, 2, 9, 8, 0, 1 }, { 1, 2, 0, 9, 8, 3, 5, 4 }, - { 1, 2, 0, 8, 5, 4, 3 }, - { 0, 1, 2, 8, 5, 4, 3, 9 }, + { 1, 8, 5, 2, 0, 4, 3 }, + { 0, 5, 4, 2, 8, 3, 9, 1 }, { 1, 2, 0, 9, 8, 3, 5, 4 }, - { 0, 1, 3, 2, 9, 8, 5, 4 }, - { 0, 1, 4, 3, 2, 8, 5 }, - { 1, 2, 0, 5, 4, 9, 3 }, - { 1, 2, 0, 9, 5, 4, 3 }, - { 0, 1, 5, 3, 2, 9, 4 }, - { 0, 1, 4, 5, 3, 2 }, + { 0, 3, 9, 8, 5, 4, 2, 1 }, + { 0, 4, 3, 8, 5, 2, 1 }, + { 1, 5, 4, 2, 0, 9, 3 }, + { 1, 9, 5, 2, 0, 4, 3 }, + { 0, 5, 3, 9, 4, 2, 1 }, + { 0, 4, 5, 3, 2, 1 }, }; static const uint8_t mv_bits_mods[16][10] = { - { 2, 2, 3, 3, 4, 4, 5, 5, 5, 5 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 1, 3, 3, 3, 4, 5, 5 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 2, 3, 4, 5, 5 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 3, 4, 5, 5 }, - { 2, 2, 3, 3, 3, 4, 4 }, - { 1, 3, 3, 4, 4, 4, 4 }, - { 2, 2, 3, 3, 3, 4, 4 }, - { 2, 2, 3, 3, 3, 4, 4 }, - { 2, 2, 3, 3, 3, 3 }, -}; - -static const uint8_t mv_codes_mods[16][10] = -{ - { 0, 3, 2, 3, 9, 10, 16, 17, 22, 23 }, - { 0, 3, 2, 4, 6, 7, 10, 11 }, - { 1, 3, 0, 5, 2, 3, 8, 9 }, - { 0, 4, 6, 7, 10, 22, 23 }, - { 0, 3, 3, 4, 4, 5, 10, 11 }, - { 0, 3, 2, 5, 6, 7, 8, 9 }, - { 0, 3, 2, 5, 6, 7, 8, 9 }, - { 0, 1, 3, 4, 10, 22, 23 }, - { 0, 3, 2, 4, 6, 7, 10, 11 }, - { 0, 3, 3, 5, 4, 5, 8, 9 }, - { 0, 3, 2, 3, 5, 9, 16, 17 }, - { 0, 3, 2, 4, 5, 6, 7 }, - { 0, 5, 6, 8, 9, 14, 15 }, - { 0, 3, 2, 4, 5, 6, 7 }, - { 0, 3, 2, 4, 5, 6, 7 }, - { 1, 2, 0, 1, 6, 7 }, + { 2, 3, 3, 5, 5, 4, 4, 5, 5, 2 }, + { 2, 3, 4, 4, 3, 4, 4, 2 }, + { 3, 4, 4, 2, 4, 4, 3, 2 }, + { 1, 3, 4, 5, 5, 3, 3 }, + { 2, 4, 4, 3, 3, 4, 4, 2 }, + { 2, 3, 4, 4, 4, 4, 3, 2 }, + { 2, 3, 4, 4, 4, 4, 3, 2 }, + { 2, 2, 3, 4, 5, 5, 2 }, + { 2, 3, 4, 4, 3, 4, 4, 2 }, + { 2, 4, 4, 3, 4, 4, 3, 2 }, + { 2, 3, 3, 5, 5, 4, 3, 2 }, + { 2, 3, 4, 4, 3, 3, 2 }, + { 1, 4, 4, 3, 3, 4, 4 }, + { 2, 3, 4, 4, 3, 3, 2 }, + { 2, 3, 4, 4, 3, 3, 2 }, + { 3, 3, 2, 2, 3, 3 }, }; static const uint8_t mv_syms_mods[16][10] = { - { 1, 0, 8, 9, 2, 7, 4, 3, 5, 6 }, - { 0, 1, 9, 2, 5, 4, 3, 8 }, - { 0, 1, 3, 2, 9, 5, 4, 8 }, - { 1, 3, 2, 0, 4, 8, 5 }, - { 0, 1, 8, 2, 5, 4, 3, 9 }, - { 0, 1, 3, 2, 5, 9, 4, 8 }, - { 0, 1, 3, 2, 9, 5, 8, 4 }, - { 0, 2, 1, 3, 4, 8, 5 }, - { 0, 1, 3, 2, 8, 4, 5, 9 }, - { 2, 1, 3, 0, 8, 9, 5, 4 }, - { 0, 1, 4, 3, 2, 5, 8, 9 }, - { 0, 1, 4, 3, 2, 8, 5 }, - { 1, 2, 0, 9, 4, 5, 3 }, - { 2, 1, 4, 3, 0, 9, 5 }, - { 0, 1, 4, 3, 2, 9, 5 }, - { 1, 0, 5, 4, 3, 2 }, + { 1, 8, 9, 4, 3, 2, 7, 5, 6, 0 }, + { 0, 9, 5, 4, 2, 3, 8, 1 }, + { 3, 9, 5, 0, 4, 8, 2, 1 }, + { 1, 3, 4, 8, 5, 2, 0 }, + { 0, 5, 4, 8, 2, 3, 9, 1 }, + { 0, 3, 5, 9, 4, 8, 2, 1 }, + { 0, 3, 9, 5, 8, 4, 2, 1 }, + { 0, 2, 3, 4, 8, 5, 1 }, + { 0, 3, 8, 4, 2, 5, 9, 1 }, + { 2, 8, 9, 3, 5, 4, 0, 1 }, + { 0, 4, 3, 8, 9, 5, 2, 1 }, + { 0, 4, 8, 5, 3, 2, 1 }, + { 1, 9, 4, 2, 0, 5, 3 }, + { 2, 4, 9, 5, 3, 0, 1 }, + { 0, 4, 9, 5, 3, 2, 1 }, + { 5, 4, 1, 0, 3, 2 }, }; typedef struct BlockXY { @@ -351,30 +298,28 @@ static av_cold int mobiclip_init(AVCodecContext *avctx) return AVERROR(ENOMEM); } - INIT_VLC_SPARSE_STATIC(&rl_vlc[0], MOBI_RL_VLC_BITS, 104, - bits0, sizeof(*bits0), sizeof(*bits0), - codes0, sizeof(*codes0), sizeof(*codes0), + INIT_VLC_STATIC_FROM_LENGTHS(&rl_vlc[0], MOBI_RL_VLC_BITS, 104, + bits0, sizeof(*bits0), syms0, sizeof(*syms0), sizeof(*syms0), - 1 << MOBI_RL_VLC_BITS); - INIT_VLC_SPARSE_STATIC(&rl_vlc[1], MOBI_RL_VLC_BITS, 104, - bits0, sizeof(*bits0), sizeof(*bits0), - codes0, sizeof(*codes0), sizeof(*codes0), + 0, 0, 1 << MOBI_RL_VLC_BITS); + INIT_VLC_STATIC_FROM_LENGTHS(&rl_vlc[1], MOBI_RL_VLC_BITS, 104, + bits0, sizeof(*bits0), syms1, sizeof(*syms1), sizeof(*syms1), - 1 << MOBI_RL_VLC_BITS); + 0, 0, 1 << MOBI_RL_VLC_BITS); for (int j = 0; j < 16; j++) { static VLC_TYPE vlc_buf[2 * 16 << MOBI_MV_VLC_BITS][2]; mv_vlc[0][j].table = &vlc_buf[2 * j << MOBI_MV_VLC_BITS]; mv_vlc[0][j].table_allocated = 1 << MOBI_MV_VLC_BITS; - ff_init_vlc_sparse(&mv_vlc[0][j], MOBI_MV_VLC_BITS, mv_len[j], - mv_bits_mods[j], sizeof(*mv_bits_mods[j]), sizeof(*mv_bits_mods[j]), - mv_codes_mods[j], sizeof(*mv_codes_mods[j]), sizeof(*mv_codes_mods[j]), - mv_syms_mods[j], sizeof(*mv_syms_mods[j]), sizeof(*mv_syms_mods[j]), INIT_VLC_USE_NEW_STATIC); + ff_init_vlc_from_lengths(&mv_vlc[0][j], MOBI_MV_VLC_BITS, mv_len[j], + mv_bits_mods[j], sizeof(*mv_bits_mods[j]), + mv_syms_mods[j], sizeof(*mv_syms_mods[j]), + sizeof(*mv_syms_mods[j]), 0, INIT_VLC_USE_NEW_STATIC); mv_vlc[1][j].table = &vlc_buf[(2 * j + 1) << MOBI_MV_VLC_BITS]; mv_vlc[1][j].table_allocated = 1 << MOBI_MV_VLC_BITS; - ff_init_vlc_sparse(&mv_vlc[1][j], MOBI_MV_VLC_BITS, mv_len[j], - mv_bits[j], sizeof(*mv_bits[j]), sizeof(*mv_bits[j]), - mv_codes[j], sizeof(*mv_codes[j]), sizeof(*mv_codes[j]), - mv_syms[j], sizeof(*mv_syms[j]), sizeof(*mv_syms[j]), INIT_VLC_USE_NEW_STATIC); + ff_init_vlc_from_lengths(&mv_vlc[1][j], MOBI_MV_VLC_BITS, mv_len[j], + mv_bits[j], sizeof(*mv_bits[j]), + mv_syms[j], sizeof(*mv_syms[j]), sizeof(*mv_syms[j]), + 0, INIT_VLC_USE_NEW_STATIC); } return 0;