From patchwork Fri Nov 20 07:33: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: 23889 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 9947944A412 for ; Fri, 20 Nov 2020 09:51:30 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 04C9F68BCEF; Fri, 20 Nov 2020 09:34:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8C43968BCD9 for ; Fri, 20 Nov 2020 09:34:44 +0200 (EET) Received: by mail-ej1-f65.google.com with SMTP id o21so11523038ejb.3 for ; Thu, 19 Nov 2020 23:34:44 -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=9eIYFmpUyQ6Ix4KgJ7cpCFKR2v3Dfk4bdgr4NZdU9Gg=; b=ZLy2Q0NC7qkoGXiclAPMT2WWvDQuCfMxc2d+AH2iMmId7rTZMSwKrpvkkfIDvFCa9g azlT6+04S06NQsaCb2a7V/yG2JOSYvNWpaDxINJJe3K0BBdp9zWCsq0oYkWJ2eJywHv6 UHe9lXrJ1xGM7zftA+BIMAtY9ONkwsl4kkRMoX+kFGX2yrEwC7GreY+Y0BJz+aJ9z4lb NNvEDMOFafZHNDL57i9UV9QmZe9ElFfL6WfR6tvqYxdJGZMROJ9TZumcDRDC+Z/bY5fp E0JfarncxyF7sba7Mduu0xY6rFPHiMAlIecsPRcT0IlB3CwCoOuN7UT0IadGMxEvjfqm Hqrw== 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=9eIYFmpUyQ6Ix4KgJ7cpCFKR2v3Dfk4bdgr4NZdU9Gg=; b=JdrGUOTE5HT7cA90xdy4XT75Z89R7dfCm0OR7gt9EEzewZK4Snmxq+L4e3yTAathgI EkF2e8rUkKtbPqXJ6ViwedbcH1S7RHcCd+LpiQiZANXCEspsOZwKcn8hm/9xy02Ul/iK QYT2P++t91mzD+Zl2UczyOh0REC4EoUyKpO08dIpDxhoY5gpHjCrAzw18FnH8ArtQMfC hABWVNsTNqtjAh3JfeeOl1KQ9VwGLRGyuewCXbvOIWQTTFofoZFHFDrrXbVlk/2Qyl1h yvIDH8cMCdQ//uUeKVFNktFez9XwJibWPrsk8CkpjhOLcCSLhu/rqLCQsGqWhOOY5G98 qQFg== X-Gm-Message-State: AOAM533Nat/4jI2TXegQrg6k4m7R01sLPTJo2vtGDgwQcIkI6gUKcokn 9qcEpOra/m4orVYnQ+RuU+gDr1P0Gfd9Zw== X-Google-Smtp-Source: ABdhPJxmlJO9ySQEnMg5JU1/8ZiPnfms6uoNQqo4SSzidaHm7SiSt5RNBb4GMfboRf7senmFJvMlqA== X-Received: by 2002:a17:906:7f95:: with SMTP id f21mr30696551ejr.340.1605857683422; Thu, 19 Nov 2020 23:34:43 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id i13sm769110ejv.84.2020.11.19.23.34.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Nov 2020 23:34:42 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 20 Nov 2020 08:33:03 +0100 Message-Id: <20201120073327.820745-39-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201120072116.818090-1-andreas.rheinhardt@gmail.com> References: <20201120072116.818090-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 138/162] avcodec/qdmc: Apply offset when creating VLC 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" Signed-off-by: Andreas Rheinhardt --- libavcodec/qdmc.c | 56 ++++++++++++++--------------------------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/libavcodec/qdmc.c b/libavcodec/qdmc.c index 8b50fbf30a..2c870fcc1b 100644 --- a/libavcodec/qdmc.c +++ b/libavcodec/qdmc.c @@ -151,58 +151,38 @@ static const uint8_t freq_diff[][2] = { { 18, 6 }, { 6, 4 }, { 12, 5 }, { 21, 6 }, { 25, 6 }, }; -static const uint8_t amplitude_diff_bits[] = { - 8, 2, 1, 3, 4, 5, 6, 7, 8, +static const uint8_t amplitude_diff[][2] = { + { 1, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, + { 8, 8 }, { 0, 8 }, { 2, 1 }, }; -static const uint8_t amplitude_diff_codes[] = { - 0xFE, 0x0, 0x1, 0x2, 0x6, 0xE, 0x1E, 0x3E, 0x7E, +static const uint8_t phase_diff[][2] = { + { 2, 2 }, { 1, 2 }, { 3, 4 }, { 7, 4 }, { 6, 5 }, { 5, 6 }, + { 0, 6 }, { 4, 4 }, { 8, 2 }, }; -static const uint8_t phase_diff_bits[] = { - 6, 2, 2, 4, 4, 6, 5, 4, 2, -}; - -static const uint8_t phase_diff_codes[] = { - 0x35, 0x2, 0x0, 0x1, 0xD, 0x15, 0x5, 0x9, 0x3, -}; - -#define INIT_VLC_STATIC_LE(vlc, nb_bits, nb_codes, \ - bits, bits_wrap, bits_size, \ - codes, codes_wrap, codes_size, \ - symbols, symbols_wrap, symbols_size, \ - static_size) \ - do { \ - static VLC_TYPE table[static_size][2]; \ - (vlc)->table = table; \ - (vlc)->table_allocated = static_size; \ - ff_init_vlc_sparse(vlc, nb_bits, nb_codes, \ - bits, bits_wrap, bits_size, \ - codes, codes_wrap, codes_size, \ - symbols, symbols_wrap, symbols_size, \ - INIT_VLC_LE | INIT_VLC_USE_NEW_STATIC); \ - } while (0) - static av_cold void qdmc_init_static_data(void) { int i; INIT_VLC_STATIC_FROM_LENGTHS(&vtable[0], 12, FF_ARRAY_ELEMS(noise_value), &noise_value[0][1], 2, - &noise_value[0][0], 2, 1, 0, INIT_VLC_LE, 4096); + &noise_value[0][0], 2, 1, -1, INIT_VLC_LE, 4096); INIT_VLC_STATIC_FROM_LENGTHS(&vtable[1], 10, FF_ARRAY_ELEMS(noise_segment_length), &noise_segment_length[0][1], 2, - &noise_segment_length[0][0], 2, 1, 0, INIT_VLC_LE, 1024); + &noise_segment_length[0][0], 2, 1, -1, INIT_VLC_LE, 1024); INIT_VLC_STATIC_FROM_LENGTHS(&vtable[2], 12, FF_ARRAY_ELEMS(amplitude), &litude[0][1], 2, - &litude[0][0], 2, 1, 0, INIT_VLC_LE, 4098); + &litude[0][0], 2, 1, -1, INIT_VLC_LE, 4098); INIT_VLC_STATIC_FROM_LENGTHS(&vtable[3], 12, FF_ARRAY_ELEMS(freq_diff), &freq_diff[0][1], 2, - &freq_diff[0][0], 2, 1, 0, INIT_VLC_LE, 4160); - INIT_VLC_STATIC_LE(&vtable[4], 8, FF_ARRAY_ELEMS(amplitude_diff_bits), - amplitude_diff_bits, 1, 1, amplitude_diff_codes, 1, 1, NULL, 0, 0, 256); - INIT_VLC_STATIC_LE(&vtable[5], 6, FF_ARRAY_ELEMS(phase_diff_bits), - phase_diff_bits, 1, 1, phase_diff_codes, 1, 1, NULL, 0, 0, 64); + &freq_diff[0][0], 2, 1, -1, INIT_VLC_LE, 4160); + INIT_VLC_STATIC_FROM_LENGTHS(&vtable[4], 8, FF_ARRAY_ELEMS(amplitude_diff), + &litude_diff[0][1], 2, + &litude_diff[0][0], 2, 1, -1, INIT_VLC_LE, 256); + INIT_VLC_STATIC_FROM_LENGTHS(&vtable[5], 6, FF_ARRAY_ELEMS(phase_diff), + &phase_diff[0][1], 2, + &phase_diff[0][0], 2, 1, -1, INIT_VLC_LE, 64); for (i = 0; i < 512; i++) sin_table[i] = sin(2.0f * i * M_PI * 0.001953125f); @@ -351,9 +331,7 @@ static int qdmc_get_vlc(GetBitContext *gb, VLC *table, int flag) if (get_bits_left(gb) < 1) return AVERROR_INVALIDDATA; v = get_vlc2(gb, table->table, table->bits, 2); - if (v) - v = v - 1; - else + if (v < 0) v = get_bits(gb, get_bits(gb, 3) + 1); if (flag) {