From patchwork Tue Aug 10 22:00:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 29406 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:8e8b:0:0:0:0:0 with SMTP id q133csp836284iod; Tue, 10 Aug 2021 15:00:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzEeXxN8/CEnIKoEkynZ1rYdKwznWBVL6D8KE3DivSvXE4CglVjpvT2y4Qg2fbVETSA2W56 X-Received: by 2002:a50:fc96:: with SMTP id f22mr7583843edq.367.1628632841175; Tue, 10 Aug 2021 15:00:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628632841; cv=none; d=google.com; s=arc-20160816; b=Orpk4OjmlzU9jz31bc1ODG/YE8TdbHxG0ydpxm2Cp02ANdO0Cb65Xr2VIQKPNfL1yc CmZS0HR2V+dSa7aggbsBcORfl9zCU7FQIZ4IWnNT2XsS5iC+NtgnJaBQ1VQcj30gwWX3 MJ46CE2JTA9oEe1NQCMihNs7+W3Wgsx/IuXR1szpZW6IvoyoigYz3R0tJWveugCeUWB2 yeJki5kez35Nvg7Km0E1Rs/I+couZVYZsPdeHp3Bs4gaeDVFZ+O4z08tpQUbCg037EDj iL3WBnsnKiXnknvjWh0nq+vdHOfGErfl/7BFJH/rhczV9hnYJkvgoH4/ll5kKOlyRhNd UD2A== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=rN1bSOWK9lXYdkoaCkNq/Kw8b+9rCMNMtAGJnRFkwJE=; b=rNXvhtVfKocm8dPpftwhVQrNIuijke4hEoT4sYiQfGB3GqgjTHVZ7/hY4aXgRdN698 zuhAZ8AKa58EsPLwG4pK6VPbh4uyncy7spy41RCGoWLIdEt4m5eqGZwUGZMtXd/E82oT UUtzAep2r3L0YdVkmSwMS3gthryf/ngLPf5VrHvb6TLFgavpYEyH2f3lyEC9EdUUHZ+w My4NhsacAwAzl3JRorZqthVHBRhon4OJlxTqk2yIHk4v2OuCvQ/aIW33FWYzCX9t9kmN YJqUObRquhESOTYY2RxzZnOg1cPZkPgzjZ8rqqi+Z9aE2gDfAsUxdvMdOzPQL7Q4yEiB SwQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=KE6zPxqb; 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 m13si978743edc.39.2021.08.10.15.00.40; Tue, 10 Aug 2021 15:00:41 -0700 (PDT) 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=20161025 header.b=KE6zPxqb; 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 E3C25689BC9; Wed, 11 Aug 2021 01:00:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D419068A242 for ; Wed, 11 Aug 2021 01:00:19 +0300 (EEST) Received: by mail-pl1-f178.google.com with SMTP id k2so23183700plk.13 for ; Tue, 10 Aug 2021 15:00:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Kkp/G41oB+zYUkurppc/I6dZhBsQHWlHqRu3s/jgm9k=; b=KE6zPxqbmzK8Cljs1nBsa5elMWGWqIhDxb1MzwE++vTR3EwbadP7pg7zD7ui19toZ3 LhjucNWFFCy3JjeXB21WLwERSrBF8NmMKFBdKl1hL1JbsiDL8AI0ue5ECd3afHmHXxF8 pFbI6IR9XThKFhisNTGx5i/8qPmoZlDtT3xpCE34+97l+YbdQjzrFSIJNVF8i5dkPXUH 2Th5wItytEe/+lt+f0m6rY8UF0W7CoSRo7CDGwx5t9PoBXOgCkN9xKhd7m58Qii2/Gyh 48fcSSUG8Z1zcPSnwgcvnMWShYQQJfMBLTDLrgBvPYgGeh9pxDuvIHsoq70MoqfVYl2q Z9MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Kkp/G41oB+zYUkurppc/I6dZhBsQHWlHqRu3s/jgm9k=; b=HflWACmE4dH4pziSRl/BCmCkm4tLvmv9prqjcrnGTz5sSWF6djxNWYrvR8NmRcppaR W46y4JR45bGiBmVz4uEjmJCeanT1KBQNhFXmpiSljtxwWCVnA13KC+RK7Teyks++bMLx JZR0nFAhp4EWXKBphW9rxGIZ5NHrvyINPXYQhbBZqCdaqYAYSxxNbs8wa0x4tLw9/ySp MStP8RhfolbVnLBVykJaDr/xmpJdTY3p8V++2wcYKD1/bekG5ssu7pZ3hSEszGwTHSLn cDmsoX35yMYm7xFIRk1Sn2nZZU3hF65XIn4XJb2PTsvgWDgdWXwXaYc3OCnhV28+L212 CxxA== X-Gm-Message-State: AOAM532FNLOokxUaeByt2xvQu4cTwQnacUdXX7Vhh95/PpsayGukYwZZ P6E6GFjmOCdY2dlCAek5ZDG7xd7LL9w= X-Received: by 2002:a17:90a:6fe2:: with SMTP id e89mr10436369pjk.188.1628632817544; Tue, 10 Aug 2021 15:00:17 -0700 (PDT) Received: from localhost.localdomain ([191.84.233.71]) by smtp.gmail.com with ESMTPSA id nv11sm4340998pjb.48.2021.08.10.15.00.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Aug 2021 15:00:17 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Aug 2021 19:00:00 -0300 Message-Id: <20210810220001.13494-2-jamrial@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210810220001.13494-1-jamrial@gmail.com> References: <20210810220001.13494-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] avcodec/pthread_frame: add ff_thread_replace_frame() 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: 7i8h352xZUFZ Signed-off-by: James Almer --- libavcodec/pthread_frame.c | 29 +++++++++++++++++++++++++++++ libavcodec/thread.h | 2 ++ libavcodec/utils.c | 20 ++++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c index 2ff71ca39e..1480269671 100644 --- a/libavcodec/pthread_frame.c +++ b/libavcodec/pthread_frame.c @@ -1162,3 +1162,32 @@ fail: } #endif } + +int ff_thread_replace_frame(AVCodecContext *avctx, ThreadFrame *dst, const ThreadFrame *src) +{ + int ret; +#if FF_API_THREAD_SAFE_CALLBACKS +FF_DISABLE_DEPRECATION_WARNINGS + int can_direct_free = !(avctx->active_thread_type & FF_THREAD_FRAME) || + THREAD_SAFE_CALLBACKS(avctx); +FF_ENABLE_DEPRECATION_WARNINGS + + if (!can_direct_free) + ff_thread_release_buffer(avctx, dst); +#endif + + dst->owner[0] = src->owner[0]; + dst->owner[1] = src->owner[1]; + + ret = av_frame_replace(dst->f, src->f); + if (ret < 0) + return ret; + + ret = av_buffer_replace(&dst->progress, src->progress); + if (ret < 0) { + ff_thread_release_buffer(dst->owner[0], dst); + return ret; + } + + return 0; +} diff --git a/libavcodec/thread.h b/libavcodec/thread.h index d7d2ddd8f1..5fef42e16f 100644 --- a/libavcodec/thread.h +++ b/libavcodec/thread.h @@ -135,6 +135,8 @@ void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f); int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src); +int ff_thread_replace_frame(AVCodecContext *avctx, ThreadFrame *dst, const ThreadFrame *src); + int ff_thread_init(AVCodecContext *s); int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, int (*action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr), diff --git a/libavcodec/utils.c b/libavcodec/utils.c index cfc07cbcb8..cd322ff6a9 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -917,6 +917,26 @@ void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f) av_frame_unref(f->f); } +int ff_thread_replace_frame(AVCodecContext *avctx, ThreadFrame *dst, const ThreadFrame *src) +{ + int ret; + + dst->owner[0] = src->owner[0]; + dst->owner[1] = src->owner[1]; + + ret = av_frame_replace(dst->f, src->f); + if (ret < 0) + return ret; + + ret = av_buffer_replace(&dst->progress, src->progress); + if (ret < 0) { + ff_thread_release_buffer(dst->owner[0], dst); + return ret; + } + + return 0; +} + void ff_thread_finish_setup(AVCodecContext *avctx) { }