From patchwork Wed Nov 18 13:05:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gil Pedersen X-Patchwork-Id: 23687 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:c00a:0:0:0:0:0 with SMTP id c10csp248542ybf; Wed, 18 Nov 2020 05:06:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJyMPMa1LZB/1YMZJp7Q3dSNwV/2wkzSIdmNidTSkdE4e1OEVde5MgdIIAqMvkZOVc6SJu9g X-Received: by 2002:adf:fa10:: with SMTP id m16mr4703856wrr.194.1605704786093; Wed, 18 Nov 2020 05:06:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605704786; cv=none; d=google.com; s=arc-20160816; b=OGiyevpTQ1TFhvaj7dKqAeQcqya+jlle6JIrWi6iBJ6ICVAW9ALZBQohhY/LOJJmm1 vL+MS0z4JutVPY39AXrejIK1SprlKKDgKQpALUj2tJujzwCSJxHdannDkJDgDb0/nL2y c78+m9KwRCHkzKzJu5/nxUQfx1mmq3WEYcmSPoP0rm78QmrbLW0dIfCVIaQpmFqkvCZS A3n6IYUcHcVpaytN46ztik0N+P54PtyZjOteiLomUXUuNXIxPBp93AaqxRQ732rBHTru ZsXjCO+Fp7sfFjz3pO7N9FrByXBmmn3TlMEHzaaRH/FBxB4Kbbp1juCbmagTWWU+IywW NhLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:delivered-to; bh=IX98x8oMu+tif6wwK19YVEo5QO+hgH66gCXY3Plu1K8=; b=H3gezOipdd6CpKXMLYD8ROoxeMJKnviMX3DFiChm4s/zPmzm7auH+46e1DKvCiN6fB IjcBhTGK0AmQlkSztfraVqfKnLpRt583XEwhNLiqyJO7+nv21/r1xxTIC58X6JPi2UXm 38H4oa/vnMlCEs6/P0WWFC9LDrzBMxj/iqG9SLC1+ovvLd+o5Q080x1cYQmIZBP7zEHL xGPhaHrZIXy3YZk28F8fcGVCtkJziVnTdwvM1OMSPAaq/Uuja0o16mdUW41XY9vmJg60 O9MtUiyup30BLhK/+q9o/y81Z9gz0TezshSdeYPYg7NEFZtQv2FPMzewZQm5Wbqv2tKL p3Cw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l3si22881557wrp.231.2020.11.18.05.06.25; Wed, 18 Nov 2020 05:06:26 -0800 (PST) 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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 698EB689FB5; Wed, 18 Nov 2020 15:05:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C2841689FB5 for ; Wed, 18 Nov 2020 15:05:47 +0200 (EET) Received: by mail-wm1-f65.google.com with SMTP id 1so2661283wme.3 for ; Wed, 18 Nov 2020 05:05:47 -0800 (PST) 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; bh=SVvE2kacYixY/1cZu3inoHgj+HWNJi9ny6f6CNgLy6I=; b=XHWaMK4eObJHl/RVbS89l1PJke/veYi5hOBk8NhoSCoGDjE2tUQlR7n6Y5ivYh19A6 skn2Wk0J9FNITTrB966NYOyzb5ZzZc2ldQ5APgNWIT1GtvpgxeHn15v7NwPYx2htScGS nMd8fJS7+ptAU/+0hb6HmeirWZAEgJVS0wcOP26TQFdUvjkSNjDXiSM74D2qDGd06O8b TuGiWZyJ6okp/8f85MdoPFlp8jbtGdKtAk6/5pBlgKUgOqRteldxkwpEL5YIoBPiwIyk bnRDuMchIooTughBsBwJbXGB1+dR4A3QMTMviRijKMFHWArrvKfn9+E/hFB1u0wobDcz NP/w== X-Gm-Message-State: AOAM532oClYzHp2rdJouTbmPe8YkT/cl4xOsoT1C+HVrKSe6UVNFB3qt vhGdI2DePTPBosqjMhvK4XTzSkztRXXwHC+K X-Received: by 2002:a1c:452:: with SMTP id 79mr2592570wme.5.1605704747134; Wed, 18 Nov 2020 05:05:47 -0800 (PST) Received: from ov04.ovh.net ([2001:41d0:303:c09e::]) by smtp.gmail.com with ESMTPSA id y16sm31757320wrt.25.2020.11.18.05.05.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Nov 2020 05:05:46 -0800 (PST) From: Gil Pedersen To: ffmpeg-devel@ffmpeg.org Date: Wed, 18 Nov 2020 13:05:17 +0000 Message-Id: <20201118130517.585-7-git@gpost.dk> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201118130517.585-1-git@gpost.dk> References: <20201118130517.585-1-git@gpost.dk> Subject: [FFmpeg-devel] [PATCH 6/6] avutil/frame: use av_buffer_replace() to simplify code 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: Gil Pedersen MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Gmk6kOBPC/hQ Content-Length: 3818 Also fixes potential leaks in failing av_frame_ref(). Signed-off-by: Gil Pedersen --- libavutil/frame.c | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index 3ab1aa3242..b019779b1a 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -349,7 +349,7 @@ int av_frame_get_buffer(AVFrame *frame, int align) static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy) { - int i; + int ret, i; dst->key_frame = src->key_frame; dst->pict_type = src->pict_type; @@ -426,31 +426,18 @@ FF_DISABLE_DEPRECATION_WARNINGS dst->qscale_table = NULL; dst->qstride = 0; dst->qscale_type = 0; - av_buffer_unref(&dst->qp_table_buf); - if (src->qp_table_buf) { - dst->qp_table_buf = av_buffer_ref(src->qp_table_buf); - if (dst->qp_table_buf) { - dst->qscale_table = dst->qp_table_buf->data; - dst->qstride = src->qstride; - dst->qscale_type = src->qscale_type; - } + av_buffer_replace(&dst->qp_table_buf, src->qp_table_buf); + if (dst->qp_table_buf) { + dst->qscale_table = dst->qp_table_buf->data; + dst->qstride = src->qstride; + dst->qscale_type = src->qscale_type; } FF_ENABLE_DEPRECATION_WARNINGS #endif - av_buffer_unref(&dst->opaque_ref); - av_buffer_unref(&dst->private_ref); - if (src->opaque_ref) { - dst->opaque_ref = av_buffer_ref(src->opaque_ref); - if (!dst->opaque_ref) - return AVERROR(ENOMEM); - } - if (src->private_ref) { - dst->private_ref = av_buffer_ref(src->private_ref); - if (!dst->private_ref) - return AVERROR(ENOMEM); - } - return 0; + ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref); + ret |= av_buffer_replace(&dst->private_ref, src->private_ref); + return ret; } int av_frame_ref(AVFrame *dst, const AVFrame *src) @@ -469,17 +456,17 @@ int av_frame_ref(AVFrame *dst, const AVFrame *src) ret = frame_copy_props(dst, src, 0); if (ret < 0) - return ret; + goto fail; /* duplicate the frame data if it's not refcounted */ if (!src->buf[0]) { ret = av_frame_get_buffer(dst, 0); if (ret < 0) - return ret; + goto fail; ret = av_frame_copy(dst, src); if (ret < 0) - av_frame_unref(dst); + goto fail; return ret; }