From patchwork Fri Sep 4 23:17:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 22109 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 F1214449193 for ; Sat, 5 Sep 2020 02:17:59 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DBF9068B525; Sat, 5 Sep 2020 02:17:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A527C68B40E for ; Sat, 5 Sep 2020 02:17:52 +0300 (EEST) Received: by mail-wr1-f68.google.com with SMTP id z4so8959629wrr.4 for ; Fri, 04 Sep 2020 16:17:52 -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=5H6tN9+Q6r9XQHqdDvu6Nh5yedVMqOCzKZhrJp6aQCw=; b=qKzNEKkex2JnxxnhtMjZYq5fv3JPVMg5/7rC58NskFd9wplKJKYHVSgs6gTkG0yNgU U9nuvMsNDTO1/mmtEIemtu2WLu0+2PCJHdh7ENL5ebWyAwamDet+kvRdiY4G36YyYbl2 yFIqv2fjXgn+5tb2BJant9dnYY6dzg5tKfFXy7PTTjMcZGapRamblqhefUYyd6+gpO0+ CVTPZlAPfb4TOb8AerASfRw5vd2QS3eWOgT/h0g9YP17bp8DMay7MeCiciO11g7iicvl v4VFZxYdJXICJyOl6b0bfDag7GF6ZKm0fI6LyrLEJ73bNhiv+N0qvSsUms/N59i2h2pX u4ZQ== 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=5H6tN9+Q6r9XQHqdDvu6Nh5yedVMqOCzKZhrJp6aQCw=; b=jzC4rVWTuSo3S6akI7K020kt3N2KaDAMx7VBY0mtjBJbePQ2Ke3VHVFRvEXnspcDP/ /V+/Pxv08Zyw+LdHofInDq1RrdBRj1ydlhrDzWGQudfBUpX2USDdHjHtQA24ZcL/M9AP 1Ywamw9SLLj0pR0VAJZgfaAoNv/Amgikq2v70o+Rrwd4K81Ng/FuK30EETjpgDJcJ26l hygiKPypY+lL3jm+MPradCiYl9NJdI5WfNOzq5b1F7JfP3aqRK+9r9e5C/5r5LENjUyf S883Aqorz2GpNiGM261BDptuo9lYNGlTtuDzsYtQJoBklyFDT0cx7Cm/hJyb9HS+ln+y Xe+Q== X-Gm-Message-State: AOAM530thgCAFgOjW2MPcvfCWpusWw8hH7cfr/alp9dDrU1Pbxsg9c+q zlDfauL0S47V5RcDiIQoTmbKKlSEB/A= X-Google-Smtp-Source: ABdhPJwxRTpPQZMBvmpAaXmd8CukE6cuHGO2EA7Kd9fdMtWOIE0yA+z7+l4M7TcK5ug7offmBEsjUQ== X-Received: by 2002:a5d:4bcf:: with SMTP id l15mr9639576wrt.384.1599261471690; Fri, 04 Sep 2020 16:17:51 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1fb0f.dynamic.kabel-deutschland.de. [188.193.251.15]) by smtp.gmail.com with ESMTPSA id f14sm14598098wrv.72.2020.09.04.16.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2020 16:17:51 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Sep 2020 01:17:15 +0200 Message-Id: <20200904231716.16182-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200904231716.16182-1-andreas.rheinhardt@gmail.com> References: <20200904231716.16182-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/8] avcodec/jpeglsenc: 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" Having only one allocation that is not automatically freed in particular means that one does not need to free the already allocated buffers when allocating another one fails. Signed-off-by: Andreas Rheinhardt --- libavcodec/jpeglsenc.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/libavcodec/jpeglsenc.c b/libavcodec/jpeglsenc.c index 7fd109f0cf..304b0806a7 100644 --- a/libavcodec/jpeglsenc.c +++ b/libavcodec/jpeglsenc.c @@ -276,7 +276,6 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, PutByteContext pb; PutBitContext pb2; GetBitContext gb; - uint8_t *buf2 = NULL; const uint8_t *in; uint8_t *last = NULL; JLSState state = { 0 }; @@ -300,12 +299,13 @@ FF_ENABLE_DEPRECATION_WARNINGS AV_INPUT_BUFFER_MIN_SIZE, 0)) < 0) return ret; - buf2 = av_malloc(pkt->size); - if (!buf2) - goto memfail; + last = av_malloc((unsigned)pkt->size + FFABS(p->linesize[0])); + if (!last) + return AVERROR(ENOMEM); + memset(last, 0, FFABS(p->linesize[0])); bytestream2_init_writer(&pb, pkt->data, pkt->size); - init_put_bits(&pb2, buf2, pkt->size); + init_put_bits(&pb2, last + FFABS(p->linesize[0]), pkt->size); /* write our own JPEG header, can't use mjpeg_picture_header */ put_markeru(&pb, SOI); @@ -340,10 +340,6 @@ FF_ENABLE_DEPRECATION_WARNINGS ls_store_lse(&state, &pb); - last = av_mallocz(FFABS(p->linesize[0])); - if (!last) - goto memfail; - in = p->data[0]; if (avctx->pix_fmt == AV_PIX_FMT_GRAY8) { int t = 0; @@ -393,8 +389,6 @@ FF_ENABLE_DEPRECATION_WARNINGS } } - av_freep(&last); - /* the specification says that after doing 0xff escaping unused bits in * the last byte must be set to 0, so just append 7 "optional" zero bits * to avoid special-casing. */ @@ -402,7 +396,7 @@ FF_ENABLE_DEPRECATION_WARNINGS size = put_bits_count(&pb2); flush_put_bits(&pb2); /* do escape coding */ - init_get_bits(&gb, buf2, size); + init_get_bits(&gb, pb2.buf, size); size -= 7; while (get_bits_count(&gb) < size) { int v; @@ -413,7 +407,7 @@ FF_ENABLE_DEPRECATION_WARNINGS bytestream2_put_byte(&pb, v); } } - av_freep(&buf2); + av_freep(&last); /* End of image */ put_marker(&pb, EOI); @@ -424,11 +418,6 @@ FF_ENABLE_DEPRECATION_WARNINGS pkt->flags |= AV_PKT_FLAG_KEY; *got_packet = 1; return 0; - -memfail: - av_freep(&buf2); - av_freep(&last); - return AVERROR(ENOMEM); } static av_cold int encode_init_ls(AVCodecContext *ctx)