From patchwork Tue Aug 10 21:59:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 29405 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:8e8b:0:0:0:0:0 with SMTP id q133csp836107iod; Tue, 10 Aug 2021 15:00:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz+L8dogU20+EvchV1TfOzbA/2b/gmRi62YefZjDveJy6qQAucn6LpxnTjG4KxdX+twot6d X-Received: by 2002:a17:906:f190:: with SMTP id gs16mr571844ejb.439.1628632829646; Tue, 10 Aug 2021 15:00:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628632829; cv=none; d=google.com; s=arc-20160816; b=dawnq/sGd1dPQJ0nF67yjKU8AfRfWZcpc5Z3gK4g5+el9Lb+7nh52A94rIuDr7OQOM 54estQqn7SWHRS4uqpF3rYJ60ccBXyV0GGpaeG/hV3URb0Fqf7NlSmYEQGLuUF2p3icv Xw7IfPm4OAz7rFfuR6epp/nzEI1udk/WPVRrq+5tWxcy0IE4mLTjhZfT2s8oOENgIRWX 9oqMCPysxdiDygR0v5KgDKVbc+FEOlM4RWX2XpoI1oGTYKM+/LvpQ3plyiApxo8VCfWi qID6yuqgdWJSGgndV77v6Kuw5oRK+Z97oWFjbXaxljRUKRRzZXeGggl6DD9X79+cUE+h FDDw== 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=NgZ+I6QJSv851HD+pJcXju+QP3D9y2BWgDDG3zirlPI=; b=lz5XTQ8J3KzXrVdVukIsOGnG0DoeXik1jxwpVTSlZ+w7Lnn9Ak9sqJ14VNk6y5QQFD tpFdI4MeGmZnx3Wl2B8x6Alvtw2CulXSqD3cV7UXNppD05TKObHXDo4LZQkejXuW3l+a 7EcdVVJPVvQIamzBVY3ic+PNAZXkWho0F7bspJjtLtb+hCvWNbnhmeRs1HupZ8nbJG5W OjUTcD7Sf3HiUeib3d24rG/aEQsFzn7eNgqt4U/2bwB7D+TiSQTfz85s3k1bzm39RwfI Lyg1mI94n/bgQNb2r6UE3UD4B3INTfzx+dyUw9rOPIMVJJAx0GNsSQVBZ3gvOdzrNQrc WZTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=VAqXCdLJ; 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 t2si22666377ejf.408.2021.08.10.15.00.28; Tue, 10 Aug 2021 15:00:29 -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=VAqXCdLJ; 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 E48BC68A273; Wed, 11 Aug 2021 01:00:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 538A46802FF for ; Wed, 11 Aug 2021 01:00:18 +0300 (EEST) Received: by mail-pj1-f41.google.com with SMTP id s22-20020a17090a1c16b0290177caeba067so6467598pjs.0 for ; Tue, 10 Aug 2021 15:00:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=I5CutZRPGZCbl86Krz3JpdJmmeMlWCYA2y4xJGlzEyQ=; b=VAqXCdLJ0SEYwigRx7FcO+aKffGlkJim1qEzdVknO75Cp7UxxdrInmvmVkL4aibUJ/ /JtyqGGWgbEbfJJxFHQfD5H/0FmbB0SN9fOD1Io4Q6CoExY3tc7fGhl8UImkbowfibO5 43VppxcYKU8o9bABEIpUMzM9WnAWD2tCM2hIvc7zL2kfQjU0qCox8kBr5sCMrfIke2/G qx1pM2uAKsjvaXSPyrD1nZPWv/XAjOBRmFjYxG4ngAHdw8KFXWtSzNvt3b/mRSIKPyof np6HJZLsjVplyISxA66/+9ZI3tmn/TO9ePcCl4Reg9zKAvpfN+RrRXWsDAUD05jtgwi+ zczw== 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:mime-version :content-transfer-encoding; bh=I5CutZRPGZCbl86Krz3JpdJmmeMlWCYA2y4xJGlzEyQ=; b=alfiwa6PmEcCOok8JJJmfGa4zFReXdGaRyP+icvwR6An/uiZETLEw3uFoFEbfjN7p3 BqIGZX75ybsqkwZwz6hUv6Uaej5bkeWvnrFBiHHEy1iWahEWq/f4u+pmMtiRkk+5RHyy 6TTiAqK9FdDOOcW4vOkicP+5dTKeKe7HfX+vAY+zmB2lRzJ3yHNYdw7hSo9MfaVzYQmd 3ncm/rBcK1JQj7ABI8axPX6z7J1g/+2ijxA6fzZkTCeL4EQALCRJXbDY/FroMEzxjesZ ozzQCoqIWWaNosyag3xlpWWn4bbiKCf/Sk7napRaLNmcLk8Vdc8hqaY40Qb6aulVOn5w Rl2w== X-Gm-Message-State: AOAM5315gnGbPrMhV6QE/284DOgZzMfyGdQOz3CS5XYNAw10o12tT3sB iHVfUI105HcFiXfOyCyxmNXBnY+Gm7A= X-Received: by 2002:a17:902:6ac1:b029:12c:e955:c9f9 with SMTP id i1-20020a1709026ac1b029012ce955c9f9mr24916945plt.32.1628632816124; Tue, 10 Aug 2021 15:00:16 -0700 (PDT) Received: from localhost.localdomain ([191.84.233.71]) by smtp.gmail.com with ESMTPSA id nv11sm4340998pjb.48.2021.08.10.15.00.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Aug 2021 15:00:15 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Aug 2021 18:59:59 -0300 Message-Id: <20210810220001.13494-1-jamrial@gmail.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avutil/frame: add av_frame_replace 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: VtFMOpP01IQA Signed-off-by: James Almer --- Not going to bother with implementing replace for side data, since it's IMO not worth it, but patches are welcome of course. Missing version bump and APIchanges entry. libavutil/frame.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++ libavutil/frame.h | 18 +++++++++ 2 files changed, 116 insertions(+) diff --git a/libavutil/frame.c b/libavutil/frame.c index b0ceaf7145..035a48eb48 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -421,6 +421,104 @@ fail: return ret; } +int av_frame_replace(AVFrame *dst, const AVFrame *src) +{ + int i, ret = 0; + + if (!src->buf[0]) { + if ((src->extended_data && src->extended_data[0]) || src->data[0]) + ret = AVERROR(EINVAL); + + goto fail; + } + + dst->format = src->format; + dst->width = src->width; + dst->height = src->height; + dst->channels = src->channels; + dst->channel_layout = src->channel_layout; + dst->nb_samples = src->nb_samples; + + wipe_side_data(dst); + av_dict_free(&dst->metadata); + ret = frame_copy_props(dst, src, 0); + if (ret < 0) + goto fail; + + /* replace the buffers */ + for (i = 0; i < FF_ARRAY_ELEMS(src->buf); i++) { + ret = av_buffer_replace(&dst->buf[i], src->buf[i]); + if (ret < 0) + goto fail; + } + + if (src->extended_buf) { + if (dst->nb_extended_buf != src->nb_extended_buf) { + int nb_extended_buf = FFMIN(dst->nb_extended_buf, src->nb_extended_buf); + void *tmp; + + for (i = nb_extended_buf; i < dst->nb_extended_buf; i++) + av_buffer_unref(&dst->extended_buf[i]); + + tmp = av_realloc_array(dst->extended_buf, sizeof(*dst->extended_buf), + src->nb_extended_buf); + if (!tmp) { + ret = AVERROR(ENOMEM); + goto fail; + } + dst->extended_buf = tmp; + dst->nb_extended_buf = src->nb_extended_buf; + + memset(&dst->extended_buf[nb_extended_buf], 0, + (src->nb_extended_buf - nb_extended_buf) * sizeof(*dst->extended_buf)); + } + + for (i = 0; i < src->nb_extended_buf; i++) { + ret = av_buffer_replace(&dst->extended_buf[i], src->extended_buf[i]); + if (ret < 0) + goto fail; + } + } else if (dst->extended_buf) { + for (i = 0; i < dst->nb_extended_buf; i++) + av_buffer_unref(&dst->extended_buf[i]); + av_freep(&dst->extended_buf); + } + + ret = av_buffer_replace(&dst->hw_frames_ctx, src->hw_frames_ctx); + if (ret < 0) + goto fail; + + if (dst->extended_data != dst->data) + av_freep(&dst->extended_data); + + if (src->extended_data != src->data) { + int ch = src->channels; + + if (!ch) { + ret = AVERROR(EINVAL); + goto fail; + } + CHECK_CHANNELS_CONSISTENCY(src); + + dst->extended_data = av_malloc_array(sizeof(*dst->extended_data), ch); + if (!dst->extended_data) { + ret = AVERROR(ENOMEM); + goto fail; + } + memcpy(dst->extended_data, src->extended_data, sizeof(*src->extended_data) * ch); + } else + dst->extended_data = dst->data; + + memcpy(dst->data, src->data, sizeof(src->data)); + memcpy(dst->linesize, src->linesize, sizeof(src->linesize)); + + return 0; + +fail: + av_frame_unref(dst); + return ret; +} + AVFrame *av_frame_clone(const AVFrame *src) { AVFrame *ret = av_frame_alloc(); diff --git a/libavutil/frame.h b/libavutil/frame.h index ff2540a20f..36ed128886 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -695,6 +695,24 @@ void av_frame_free(AVFrame **frame); */ int av_frame_ref(AVFrame *dst, const AVFrame *src); +/** + * Ensure the destination frame refers to the same data described by the source + * frame. + * + * Copy frame properties from src to dst and create a new reference for each + * AVBufferRef from src if they differ from those in dst. + * + * src must be reference counted. + * + * @param src The source frame. If there's data described in it, it must be + * reference counted. + * @param dst The destination frame. + * + * @return 0 on success, a negative AVERROR on error. On error, dst is + * unreferenced. + */ +int av_frame_replace(AVFrame *dst, const AVFrame *src); + /** * Create a new frame that references the same data as src. * 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) { } From patchwork Tue Aug 10 22:00:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 29404 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:8e8b:0:0:0:0:0 with SMTP id q133csp836446iod; Tue, 10 Aug 2021 15:00:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzE5brw06oVXI1suxuq44bzQX9ZB8x0l07uTvcSktN1Fxyoa4ngzd2u+QUIpkJXus4vkDud X-Received: by 2002:a17:906:a382:: with SMTP id k2mr604447ejz.454.1628632851952; Tue, 10 Aug 2021 15:00:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628632851; cv=none; d=google.com; s=arc-20160816; b=sEV++unTyYjt8IZahvLX5Xksa7W0G+MONQfgS6C1g/V5es7PwieT88gapCAzm+ogJL KECrY60Fz9Cs171YvzPWDM4qO6bq0mS1JG2Lc+UYe2N1MUWFpICg55KpyI/VY9f35Wk0 ZWcUAK0AA8KTQltcsroWywXLAQoqNKiK+9+h9j4lbuoyNzmUYYj0cEIeTtPiKW8cLBTm HGC7FV/molUyZa8jWtFJ9M805ENz2sW+//F1uehW2DOsS9uxtjShNtMcw08Wz/evEJcf ikaA8hxM5nYdZtdzTrswmLcAUESKKU0qPbar5+OZ7VD93kzcUYydf/1ItChEu/nJdfXF WZrw== 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=eSMlyG+e6Ul8RgOLqckNgojMdd+q3dHjY+MYigMVngA=; b=N/V2CLFV90l0Wrs0XdFOGPxYDr/7e+etxUxdEgRUY7K4yFFnQRa+Wiyj5Mwasy+MbS ILkQ2jlLVlY5MMLh+0IgXe8VPs//IYFMIDAnQzBGtTP/GLMAtuoHh9IGWnLNhILAYHtH 3fsLTRb0v9CwRL3WsrS6SPWtugmxbZvOKjCRQ0kE9vMujCLyoDVQXzNTrUmqiAJSZ7iY 4bQB/mAewfm4mny9Bwb58m4HfYyF01l1h04Ife1IzbAb1NlvIfEvcMRRelGA+JSRKApB OdBX1YzzgTNm2ePBKsCwJKD19L9h62boxyhZrftKxAC6aKuj5ImTYQQvJmoYguPyRLLP vs4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=jSs7W93x; 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 q19si22165723edv.125.2021.08.10.15.00.51; Tue, 10 Aug 2021 15:00:51 -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=jSs7W93x; 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 EBA9A68A314; Wed, 11 Aug 2021 01:00:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7F06D68A2B2 for ; Wed, 11 Aug 2021 01:00:20 +0300 (EEST) Received: by mail-pj1-f50.google.com with SMTP id m24-20020a17090a7f98b0290178b1a81700so1299995pjl.4 for ; Tue, 10 Aug 2021 15:00:20 -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=bpsztM0wy7vgZUi9isglpvPzVmmwt9YI0VhVEx/TTR0=; b=jSs7W93xxEYz/UyAJU/y1bJxcpHTlGf5qVyvNCX+sHKLmX1CrF5+aAxHs+Lg0E9GpT pO8tZR68mDyCmLAyNXFe9vxuS3qjLAQXi7ss/toGIu+aQNEBWT8EuxaEw6ZDbxZ+00nj Ax0taZnPT6gEBGvSEvLDzw+eqH+VJzFEPxWqas8hpu8kkzoziGvk3pIYcfRmlZEmH63H EHzcDMxdMGIN2IwtUSf1aPIi8fYdxmuKCww/XAtmMi+CC3hgzdO0i7H0tk2TQE4EdFhA xaMP3c2vxfgqfXnePXp1JaByZAGFZZ7RAdRz+ocW7ZQvntlVwn8ZQL0E7mpI2R7c0bt4 geAA== 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=bpsztM0wy7vgZUi9isglpvPzVmmwt9YI0VhVEx/TTR0=; b=XakvgMU2cUAMmtLXUBzTo0pmt2YImS/GJb3pZW8NIKlBPswhkAxrMw7hLlbqkAUp25 JP6nDYlE+UwDpQDBxcHcBqSo4FimKA5cE2yrOH4q5ZRvehxpOfRhG9QQvG8wjOCNiNWT TZ3iAkZCRKT6XbR68RFy9emQvk/0XYF1Zes11imp0zCyyerescxuCUGIThenvtmYLOwn bddv12Tj1wnffZnACUc1SNWtnd0reqRlptYUTDDixXJLUtyu6CH/PldvaafGFZVJkMIv DXRK7pUhFgHLVdx9irGxRqAN86Yf0FUJpvynZeLdBzXSCd42RIRvs6C1VrqDx7H0QUbr tUCQ== X-Gm-Message-State: AOAM532HyEOu23uA1d9rAT4MB77tWzzYvEdsmWN2bk7Z9zqIdtDpdt/P ZWC3O63ZhoiFB2ABikQdAWV1+M/X3GE= X-Received: by 2002:a17:90b:3144:: with SMTP id ip4mr7235100pjb.22.1628632818733; Tue, 10 Aug 2021 15:00:18 -0700 (PDT) Received: from localhost.localdomain ([191.84.233.71]) by smtp.gmail.com with ESMTPSA id nv11sm4340998pjb.48.2021.08.10.15.00.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Aug 2021 15:00:18 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Aug 2021 19:00:01 -0300 Message-Id: <20210810220001.13494-3-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 3/3] avcodech/h264_picture: use 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: 6C0V1olyVj+u Signed-off-by: James Almer --- libavcodec/h264_picture.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libavcodec/h264_picture.c b/libavcodec/h264_picture.c index ff30166b4d..109a8ff31d 100644 --- a/libavcodec/h264_picture.c +++ b/libavcodec/h264_picture.c @@ -154,8 +154,7 @@ int ff_h264_replace_picture(H264Context *h, H264Picture *dst, const H264Picture av_assert0(src->tf.f == src->f); dst->tf.f = dst->f; - ff_thread_release_buffer(h->avctx, &dst->tf); - ret = ff_thread_ref_frame(&dst->tf, &src->tf); + ret = ff_thread_replace_frame(h->avctx, &dst->tf, &src->tf); if (ret < 0) goto fail; From patchwork Wed Aug 11 01:48:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 29416 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:8e8b:0:0:0:0:0 with SMTP id q133csp971980iod; Tue, 10 Aug 2021 18:49:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxjO0DAdJymn6TgBaHSqG0lMFvKlf1ItNKQ6UlpQKJT3tLRRiMtrZiykHBZ8mzgDxgy6PJD X-Received: by 2002:a17:906:388b:: with SMTP id q11mr1253038ejd.113.1628646563135; Tue, 10 Aug 2021 18:49:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628646563; cv=none; d=google.com; s=arc-20160816; b=zcDvenjBtq8A9oHgMtAQ/Y5eVcjJtQuI9ogZGm0muExSmX5AMLG5Vou/9SspXXDEME dkeDaiGJ6sm/IHZEqj+GkO9DD/m+/Wnv2FjufFeqahEplM5gcgEV4xdfgUjN1OB9jCEF IRoRx+lw04N1ucTSrQdvXPEyXCEjBdw4KgycQAqGFozbWoLemFXQEG72++GcGGwZuhrm AnIdMgbvNR8YYe4eow92CZ/zLSRV43d9/aUu4JvnPLWx+HUB5a3hHbZ++kdrPrEbg6cS kZSAAUZmOuKp8Hlsl9ERZMuVUnqCZ1Gh+quCYICwigCJdFQ3Y8ILiO5TPe/Wf5gATgFK /Wpg== 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=Tt+pyyVWMsyr8oLUQ72U3tX3Im6LiH2XwbFk6c26GP8=; b=vQZx/6MlBADHqCZ5DBOkExr37DJrcKjSJz0hvyraJC/YcpxfprHo6PheMt52LMCX4/ 68hMaFbRbBFl+ouooKx+a7+HjVLPFtgFPDqpAKjpfeS1fPl7c40676Bz3RDMkAZbaApi TTsFXLdfEBpqTkyw+tfRhlGNsow+iiJkgUXrBaUb+g5rAHNgMLRe/VjLZ1pKZ1I2Y6oT 0k8xJqrtrUxPZAmt6YaFhAz0IgVKAv9QQVKnqbuJhgC2UvNx0qatHdVO+R3lX5BeuPKv Nblxw/B3K0MO7NL5jWgMf8boCoHB0rAFANJpXM+0tdd7n3yCtzcxOPi4lgNwnqjnQ1aE 7Jew== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Iy3vBYos; 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 r7si21320105edo.180.2021.08.10.18.49.22; Tue, 10 Aug 2021 18:49:23 -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=Iy3vBYos; 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 CD5CA68A242; Wed, 11 Aug 2021 04:49:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 28F0B689C7E for ; Wed, 11 Aug 2021 04:49:13 +0300 (EEST) Received: by mail-pl1-f174.google.com with SMTP id b7so579105plh.7 for ; Tue, 10 Aug 2021 18:49:13 -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=mbCTrc7tTlHDJ0Vah691d7MN3082bgmz5IvfgOcDB+o=; b=Iy3vBYosU98dWfom8yprzjtAoxNjEkE1HQ4kMgKaWTW84FGyG74oDAA8f+fdrWiK3/ /SUEJM8BerGcN/BlPJP6b1vk/3icbYc+dfmFO4PLfN0tLyZLIcnWANx4jo7OcLiwMvWh BQcoZAsDwxJEVuKup/xqjBS9NTDncqzje4nRscaOZezZMF1FMHqr16t3UEW6TlW5D8ou PZkt0z/3gOu7qq4c5sYBK++Oe/ATawqXbLH07kz5hROriBk4W7V+d3KLho0VRoN7N44B 3F5lDoqXakRbX6gQLl51jHSRIaHnb9kya/XjaC4MQMDEcRdHQHaHOGIzkokDlIjbTcfy I6iw== 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=mbCTrc7tTlHDJ0Vah691d7MN3082bgmz5IvfgOcDB+o=; b=nIndgvik2iRszAck3Zw5bKhMOUmATz8MRdskEfgHOeedHr92/rw4Y8UQa04keHju9y NfM4lAM1OlLNsWjvpVIhai5VZW3uFhletzmJOoN7tOxhH/rcTsY8sh++wo9rYKn4m5+h bInIqXEZKjhWyWJfI6M3On02NhZY8GWU3q9wYf/QYisZcmicTaGVCPSESI8M28yzd2R5 D2/km8Pv/zSi8nXC+EZDGUz0HZfnxO6Up870FHG6PXEL5H8r2CJRmVm3UYpwMzX8MgWJ BfKI4rEsK3iDK3ZhsQ83tM1KEP8zai5kR0odFkpqpaPf58dnWOrPSO91NP+xwTrEcf2H 70tQ== X-Gm-Message-State: AOAM530iIqFAAmuUebNyX4ZsbeoPocNP0gIqP4AvAZMx9ThFZXwBHpQ7 Ypv/OpgMeHU7tO0itAoBV24mKbOGGSg= X-Received: by 2002:a17:902:9a46:b029:12c:9aae:daac with SMTP id x6-20020a1709029a46b029012c9aaedaacmr27441374plv.78.1628646550844; Tue, 10 Aug 2021 18:49:10 -0700 (PDT) Received: from localhost.localdomain ([191.84.233.71]) by smtp.gmail.com with ESMTPSA id f4sm30723158pgi.68.2021.08.10.18.49.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Aug 2021 18:49:10 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Aug 2021 22:48:57 -0300 Message-Id: <20210811014857.16493-1-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 4/4] avcodec/vp9: use 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: BWScaJBFbHvE Signed-off-by: James Almer --- libavcodec/vp9.c | 67 ++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index 874005a5ae..85f44b9d8c 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -186,6 +186,35 @@ fail: return AVERROR(ENOMEM); } +static int vp9_frame_replace(AVCodecContext *avctx, VP9Frame *dst, VP9Frame *src) +{ + int ret; + + ret = ff_thread_replace_frame(avctx, &dst->tf, &src->tf); + if (ret < 0) + return ret; + + ret = av_buffer_replace(&dst->extradata, src->extradata); + if (ret < 0) + goto fail; + + dst->segmentation_map = src->segmentation_map; + dst->mv = src->mv; + dst->uses_2pass = src->uses_2pass; + + ret = av_buffer_replace(&dst->hwaccel_priv_buf, src->hwaccel_priv_buf); + if (ret < 0) + goto fail; + + dst->hwaccel_picture_private = src->hwaccel_picture_private; + + return 0; + +fail: + vp9_frame_unref(avctx, dst); + return ret; +} + static int update_size(AVCodecContext *avctx, int w, int h) { #define HWACCEL_MAX (CONFIG_VP9_DXVA2_HWACCEL + \ @@ -1574,10 +1603,8 @@ static int vp9_decode_frame(AVCodecContext *avctx, void *frame, ((AVFrame *)frame)->pts = pkt->pts; ((AVFrame *)frame)->pkt_dts = pkt->dts; for (i = 0; i < 8; i++) { - if (s->next_refs[i].f->buf[0]) - ff_thread_release_buffer(avctx, &s->next_refs[i]); - if (s->s.refs[i].f->buf[0] && - (ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i])) < 0) + ret = ff_thread_replace_frame(avctx, &s->next_refs[i], &s->s.refs[i]); + if (ret < 0) return ret; } *got_frame = 1; @@ -1614,12 +1641,10 @@ static int vp9_decode_frame(AVCodecContext *avctx, void *frame, // ref frame setup for (i = 0; i < 8; i++) { - if (s->next_refs[i].f->buf[0]) - ff_thread_release_buffer(avctx, &s->next_refs[i]); if (s->s.h.refreshrefmask & (1 << i)) { - ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.frames[CUR_FRAME].tf); - } else if (s->s.refs[i].f->buf[0]) { - ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i]); + ret = ff_thread_replace_frame(avctx, &s->next_refs[i], &s->s.frames[CUR_FRAME].tf); + } else { + ret = ff_thread_replace_frame(avctx, &s->next_refs[i], &s->s.refs[i]); } if (ret < 0) return ret; @@ -1763,10 +1788,8 @@ static int vp9_decode_frame(AVCodecContext *avctx, void *frame, finish: // ref frame setup for (i = 0; i < 8; i++) { - if (s->s.refs[i].f->buf[0]) - ff_thread_release_buffer(avctx, &s->s.refs[i]); - if (s->next_refs[i].f->buf[0] && - (ret = ff_thread_ref_frame(&s->s.refs[i], &s->next_refs[i])) < 0) + ret = ff_thread_replace_frame(avctx, &s->s.refs[i], &s->next_refs[i]); + if (ret < 0) return ret; } @@ -1818,20 +1841,14 @@ static int vp9_decode_update_thread_context(AVCodecContext *dst, const AVCodecCo VP9Context *s = dst->priv_data, *ssrc = src->priv_data; for (i = 0; i < 3; i++) { - if (s->s.frames[i].tf.f->buf[0]) - vp9_frame_unref(dst, &s->s.frames[i]); - if (ssrc->s.frames[i].tf.f->buf[0]) { - if ((ret = vp9_frame_ref(dst, &s->s.frames[i], &ssrc->s.frames[i])) < 0) - return ret; - } + ret = vp9_frame_replace(dst, &s->s.frames[i], &ssrc->s.frames[i]); + if (ret < 0) + return ret; } for (i = 0; i < 8; i++) { - if (s->s.refs[i].f->buf[0]) - ff_thread_release_buffer(dst, &s->s.refs[i]); - if (ssrc->next_refs[i].f->buf[0]) { - if ((ret = ff_thread_ref_frame(&s->s.refs[i], &ssrc->next_refs[i])) < 0) - return ret; - } + ret = ff_thread_replace_frame(dst, &s->s.refs[i], &ssrc->next_refs[i]); + if (ret < 0) + return ret; } s->s.h.invisible = ssrc->s.h.invisible;