From patchwork Sun Nov 14 18:59:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 31419 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp4805092iob; Sun, 14 Nov 2021 11:00:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJyXrKK1312Kc9eTOYbmhVbllGtQ5amZ0PVtncJv2sEcGf08R/dyKb9Df1hMyiyvfH/NXb/c X-Received: by 2002:a17:906:4fc8:: with SMTP id i8mr41279473ejw.342.1636916439976; Sun, 14 Nov 2021 11:00:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636916439; cv=none; d=google.com; s=arc-20160816; b=jjR6KghihuNVcOhQsm8iikjJflE4y194H8bbGoF6kzkrfbqtVcOJ6/mkxLFBNlDPXy dmVb7zdW4Z7jkv10EnTMgJnz5Z9nsVXsxJzskDCZuGH2cxS0T4A9a3i48FWjz+ljPpGt 7wIvF6ynRfsnkb9jNWILEdfeil1JOKjtAh3jSGJNn3GVvISsbnYB9lcT0ixqWNqHThhm pdCT/RPQ6nEbAmGUP53uYeIhkm07fDicoJvOzMqJiC61BBYUzRXbq5ZzAuQDtD8QIx77 ApUixiWJXky875yB4JgECTmEHqgjzIU1+xouf9m3TdBeL30YQj8cLVUBFGEaF3s0KceZ DTVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=6fEv/C5OVFsLT0uZoQfiGOE4vy7TFxTMa7LobXV5oAU=; b=gM0bYocj8qu75QH/gvkoZezU8JGP1CfehyZz35AWNvmO5vOKp2wqWyGR6LbXyqlOtD KLJ8hDxV78cOrV4dVGHmxw3WqhHNghWInScjR9Pbx3MeIzqj3APAymJoYx/CWvGBZO/f QUbU9rCeLMCNp4um4guPbRR+KNbYyQmj6mPUjIKuwra2R+3/8FvCxN8Vd/ULBEiZ6bpQ ZJO0UuVud7XWJccstLjdxlBHvA13xLsVQYFv4dLENDpKiIDgMb2KdzLgaxARZ/1zoNey o1K37kzmBmvlMoXS1rQbxJWe0qhqgLQHRrsXxZZOOuFjoCfsAX8bhTnrq6HUDULqK2Zf Ti5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=JlqpvGix; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w12si30077181edj.252.2021.11.14.11.00.39; Sun, 14 Nov 2021 11:00:39 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=JlqpvGix; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B164468A897; Sun, 14 Nov 2021 21:00:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f42.google.com (mail-ua1-f42.google.com [209.85.222.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 78EB9680CAB for ; Sun, 14 Nov 2021 21:00:28 +0200 (EET) Received: by mail-ua1-f42.google.com with SMTP id i6so30213423uae.6 for ; Sun, 14 Nov 2021 11:00:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=q3g7IEw3YzmOivdGCwBIElO21gxFCx3LD8qPcpb4pBg=; b=JlqpvGixPAvkl6gBIbTNUgDkeQNwzch50vvKzTW35nrheqtkbuYStx47Ovnq7af2C8 fdxrfVhPVaP2iSrXCxpAlpqIIMehQ6Mp96G+CbTs2TfG6jDLtieXioknvnnRZAuPrlIO +kT4AFRJMK8OaY9fx94kbMZXzzQPClKf7PdHPOwudKKs7jfSWccLtayonLc1OnPH+FGJ 7bbLoNT8tM0lY3rdk+uBdVcnCEAiJzN3uD29WdHd3oKfwDxbNRN4jXd6YfYEfxmNxtlc 2M8y+f/1U0x/0DAlz0GI9SZW1No0toeRy7YNesBasfTjg6gG8mfe73HYHXTtXz+KX941 YiQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=q3g7IEw3YzmOivdGCwBIElO21gxFCx3LD8qPcpb4pBg=; b=2BPAbP3yC6Q2eyZsKSvogfnBYpryIPF8s64ovgCDpPPjIdoRmBPOcSuhM0nQ+VL+Za Hu0ba6rfikar1nX3dbuAXNPUubdgBPD6v75N/tlQNAfzqlvETLoLUww7LlYLU7D0ny4D /I5kHGyJnZ6vLw92drj9uD3+wtDH8I/rmMxbJDHpZN2wR11pFZi3JI+UYOKdvr3r+thm wt1ZFgBdLBWpY2VWEMbK0CcnW/FW+7DDQoq9Vx9Vb7rgukXyZ/z2fmtkgMRe9W4vnYIc JCPgnp1klb52xPdNsr25WMt8PY6GHltwuAsR4Gx1DnZfxSIkTmKnbT5o2MUYL+SGQauP JWUA== X-Gm-Message-State: AOAM532rl7X7G7w5nVp/rA7Ci0SHMepiB0vjhaFEYu7YewDgR6e+cSXP PBQwIPppILvXGioLEuEZu09pH1dIjbA= X-Received: by 2002:a05:6102:2859:: with SMTP id az25mr34208941vsb.25.1636916425957; Sun, 14 Nov 2021 11:00:25 -0800 (PST) Received: from localhost.localdomain ([181.23.88.82]) by smtp.gmail.com with ESMTPSA id l190sm8180638vsc.26.2021.11.14.11.00.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Nov 2021 11:00:25 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 14 Nov 2021 15:59:54 -0300 Message-Id: <20211114185956.53923-1-jamrial@gmail.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] ffmpeg: allocate the output hwaccel AVFrame only once X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: xvaWTs9eRMxr Signed-off-by: James Almer --- fftools/ffmpeg.c | 3 +++ fftools/ffmpeg.h | 1 + fftools/ffmpeg_hw.c | 17 ++++++----------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index d141f34df9..26030ed25e 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -640,6 +640,7 @@ static void ffmpeg_cleanup(int ret) av_frame_free(&ist->sub2video.frame); av_freep(&ist->filters); av_freep(&ist->hwaccel_device); + av_frame_free(&ist->hwaccel_frame); av_freep(&ist->dts_buffer); avcodec_free_context(&ist->dec_ctx); @@ -2412,6 +2413,8 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_ return AVERROR(ENOMEM); if (!ist->filter_frame && !(ist->filter_frame = av_frame_alloc())) return AVERROR(ENOMEM); + if (!ist->hwaccel_frame && !(ist->hwaccel_frame = av_frame_alloc())) + return AVERROR(ENOMEM); decoded_frame = ist->decoded_frame; if (ist->dts != AV_NOPTS_VALUE) dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ist->st->time_base); diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 30225e9ffe..17135cb830 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -382,6 +382,7 @@ typedef struct InputStream { enum AVPixelFormat hwaccel_pix_fmt; enum AVPixelFormat hwaccel_retrieved_pix_fmt; AVBufferRef *hw_frames_ctx; + AVFrame *hwaccel_frame; /* stats */ // combined size of all the packets read diff --git a/fftools/ffmpeg_hw.c b/fftools/ffmpeg_hw.c index 14e702bd92..d5034d4f6a 100644 --- a/fftools/ffmpeg_hw.c +++ b/fftools/ffmpeg_hw.c @@ -18,6 +18,7 @@ #include +#include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/pixdesc.h" #include "libavfilter/buffersink.h" @@ -500,7 +501,7 @@ int hw_device_setup_for_encode(OutputStream *ost) static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input) { InputStream *ist = avctx->opaque; - AVFrame *output = NULL; + AVFrame *output = ist->hwaccel_frame; enum AVPixelFormat output_format = ist->hwaccel_output_format; int err; @@ -509,9 +510,8 @@ static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input) return 0; } - output = av_frame_alloc(); - if (!output) - return AVERROR(ENOMEM); + av_assert0(output); + av_frame_unref(output); output->format = output_format; @@ -519,24 +519,19 @@ static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input) if (err < 0) { av_log(avctx, AV_LOG_ERROR, "Failed to transfer data to " "output frame: %d.\n", err); - goto fail; + return err; } err = av_frame_copy_props(output, input); if (err < 0) { av_frame_unref(output); - goto fail; + return err; } av_frame_unref(input); av_frame_move_ref(input, output); - av_frame_free(&output); return 0; - -fail: - av_frame_free(&output); - return err; } int hwaccel_decode_init(AVCodecContext *avctx)