From patchwork Mon Jun 26 21:57:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 42305 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3805:b0:126:ac68:d900 with SMTP id p5csp1467079pzf; Mon, 26 Jun 2023 14:58:07 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7/t99TncDiGbFtgjYnL3JgPsWC2ACBAQM3SJnsclTYFCTkfQkNyll5oqsZDjt9HJdAtij9 X-Received: by 2002:a17:907:7ea1:b0:98e:886:f27f with SMTP id qb33-20020a1709077ea100b0098e0886f27fmr6651016ejc.20.1687816686701; Mon, 26 Jun 2023 14:58:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687816686; cv=none; d=google.com; s=arc-20160816; b=cw3brRTD5SzdWoyfe7202quqS5i4/lcVzWF23BtqP8bbjvlSyEgmPKiSEs+/rrK8wA 89WF7cnK+pZbCsh5+10Quf0erw2Y8jzHYgE1T4Ivazoo95GXwQv2t1oVjBY/KOm42N14 zmpZLJK3LiqaOt2WWp4OpFnKMVmi2MgXzdiXqRo0/KQ7TfkEOSCXBvJMuPH87OCSfIWC ZaDcck6dsS0ugC1BoyltrfLpb5TYqfj5CCRwH1oQqA2rh+WplE7RoMSFfbXfRM1WcYx/ dlOa5QOuupfzlfzeQUH9eM3Oy8TPzxsGORWIeiCr+W8SwEm9U0p2nfC0WO7wIqiT6DR9 bVUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=9YLjgw9nkDwroKBYmfJnDgd2HsrRIz763nBKXCNCruM=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=CXWI8hxXwJ1YzHRV/I74TFLAVpchL3qcz/Gdtem9ShqSrrB3JYtH+OUA9G3vabYh8d No+bML/ynfnijs+S+7s1sApEyeiab8LEmFRLunePWz2QfFZXTeoo6ghvWvyPDSYheqrX 2t0otNz5rEC+GvQnmkVanRYSA2Zgtgq48o7xjwTZupQ1zLSvPZoDWb37wPow8+KjqF9u aois6OfJpw35qI6N4Fh61BVT8x5+D/7uiJsawHX/SIrqax1C8MXxZqrYlqmIqLPD2edi O8j9lKLLL25nf5GOwwDG1XMh8GjNKsAMPlF7q+gmW/DzPwuTFEU1GVqWlETelWMiyB20 7/uQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=qNdf2T8a; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id bq19-20020a170906d0d300b00988db6c805fsi3351136ejb.253.2023.06.26.14.58.05; Mon, 26 Jun 2023 14:58:06 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=qNdf2T8a; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5395E68BF5C; Tue, 27 Jun 2023 00:58:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f46.google.com (mail-ua1-f46.google.com [209.85.222.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A25A68BF8D for ; Tue, 27 Jun 2023 00:57:55 +0300 (EEST) Received: by mail-ua1-f46.google.com with SMTP id a1e0cc1a2514c-7943bfaed0dso386587241.0 for ; Mon, 26 Jun 2023 14:57:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687816673; x=1690408673; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=V6LFFctYV1ICTgXUCHLPYfRgesmheh7iVwXHwTShi5c=; b=qNdf2T8aYGAYkyE1Mnkc5thGvNlCeMA55iiUhr2Od0TXkn/kMnrDFbNf/hRxwE3s0W /ZUpA+lRpZxeaUwMQNGkQtBeQ0P+nuUUhRza3DP7SohAF+YN1bvuket0mneLZs7R+A1u i5gZc8mjVw5OHVz7zi9Eus8PBvh9GV8ucxYDL/Ai5ZjaJA2j9/YCmRfe25g/jopeePtY /JS9/MTpF/Jn6xdS87Iguk2TZ0KaHsE65uFhpoY5V1RlaF94ZdGvzG/9DykZbhJpTs2r s+n641s9kMUXafdjnzF7qGJ/LmihJG51h+8QD1SbRgzVdOfzB8PoUxc9QCgm/S4dd2uI d4Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687816673; x=1690408673; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=V6LFFctYV1ICTgXUCHLPYfRgesmheh7iVwXHwTShi5c=; b=Q3VagMemslYvTIzukGi0OcPSpqf00futhhnvTDlq6DB+8WIE+l0ZAq2p7+HSu2q5er 5w4Oa7CxV57dSQNSkvmSjyLFnMk10Bm+YdbotF5sB1cFGonBzKo24aGYjFcKxquwOKFe STO0RGHh1bfsTou/J/2Bm5WeP313ecjf+yffoW7bc922edAJ0USM9jXj1QCwFjkH9xW7 A1FgtZ48amrluPfcUiet25QCcXZsITQWV9gsTp8Gprbx1F3gdcLP0wBPIgb6ROlPwA2Z VBUFC5tGuMaaDSK+JbRp5B9b4yaRuRxWHHKqjKQd2wZNa/U1dC+qNvOTbXME23NVujz5 ykKQ== X-Gm-Message-State: AC+VfDxrHE7crxcwL5WLqGuLG5IslmZXq6XYHVCRfAHAFmJa1J2/36oN hExnux2gnevjbRT+Tc9+nslBb4lvi0WSyng/16duvAnF X-Received: by 2002:a05:6102:3025:b0:440:cde6:b37e with SMTP id v5-20020a056102302500b00440cde6b37emr10847413vsa.33.1687816673488; Mon, 26 Jun 2023 14:57:53 -0700 (PDT) MIME-Version: 1.0 From: Paul B Mahol Date: Mon, 26 Jun 2023 23:57:21 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] avcodec/vlc: auto calculate depth X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uw7iN49Vv6J2 Patch attached. From e1ba15ab470752ebe937bc3865fb0dce99da1921 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sat, 24 Jun 2023 10:02:35 +0200 Subject: [PATCH] libavcodec/vlc: auto calculate depth Signed-off-by: Paul B Mahol --- libavcodec/vlc.c | 9 +++++++-- libavcodec/vlc.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libavcodec/vlc.c b/libavcodec/vlc.c index 96f2b28c7e..cfbf4717eb 100644 --- a/libavcodec/vlc.c +++ b/libavcodec/vlc.c @@ -276,7 +276,7 @@ int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, int flags) { VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; - int j, ret; + int j, ret, max_len = 0; ret = vlc_common_init(vlc, nb_bits, nb_codes, &buf, flags); if (ret < 0) @@ -296,6 +296,7 @@ int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, av_free(buf); \ return AVERROR(EINVAL); \ } \ + max_len = FFMAX(max_len, len); \ buf[j].bits = len; \ GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \ if (buf[j].code >= (1LL<depth = (max_len + nb_bits - 1) / nb_bits; return vlc_common_end(vlc, nb_bits, nb_codes, buf, flags, localbuf); } @@ -332,7 +334,7 @@ int ff_init_vlc_from_lengths(VLC *vlc, int nb_bits, int nb_codes, { VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; uint64_t code; - int ret, j, len_max = FFMIN(32, 3 * nb_bits); + int ret, j, len_max = FFMIN(32, 3 * nb_bits), max_len = 0; ret = vlc_common_init(vlc, nb_bits, nb_codes, &buf, flags); if (ret < 0) @@ -344,6 +346,7 @@ int ff_init_vlc_from_lengths(VLC *vlc, int nb_bits, int nb_codes, if (len > 0) { unsigned sym; + max_len = FFMAX(max_len, len); buf[j].bits = len; if (symbols) GET_DATA(sym, symbols, i, symbols_wrap, symbols_size) @@ -353,6 +356,7 @@ int ff_init_vlc_from_lengths(VLC *vlc, int nb_bits, int nb_codes, buf[j++].code = code; } else if (len < 0) { len = -len; + max_len = FFMAX(max_len, len); } else continue; if (len > len_max || code & ((1U << (32 - len)) - 1)) { @@ -365,6 +369,7 @@ int ff_init_vlc_from_lengths(VLC *vlc, int nb_bits, int nb_codes, goto fail; } } + vlc->depth = (max_len + nb_bits - 1) / nb_bits; return vlc_common_end(vlc, nb_bits, j, buf, flags, localbuf); fail: if (buf != localbuf) diff --git a/libavcodec/vlc.h b/libavcodec/vlc.h index e63c484755..71127b0618 100644 --- a/libavcodec/vlc.h +++ b/libavcodec/vlc.h @@ -30,6 +30,7 @@ typedef struct VLCElem { typedef struct VLC { int bits; + int depth; VLCElem *table; int table_size, table_allocated; } VLC; -- 2.39.1