From patchwork Tue Nov 3 17:57:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23365 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 1E01D44B434 for ; Tue, 3 Nov 2020 19:58:12 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EF47C68B6CB; Tue, 3 Nov 2020 19:58:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DB4B668B66C for ; Tue, 3 Nov 2020 19:58:03 +0200 (EET) Received: by mail-wr1-f67.google.com with SMTP id g12so19438073wrp.10 for ; Tue, 03 Nov 2020 09:58:03 -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 :mime-version:content-transfer-encoding; bh=5QG8RPeuqV3wZR4UWy3Aot7wMPR+AUpNnGo/4nJd25A=; b=LE+RELXQ7dlxdX419O49BfEAe6/XIym+IDXyA+LjPujfDsJHaC5Z8hQuINycBLB+Io 2kX6KKgmjN1Ji0CeXo6ffY4Cat8GH5kc6B+4wTVu7vgpqVsLqbVdqUTgkuERyaJQ18SJ A/9RDGRqiIFdNdtr/Bs6Q4R8nY4+5E8ih4lPe0bxMJS1SDO9YgNCvNrnHIwgj59v07aE IQzHwntebXeC0nwbKN7GqCIitYSvIV4xkFBKTM8ra6TZWwBhvyNOSmrPAyHeDhZCX5NY woGff7KPvDbPlox+eMfBSPW1vYlMFaJvPE24wNLwnSXgzIA7gvUHMh7PeZM/Yp/JT+Gz UYdg== 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=5QG8RPeuqV3wZR4UWy3Aot7wMPR+AUpNnGo/4nJd25A=; b=T6IZ8E0BoPpJw7UR4dBDbTdxTbxb/kBK+sAsHEj5bbX60BOGHSPVwezCk9UM3jY0Fx mq3Fc8LRwlcvO8yyahowhBn8iz6lN33guaaBN2sP0eSv9JTNx7UksP7wjZDGwo+D4xnp GRTjeOPuk2Pm5XrjhlnuMQVCtMn6OmbA7YQUdls3TZwxZ80R6Fw/dAfwexSf/krE5HWt Aq6c1Be1MRvoW//Bynr3Dl25Za6Axg9ZoTsuj3xWOTSVNFFFV3q9TO4mWMKowIwe68eM Vs7LxB72rMkN1UrYYEVcthBUAzYNHXz/R+WUSaA/mZwPgvn0EPK37ss8OZY63xnQamCH tLzA== X-Gm-Message-State: AOAM5320e63GPU5vdYogvVEG09AWLsLv46eAc0HcFbSXngDcAdDtY97I 1RNOjvJDaQCQEHJe4fnsNs9x+k94MWk= X-Google-Smtp-Source: ABdhPJw4Orayt2UkzhaPeSDPpDmeEHqr3RWYI1bznKe+nP8fg61KejXFsylNc1D0al1UHBOmAiFMrQ== X-Received: by 2002:adf:cd01:: with SMTP id w1mr27591149wrm.298.1604426283067; Tue, 03 Nov 2020 09:58:03 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id n8sm3586453wmc.11.2020.11.03.09.58.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Nov 2020 09:58:02 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 Nov 2020 18:57:35 +0100 Message-Id: <20201103175735.170080-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201103175735.170080-1-andreas.rheinhardt@gmail.com> References: <20201103175735.170080-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] avcodec/truemotion2: Allocate buffers together 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" Reduces the number of allocations and frees. Signed-off-by: Andreas Rheinhardt --- libavcodec/truemotion2.c | 46 +++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c index a90ff8cf01..0f4f345a6c 100644 --- a/libavcodec/truemotion2.c +++ b/libavcodec/truemotion2.c @@ -81,7 +81,7 @@ typedef struct TM2Context { int *clast; /* data for current and previous frame */ - int *Y1_base, *U1_base, *V1_base, *Y2_base, *U2_base, *V2_base; + int *Y_base, *UV_base; int *Y1, *U1, *V1, *Y2, *U2, *V2; int y_stride, uv_stride; int cur; @@ -966,32 +966,29 @@ static av_cold int decode_init(AVCodecContext *avctx) ff_bswapdsp_init(&l->bdsp); - l->last = av_malloc_array(w >> 2, 4 * sizeof(*l->last) ); - l->clast = av_malloc_array(w >> 2, 4 * sizeof(*l->clast)); + l->last = av_malloc_array(w, 2 * sizeof(*l->last)); + if (!l->last) + return AVERROR(ENOMEM); + l->clast = l->last + w; w += 8; h += 8; - l->Y1_base = av_calloc(w * h, sizeof(*l->Y1_base)); - l->Y2_base = av_calloc(w * h, sizeof(*l->Y2_base)); + l->Y_base = av_calloc(w * h, 2 * sizeof(*l->Y_base)); + if (!l->Y_base) + return AVERROR(ENOMEM); l->y_stride = w; + l->Y1 = l->Y_base + l->y_stride * 4 + 4; + l->Y2 = l->Y1 + w * h; w = (w + 1) >> 1; h = (h + 1) >> 1; - l->U1_base = av_calloc(w * h, sizeof(*l->U1_base)); - l->V1_base = av_calloc(w * h, sizeof(*l->V1_base)); - l->U2_base = av_calloc(w * h, sizeof(*l->U2_base)); - l->V2_base = av_calloc(w * h, sizeof(*l->V1_base)); - l->uv_stride = w; - if (!l->Y1_base || !l->Y2_base || !l->U1_base || - !l->V1_base || !l->U2_base || !l->V2_base || - !l->last || !l->clast) { + l->UV_base = av_calloc(w * h, 4 * sizeof(*l->UV_base)); + if (!l->UV_base) return AVERROR(ENOMEM); - } - l->Y1 = l->Y1_base + l->y_stride * 4 + 4; - l->Y2 = l->Y2_base + l->y_stride * 4 + 4; - l->U1 = l->U1_base + l->uv_stride * 2 + 2; - l->U2 = l->U2_base + l->uv_stride * 2 + 2; - l->V1 = l->V1_base + l->uv_stride * 2 + 2; - l->V2 = l->V2_base + l->uv_stride * 2 + 2; + l->uv_stride = w; + l->U1 = l->UV_base + l->uv_stride * 2 + 2; + l->U2 = l->U1 + w * h; + l->V1 = l->U2 + w * h; + l->V2 = l->V1 + w * h; return 0; } @@ -1002,16 +999,11 @@ static av_cold int decode_end(AVCodecContext *avctx) int i; av_freep(&l->last); - av_freep(&l->clast); for (i = 0; i < TM2_NUM_STREAMS; i++) av_freep(&l->tokens[i]); - av_freep(&l->Y1_base); - av_freep(&l->U1_base); - av_freep(&l->V1_base); - av_freep(&l->Y2_base); - av_freep(&l->U2_base); - av_freep(&l->V2_base); + av_freep(&l->Y_base); + av_freep(&l->UV_base); av_freep(&l->buffer); l->buffer_size = 0;