From patchwork Tue Oct 17 22:57:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rostislav Pehlivanov X-Patchwork-Id: 5616 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp719824jah; Tue, 17 Oct 2017 16:05:19 -0700 (PDT) X-Received: by 10.223.138.208 with SMTP id z16mr4852167wrz.152.1508281519005; Tue, 17 Oct 2017 16:05:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508281518; cv=none; d=google.com; s=arc-20160816; b=rkInHEqtyGCSMKeKbMkT9rVW/tPf7AGkcSc7+dXl/cTVG792jDdETfHUH/cm8mJsWk MugDLKxgDRBNWDFdL2qXLIMBlpJk+BRl7rQ4fj2efDPF5VTue2/7bFbx1w99LlK6uu8j p2AgvJpT8kK0IQH5mDTDBKWFfVpoH9bxxhpQDivKs29M7TKNrPR5dz7kHzcfdyeQUYuy r++LXLkDwEuaQkfh85ISRLQSnFL8BzZN9eykGR8LC8c+mwqwobl52/zgKceXS8J2JZeS rKFZW0KxAmkfGU3PtJ4sTGo32H59vYYhHwD7/JCzQaoz/H5GJ2ALE+0WEGjcaWJVDrre bpxg== 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:dkim-signature:delivered-to:arc-authentication-results; bh=MbQ1J8RgQgZaQzNrftvDg1WncJPRTTr40Dr0aT58NoE=; b=hf1wqC1EPP7Y4zdf0DKSPtgZBK4wsz4SqYbDg4sQVW1v9ExWPgeCAoKoqkuZhbK1RW YmWDGUjbLJTPCF8htgyA1jtshvfZOP6xcb8uLOzA2H427q5M1v5h2RRDouuo7W3YuDDA wbwjaGlMngSfrnwhAsZJzWmHjsfiTJnq/9XuIy36w/JQG/jHVPFMv9evzYKcHkzUrLgR aWocwwh5fHK5mAwmxt4ESICapas0Ag/37aN2HKQJ/fYQlqXcvx135/qDv4UspdEbwzaC gpjIqiaxxcFQrJpAdBbc2vAXX3MtQXcXERoZDPFQBvRhrsGT6tja8g+SKFhHZIpCHzCn 470w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=SM8y/7Te; 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=NONE 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 w10si8735104wrg.270.2017.10.17.16.05.18; Tue, 17 Oct 2017 16:05:18 -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=SM8y/7Te; 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=NONE 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 9CF90689A7F; Wed, 18 Oct 2017 02:05:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 01EA36898A9 for ; Wed, 18 Oct 2017 02:05:06 +0300 (EEST) Received: by mail-wr0-f193.google.com with SMTP id u5so3252257wrc.5 for ; Tue, 17 Oct 2017 16:05:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Yt/mhb31qwBn7ihQ0gvbHRmXHFOs+/GwSRdK4/3ddcQ=; b=SM8y/7Tel51+0M3qNj8KTe+bhurRCQlwMMRYPhTo+RpgvOOgz/Y16CxIJppjrLq7cc gSuicNfdUvmKbqUr2Gtmm3OkU6IyF1fDyubU30mciDX975bWJ3FxrD1/GG7P1q8Fcpjo icB+4gQqoNtKc27Pj81L+hWWz0SAL4Z21bOMtWTrNUERJGJPRqcNyI1fegPkSt9i7wd3 smiI8hLy3ggytpNotVwGDT0fn86rqXxXCis7IOW1HMo2mFMwNaeOR+q4RQ6F2exp04W3 ypMV2VbY+GzB8bBptlPl8EQWSzWCguO4Tbz4k7PNl2MHWYS0Q68HrCDJIphiuOB6uM+a QLUg== 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=Yt/mhb31qwBn7ihQ0gvbHRmXHFOs+/GwSRdK4/3ddcQ=; b=iRGviOMLJu2qz2Itkdm9F4aXAt/HAl2r+GXoG1j9zHJ8I+tnXZriTZbYMWqpKwR9Vy Ky4SKHMb4kWvXPkpFzaTCdQkuwkt25FwYVoEHE+y/kVYBamZ2KUxRwsuhGZ24SWpw4OK 8Ik6OzDaBtjszTkjRm2FQ3I9a/0m+BnMK88UGm2SX3tPY+SzD5Qc5ubUum2us9wIR3Hy hZFWEROX5YI5Dy4ZU+uM14tbDRHesoYXcaA90FeNL4aN35LQtNvfooirUPIbbHjKuaXS yecA1JYiE/0fdMCTzoLtm52rgz33gb6EyYVBqJ0xNh1EpxBXY0c78eyBmDWo1RXbwwwK XCuA== X-Gm-Message-State: AMCzsaWFCBhdyAo4hmX1ALYDNVHtuAH3nsEzefMlfzFc5F+bRsAqKHA3 sU4BUpYTOt3hjD3ic+oI8RTocha0 X-Google-Smtp-Source: ABhQp+QT/DlVLVziKAN6EUgjVGY7PKr/o5x+ZVR0sywakBpFjdPnkyIeA2d6hUnXRTi2lqTvzCl6Zg== X-Received: by 10.223.134.154 with SMTP id 26mr5248119wrx.137.1508281052469; Tue, 17 Oct 2017 15:57:32 -0700 (PDT) Received: from moonbase.pars.ee ([2a00:23c4:7c83:f700:7514:bd5a:bfd8:d410]) by smtp.gmail.com with ESMTPSA id 92sm6487273wrd.15.2017.10.17.15.57.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Oct 2017 15:57:31 -0700 (PDT) From: Rostislav Pehlivanov To: ffmpeg-devel@ffmpeg.org Date: Tue, 17 Oct 2017 23:57:28 +0100 Message-Id: <20171017225728.25132-1-atomnuker@gmail.com> X-Mailer: git-send-email 2.15.0.rc1.287.g2b38de12cc In-Reply-To: <20171016150219.22089-1-atomnuker@gmail.com> References: <20171016150219.22089-1-atomnuker@gmail.com> Subject: [FFmpeg-devel] [PATCH v2] frame: add an av_frame_new_side_data_from_buf function 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: Rostislav Pehlivanov MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Rostislav Pehlivanov --- libavutil/frame.c | 38 ++++++++++++++++++++------------------ libavutil/frame.h | 13 +++++++++++++ 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index d5fd2932e3..b5a2b2f842 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -26,11 +26,6 @@ #include "mem.h" #include "samplefmt.h" - -static AVFrameSideData *frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf); - MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp) MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_duration) MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_pos) @@ -356,8 +351,10 @@ FF_ENABLE_DEPRECATION_WARNINGS } memcpy(sd_dst->data, sd_src->data, sd_src->size); } else { - sd_dst = frame_new_side_data(dst, sd_src->type, av_buffer_ref(sd_src->buf)); + AVBufferRef *buf = av_buffer_ref(sd_src->buf); + sd_dst = av_frame_new_side_data_from_buf(dst, sd_src->type, buf); if (!sd_dst) { + av_buffer_unref(&buf); wipe_side_data(dst); return AVERROR(ENOMEM); } @@ -636,9 +633,9 @@ AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane) return NULL; } -static AVFrameSideData *frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf) +AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, + enum AVFrameSideDataType type, + AVBufferRef *buf) { AVFrameSideData *ret, **tmp; @@ -646,7 +643,11 @@ static AVFrameSideData *frame_new_side_data(AVFrame *frame, return NULL; if (frame->nb_side_data > INT_MAX / sizeof(*frame->side_data) - 1) - goto fail; + return NULL; + + ret = av_mallocz(sizeof(*ret)); + if (!ret) + return NULL; tmp = av_realloc(frame->side_data, (frame->nb_side_data + 1) * sizeof(*frame->side_data)); @@ -654,10 +655,6 @@ static AVFrameSideData *frame_new_side_data(AVFrame *frame, goto fail; frame->side_data = tmp; - ret = av_mallocz(sizeof(*ret)); - if (!ret) - goto fail; - ret->buf = buf; ret->data = ret->buf->data; ret->size = buf->size; @@ -666,17 +663,22 @@ static AVFrameSideData *frame_new_side_data(AVFrame *frame, frame->side_data[frame->nb_side_data++] = ret; return ret; -fail: - av_buffer_unref(&buf); - return NULL; } AVFrameSideData *av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, int size) { + AVBufferRef *buf = av_buffer_alloc(size); + if (!buf) + return NULL; - return frame_new_side_data(frame, type, av_buffer_alloc(size)); + AVFrameSideData *ret = av_frame_new_side_data_from_buf(frame, type, buf); + if (!ref) { + av_buffer_unref(&buf); + return NULL; + } + return ret; } AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, diff --git a/libavutil/frame.h b/libavutil/frame.h index abe4f4fd17..bc01b4f0dd 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -762,6 +762,19 @@ AVFrameSideData *av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, int size); +/** + * Add a new side data to a frame from an existing AVBufferRef + * + * @param frame a frame to which the side data should be added + * @param type type of the added side data + * @param buf the AVBufferRef to add as side data + * + * @return newly added side data on success, NULL on error + */ +AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, + enum AVFrameSideDataType type, + AVBufferRef *buf); + /** * @return a pointer to the side data of a given type on success, NULL if there * is no side data with such type in this frame.