From patchwork Mon Mar 8 15:29:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 26270 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 7436644AF6D for ; Mon, 8 Mar 2021 17:30:43 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5DAAB68A7FC; Mon, 8 Mar 2021 17:30:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C4A6468A78B for ; Mon, 8 Mar 2021 17:30:36 +0200 (EET) Received: by mail-ed1-f46.google.com with SMTP id dm26so15263073edb.12 for ; Mon, 08 Mar 2021 07:30: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=QNI9yJAopqI+hIUooYSyXBesyoDLQcoZQg0BLESBDfw=; b=uiFgp0bzpOjM0Q6ZPfgfhkUGpaCqnU3mVowD+96diQH98MHvXF1kfFdlaIXCpsGa1b 8ntx3mhKAL9028Earw2O3c/sUlSWMcuMtEAo6ShH1evCwqYm2dtCV7NgTfA5em/n9SXN RJQ9VrDS8JVdz33abL8QCKbdJIrOmKMxiLmu9izAVE8HIlUR2ayeo89EYMc5zogTCQWf p8lHH3POGbUNsMo6nZC0IHR4k5ENNPC9IgPq5Z9PBvbl4d4FuBVyFXq+l9oFlCiZOynb s9D55oNOoyDplhb3zFDAF8Ad1SkLxjYxlZ2F8dI9oPs7V8mTOW2FHigqievxthq8DMbt hibg== 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=QNI9yJAopqI+hIUooYSyXBesyoDLQcoZQg0BLESBDfw=; b=IU2+bsPlxATdexG7dTcBnnQQfEKm+3Kay1sT5mPd0PehwoHkad5peQ2a6jqee5BfKM UyS5hSDrMmzgAslX59Co8kVcpIlJhiGDBP0FXsvKyjdzc/Z5jD25dSmuHx+cAgW3kYET /S8kBOUjll5CfNgC5nCsBP/QIN+da2Su/soKc5xBNeDLUi4mf23+Ek3mu+NphE4Jd2Pb mdfWjWMt2cTej4K537EMC+f2pIXRi3Q1KyDAWjwXufEK96464ChByvNkHWPPzc7yeJqP IG1TdJEBmPvgFVip/KMQNJn9RG6/8MyVRQ4Npwiev/4zsMxJs7KPcX6ikosu1gt0yk1z eXNw== X-Gm-Message-State: AOAM5310ffHV01f0BuD8pyfZIuUtBp7bRlla/6X/8J8U763x9/DYfs7z pRK7FWvuBiAeTeYXTJn54tz5XpJrfWw= X-Google-Smtp-Source: ABdhPJxrDVQiYr8co2m8KM9RoQ3kF/DlHf/MKEhPXQeFb/hDbTZJxQuxyQQmQg/fXm6XOoWc8MYH+g== X-Received: by 2002:a05:6402:13ca:: with SMTP id a10mr22551550edx.320.1615217436023; Mon, 08 Mar 2021 07:30:36 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id lk12sm6665296ejb.14.2021.03.08.07.30.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Mar 2021 07:30:35 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Mar 2021 16:29:55 +0100 Message-Id: <20210308152957.601419-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210308152957.601419-1-andreas.rheinhardt@gmail.com> References: <20210308152957.601419-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/ylc: Avoid code duplication when creating and freeing 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" Signed-off-by: Andreas Rheinhardt --- libavcodec/ylc.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/libavcodec/ylc.c b/libavcodec/ylc.c index 6dc3e60fec..793d8846b5 100644 --- a/libavcodec/ylc.c +++ b/libavcodec/ylc.c @@ -38,7 +38,7 @@ typedef struct YLCContext { VLC vlc[4]; - uint32_t table[1024]; + uint32_t table[256]; uint8_t *buffer; int buffer_size; BswapDSPContext bdsp; @@ -324,25 +324,18 @@ static int decode_frame(AVCodecContext *avctx, if ((ret = init_get_bits8(&gb, s->buffer, boffset - toffset)) < 0) return ret; - for (x = 0; x < 1024; x++) { + for (int i = 0; i < 4; i++) { + for (x = 0; x < 256; x++) { unsigned len = get_unary(&gb, 1, 31); uint32_t val = ((1U << len) - 1) + get_bits_long(&gb, len); s->table[x] = val; } - ret = build_vlc(avctx, &s->vlc[0], &s->table[0 ]); - if (ret < 0) - return ret; - ret = build_vlc(avctx, &s->vlc[1], &s->table[256]); - if (ret < 0) - return ret; - ret = build_vlc(avctx, &s->vlc[2], &s->table[512]); - if (ret < 0) - return ret; - ret = build_vlc(avctx, &s->vlc[3], &s->table[768]); + ret = build_vlc(avctx, &s->vlc[i], s->table); if (ret < 0) return ret; + } memcpy(s->buffer, avpkt->data + boffset, avpkt->size - boffset); memset(s->buffer + avpkt->size - boffset, 0, AV_INPUT_BUFFER_PADDING_SIZE); @@ -451,10 +444,8 @@ static av_cold int decode_end(AVCodecContext *avctx) { YLCContext *s = avctx->priv_data; - ff_free_vlc(&s->vlc[0]); - ff_free_vlc(&s->vlc[1]); - ff_free_vlc(&s->vlc[2]); - ff_free_vlc(&s->vlc[3]); + for (int i = 0; i < FF_ARRAY_ELEMS(s->vlc); i++) + ff_free_vlc(&s->vlc[i]); av_freep(&s->buffer); s->buffer_size = 0;