From patchwork Wed Nov 8 22:55:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 5933 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp1324322jah; Wed, 8 Nov 2017 14:55:21 -0800 (PST) X-Google-Smtp-Source: ABhQp+SFvoXNpKYCvDQ5/ucfB7XKW5izYQxnzJaNNKpFLN4kg28Sz8Jc3HbzBZI7gtQE5og6HNrp X-Received: by 10.223.166.103 with SMTP id k94mr1743746wrc.22.1510181721363; Wed, 08 Nov 2017 14:55:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510181721; cv=none; d=google.com; s=arc-20160816; b=HBGTh4C8+kXouCz8VJ2jJG1O7oajldTPPHBO+pSUHeZyG01fBO1xYQgJ2XCG/ZT8tS bGJeJA8qGpa6hxIyai0LXpg2MFuZzh7h6MfjMOSojkwjNrexC/+DHeAsFIvMFEPtd5Pq zxzEXZ+guSqYE8vBX1ZwhC3OUG9fuswUTKUDgtx8OHUSbg52qgksWr9dACef3dzXFhml yoJJ/WjwKHkbLPJTLA5v4HJX5yiYG4mp9fYZADc7GedbZP8hynNc7ZE1XmAMJtS+Nj0n Ixx6Gdw7Qy+FviHGIsn8Bm+26kUosEUVR7EeTQ/OWmFUJB+QAykX2EeA0FVZT3vc8hs6 f5Xg== 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:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:delivered-to :arc-authentication-results; bh=2+7zu6FRvc5lsNCd+33WbDJMfEWgU8GFzlb5hioFTx8=; b=KHhG1OYlvzYFNPzH/bYvvsQ9uZrEiPo4r21n515B8awWRjU5NPhKG6+ZUayK9iSpzP hiz5Muf951sx5oew0rNjiEA+vZesodjNZiHBOo50KpTP3zPD7O6ySRbqs1LA9Ucxm7sX CU1O4f+EgG4WoRU/5LI0RnlAIobL3h7KdRi8h+9KJnGhcfZ/yDcDgmSMbBGv3ZbQFOtl Vn9c37Pob+efZewS9c3di6pNVSLStybUHOQL0InAOeEnqoTKJBukx3LpaCRHaRlD6zon YsohMFmmsbIuWE1jjA7GuwHRAuBeoxzAfpLf7S0cALl+9bA/8S3OifQQ9qzJcyTFp64l vcdQ== 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 c7si4286945wrf.446.2017.11.08.14.55.20; Wed, 08 Nov 2017 14:55:21 -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 D0F16680D53; Thu, 9 Nov 2017 00:55:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vie01a-qmta-pe02-2.mx.upcmail.net (vie01a-qmta-pe02-2.mx.upcmail.net [62.179.121.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E3666680418 for ; Thu, 9 Nov 2017 00:55:04 +0200 (EET) Received: from [172.31.218.51] (helo=vie01a-dmta-pe07-3.mx.upcmail.net) by vie01a-pqmta-pe02.mx.upcmail.net with esmtp (Exim 4.88) (envelope-from ) id 1eCZFd-00010s-4k for ffmpeg-devel@ffmpeg.org; Wed, 08 Nov 2017 23:55:17 +0100 Received: from [172.31.216.43] (helo=vie01a-pemc-psmtp-pe01) by vie01a-dmta-pe07.mx.upcmail.net with esmtp (Exim 4.88) (envelope-from ) id 1eCZFX-00014i-IS for ffmpeg-devel@ffmpeg.org; Wed, 08 Nov 2017 23:55:11 +0100 Received: from localhost ([213.47.41.20]) by vie01a-pemc-psmtp-pe01 with SMTP @ mailcloud.upcmail.net id Xav11w00Q0S5wYM01av2lU; Wed, 08 Nov 2017 23:55:02 +0100 X-SourceIP: 213.47.41.20 From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Wed, 8 Nov 2017 23:55:00 +0100 Message-Id: <20171108225500.3379-1-michael@niedermayer.cc> X-Mailer: git-send-email 2.15.0 Subject: [FFmpeg-devel] [PATCH] avutil/frame: Add private_ref to AVFrame 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This gives FFmpeg libs a field that they can freely and safely use. Avoiding the need of wraping of a users opaque_ref field and its issues. Signed-off-by: Michael Niedermayer --- libavutil/frame.c | 8 +++++++- libavutil/frame.h | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index 982fbb5c81..662a7e5ab5 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -383,12 +383,17 @@ 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; } @@ -524,6 +529,7 @@ void av_frame_unref(AVFrame *frame) av_buffer_unref(&frame->hw_frames_ctx); av_buffer_unref(&frame->opaque_ref); + av_buffer_unref(&frame->private_ref); get_frame_defaults(frame); } diff --git a/libavutil/frame.h b/libavutil/frame.h index 0c6aab1c02..7b9bec054a 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -563,6 +563,18 @@ typedef struct AVFrame { /** * @} */ + /** + * AVBufferRef for free use by libavcodec / libavfilte / .... Code outside + * the FFmpeg libs will never + * check or change the contents of the buffer ref. FFmpeg calls + * av_buffer_unref() on it when the frame is unreferenced. + * av_frame_copy_props() calls create a new reference with av_buffer_ref() + * for the target frame's private_ref field. + * + * The field should be set to NULL by the FFmpeg libs before passing a frame + * to the user. + */ + AVBufferRef *private_ref; } AVFrame; #if FF_API_FRAME_GET_SET