From patchwork Sat Aug 29 17:56:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21987 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 C029E4498E0 for ; Sat, 29 Aug 2020 20:56:48 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A21C16882C2; Sat, 29 Aug 2020 20:56:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3A2C06801C6 for ; Sat, 29 Aug 2020 20:56:42 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id f7so2122351wrw.1 for ; Sat, 29 Aug 2020 10:56:42 -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:mime-version :content-transfer-encoding; bh=SZ98EPNO7hOHh3he2xM/yjvFCvn0u+YSaKa1HHhhKaA=; b=kMjhM1I6HmjYzIav3JxnvrnSKPeRskwPJZlibN/nS/MFSHrrhJVjtp1ikG9IFBv/sV p1spGWpiNZiz00MoJB8Mra3F29DdHFO0lqZ6JcD8Zt5cxV6nLf9VZOaqcEMK3RTeXRj+ ypDjkvLBu++y5HaIkaEtMf9+tmXVqlhSRvht0vDMdqhD/eHa1RRB40O60wXinHNzmCPL gWJgqEXf/r1NuBI2IZhX/6o7QQ2GiL6y/pCGz6zHMX4qi3LO0PleLKyqg1PSagtBssoD tDGwQiom+n8nfGYQDrU1IRrRUHDZkz+eICDrtB+xEiT/ZfzCRtDH5eQWP4/ghgyA7yMw BV/g== 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:mime-version :content-transfer-encoding; bh=SZ98EPNO7hOHh3he2xM/yjvFCvn0u+YSaKa1HHhhKaA=; b=AccqNNaJjXmLpQwxiSi5F1aToiY7mfzLNKJ2uBm5xG0CZJ+1EcMMiiUqkADgrX5EDO lGASWkTrHmChGgPXcXdAUQv60Gg+wkX1YcwUTWdGsoB5F1nA/YkPuvU5SNuXbsrZpmQN cLEy1RQYbcdpoQEsJuts6zD6eMTGCYvzVabGJ7LIExk7Ni8/8MQo7CbGIcbqshVRduRq OL3URZ8cXinL3ZI2Z8mSmVXEI/uS1GOUM6IkQ6HzHEqma4YMIjs7ZeKuv5BX+9nu4fRq Hf8ijPPVIMHE/wT19kbMhZwkphZ2tLSDnc8ckgfp8aPXpK5AAInoj9HS+XVYHGqna1xG /EOA== X-Gm-Message-State: AOAM530HZgpxZUyQpTzgGzOu8dI02IGA6F0vQ+oLRMe49v/p9V2gSoQ+ VAxpKQ2QS9ER0r11Hyt5+kiz05U8yvI= X-Google-Smtp-Source: ABdhPJw/m231loXGkGW5s2Xa1xxf7uLQ81VCpGdHV1POnThpwS+Qjv3dsNfatsnDZAMfZHYkNZaV/w== X-Received: by 2002:a5d:4642:: with SMTP id j2mr4283156wrs.82.1598723801268; Sat, 29 Aug 2020 10:56:41 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1fb0f.dynamic.kabel-deutschland.de. [188.193.251.15]) by smtp.gmail.com with ESMTPSA id z8sm4016734wmf.10.2020.08.29.10.56.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 29 Aug 2020 10:56:40 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 29 Aug 2020 19:56:14 +0200 Message-Id: <20200829175626.11682-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/13] avcodec/cinepakenc: Cleanup generically after init failure 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/cinepakenc.c | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/libavcodec/cinepakenc.c b/libavcodec/cinepakenc.c index 6024df0fba..cc125ed39e 100644 --- a/libavcodec/cinepakenc.c +++ b/libavcodec/cinepakenc.c @@ -171,22 +171,22 @@ static av_cold int cinepak_encode_init(AVCodecContext *avctx) if (!(s->last_frame = av_frame_alloc())) return AVERROR(ENOMEM); if (!(s->best_frame = av_frame_alloc())) - goto enomem; + return AVERROR(ENOMEM); if (!(s->scratch_frame = av_frame_alloc())) - goto enomem; + return AVERROR(ENOMEM); if (avctx->pix_fmt == AV_PIX_FMT_RGB24) if (!(s->input_frame = av_frame_alloc())) - goto enomem; + return AVERROR(ENOMEM); if (!(s->codebook_input = av_malloc_array((avctx->pix_fmt == AV_PIX_FMT_RGB24 ? 6 : 4) * (avctx->width * avctx->height) >> 2, sizeof(*s->codebook_input)))) - goto enomem; + return AVERROR(ENOMEM); if (!(s->codebook_closest = av_malloc_array((avctx->width * avctx->height) >> 2, sizeof(*s->codebook_closest)))) - goto enomem; + return AVERROR(ENOMEM);; for (x = 0; x < (avctx->pix_fmt == AV_PIX_FMT_RGB24 ? 4 : 3); x++) if (!(s->pict_bufs[x] = av_malloc((avctx->pix_fmt == AV_PIX_FMT_RGB24 ? 6 : 4) * (avctx->width * avctx->height) >> 2))) - goto enomem; + return AVERROR(ENOMEM); mb_count = avctx->width * avctx->height / MB_AREA; @@ -199,13 +199,13 @@ static av_cold int cinepak_encode_init(AVCodecContext *avctx) frame_buf_size = CVID_HEADER_SIZE + s->max_max_strips * strip_buf_size; if (!(s->strip_buf = av_malloc(strip_buf_size))) - goto enomem; + return AVERROR(ENOMEM); if (!(s->frame_buf = av_malloc(frame_buf_size))) - goto enomem; + return AVERROR(ENOMEM); if (!(s->mb = av_malloc_array(mb_count, sizeof(mb_info)))) - goto enomem; + return AVERROR(ENOMEM); av_lfg_init(&s->randctx, 1); s->avctx = avctx; @@ -252,23 +252,6 @@ static av_cold int cinepak_encode_init(AVCodecContext *avctx) s->max_strips = s->max_max_strips; return 0; - -enomem: - av_frame_free(&s->last_frame); - av_frame_free(&s->best_frame); - av_frame_free(&s->scratch_frame); - if (avctx->pix_fmt == AV_PIX_FMT_RGB24) - av_frame_free(&s->input_frame); - av_freep(&s->codebook_input); - av_freep(&s->codebook_closest); - av_freep(&s->strip_buf); - av_freep(&s->frame_buf); - av_freep(&s->mb); - - for (x = 0; x < (avctx->pix_fmt == AV_PIX_FMT_RGB24 ? 4 : 3); x++) - av_freep(&s->pict_bufs[x]); - - return AVERROR(ENOMEM); } static int64_t calculate_mode_score(CinepakEncContext *s, int h, @@ -1206,4 +1189,5 @@ AVCodec ff_cinepak_encoder = { .close = cinepak_encode_end, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_RGB24, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }, .priv_class = &cinepak_class, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, };