From patchwork Sat Aug 1 13:46:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21427 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 DDDAC44AA8D for ; Sat, 1 Aug 2020 16:49:37 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B365068BA3C; Sat, 1 Aug 2020 16:49:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f65.google.com (mail-ed1-f65.google.com [209.85.208.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1AFA668B96A for ; Sat, 1 Aug 2020 16:49:31 +0300 (EEST) Received: by mail-ed1-f65.google.com with SMTP id df16so7874489edb.9 for ; Sat, 01 Aug 2020 06:49:31 -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=fpDC9NNmBqpZryhDcxWRYUb8OWbSUtSOnIz3EKfPTmk=; b=WqxWiCmxbKgizU36BYaJjVw/3kGHTgsXATbQpAL5/VJXShMUStWjhk9/eGU3Kkv0td ccmEovfl4p5/5/TDWMG3zoSh1aiBXngjD+byDalRjNrVLQ0H3YRAXMOBKuEe4KP7dbwu vtYpcZFT9RQo2Jbiej5aQ+xV6E1SGr0RpmFZnyah60AzihO5dWnZKLlnERznwa4iYwvJ r4SPI0IzpgdnCPpQ1FeMNcydFDxGGDmt7XVYWeW480xcxJDO1qJSwnAKxWtr8fOxq0zh kc/iWS79S52f0IFGbhrA1FsI6SBeP9qEv6wFBJQwyOrGwzNmHCZI3ko8Rd4gHg/23I5e k/VA== 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=fpDC9NNmBqpZryhDcxWRYUb8OWbSUtSOnIz3EKfPTmk=; b=Jti2lFQ6NHm3CEJFlKQt6cEstcTigJtcRRA8GxFNF3qA8NYhsIyc99EjxxCEgkGdCM e4h1+jWDAbNioLZ+Bb02uPRNpN54J8zmSOxB5wg5+3hIesNZxYKGg9W26LmSuEuVkPSV rVMO75etHelxrf6J1T/TevzzxPANA+vyRD9uOykPq1284aT2H6vwBflLbDnKnfgLGqlT WvuBNgKcHBKgcjmLSP5Kxjrr1svEi4g7jeN5Nk+4o4O8A7BFLrDDvsyLzK7u3cZctAwg rTuQJbQG9TH2VuDbDwFW+/dR69EyCp4Eqgy4y6/Q3biQ0fTGveYfhcpGAzu8ciCrV8g5 jDNg== X-Gm-Message-State: AOAM533umVONtUAVSMfQA5X54cRyJyDYVxsOGHM1Mz84OujAZUnMJB0C r9sjQqdYNYakuCyyrH4Vb2K8qjpm X-Google-Smtp-Source: ABdhPJyFhdY9abEfiJ8Cp1N758fEKE3nIDVpZGbdcBwcdD5wVYbKOesC1Rj9xRcDQ/K7RAkrhHPGsg== X-Received: by 2002:aa7:dc44:: with SMTP id g4mr8379107edu.273.1596289770296; Sat, 01 Aug 2020 06:49:30 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id b24sm12178501edn.33.2020.08.01.06.49.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Aug 2020 06:49:29 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Aug 2020 15:46:53 +0200 Message-Id: <20200801134704.3647-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200731112241.8948-1-andreas.rheinhardt@gmail.com> References: <20200731112241.8948-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/21] avcodec/smacker: Use better nb_codes estimate when initializing 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" Using the real number of read codes allows to leave a loop in ff_init_vlc_sparse earlier; notice that all codes not explicitly set by reading data have been set to zero earlier (i.e. they are zero-length codes) and such codes are ignored by ff_init_vlc_sparse. This improves performance: When compiled with GCC 9, the time spent on one call to smka_decode_frame() for the sample from ticket #2425 decreased from 2195367 decicycles to 2068389 decicycles. For Clang 9, it improved from 1602075 to 1534188 decicycles. These tests have been performed 20 times and each times the input file has been looped 32 times to get a sufficient number of frames. Signed-off-by: Andreas Rheinhardt --- libavcodec/smacker.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index e6b163722a..27de30f0e1 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -214,7 +214,7 @@ static int smacker_decode_header_tree(SmackVContext *smk, GetBitContext *gb, int goto error; skip_bits1(gb); if (h[i].current > 1) { - err = init_vlc(&vlc[i], SMKTREE_BITS, h[i].length, + err = init_vlc(&vlc[i], SMKTREE_BITS, h[i].current, INIT_VLC_DEFAULT_SIZES(h[i].lengths), INIT_VLC_DEFAULT_SIZES(h[i].bits), INIT_VLC_LE); @@ -657,7 +657,7 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data, goto error; skip_bits1(&gb); if(h[i].current > 1) { - ret = init_vlc(&vlc[i], SMKTREE_BITS, h[i].length, + ret = init_vlc(&vlc[i], SMKTREE_BITS, h[i].current, h[i].lengths, sizeof(int), sizeof(int), h[i].bits, sizeof(uint32_t), sizeof(uint32_t), INIT_VLC_LE); if (ret < 0) {