From patchwork Mon Sep 25 01:06:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 5254 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.36.26 with SMTP id f26csp2081754jaa; Sun, 24 Sep 2017 18:07:58 -0700 (PDT) X-Received: by 10.223.168.105 with SMTP id l96mr4961731wrc.248.1506301678317; Sun, 24 Sep 2017 18:07:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506301678; cv=none; d=google.com; s=arc-20160816; b=vlnBx2lB5AfrxSXc7UVko/3ZqmTmJf0rjhWNM/YdN5j8mcGgZpNvojILqrSCfMnCBk RIL0JL6A5RO3e9gjNj4cV3ub0UNVMPxMF2hosWXTbd+3pYlEUZgBISBSzqB6NMCYFAC4 ZjKBnDG87XuXSro3DikdV/KxUO8BABIkEnRb88FPMKNpFoW0a2l2j7QYqS8iXGUIpdVJ 5K5mcDUz0KkBB2jRU/42cpcBlPqfCaKbWVT4uMA+sjB4B6ZimDUhz9bGp8aML38ekWWc DUfXzwtPeLVPspLFnbq1MAq11shVN2v/tpgxHLo0k9q1qJMVszwYD0LgoPtoFO4Q+HcH HmZw== 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:dkim-signature :delivered-to:arc-authentication-results; bh=HIvCbCLZ8L+LjRssdlnxNDh99hJplnQ4dpMSZleeMB0=; b=cgq6wCLDFwynNlIP8TnfLVR1iJIFbwC38Jsn69eq4xJUtplR80wiHKB+klpHbYaNDF EdXfJ/t8rNEzP9rDcrh3w8/gCdU4U1UEhf8TeSGpTv1fatfCFWX7MxoAJulcabNWu9Us 05Oc5Qqs/rKtmlClBY5CGyLAhZdxvcgrTuuoO3DC39mZr2i1VPA92HqYP1XVq85JgmWM gHvzdYvkFl7nu7JdJGW8ujl3L0ls8NLtz+Sz0npmQFnb4axqPJx16IPozhTTwATy8f4x GYyQ+Xrk069nei5uLViTDKyoS9/YqYI3O1LquNLU2yGtmV9E9TkD+Ud/1Z/cHr71yM4a WgqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=YHQe8pYS; 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 48si4187429wrb.131.2017.09.24.18.07.57; Sun, 24 Sep 2017 18:07:58 -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=YHQe8pYS; 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 12A1F680CF8; Mon, 25 Sep 2017 04:07:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f193.google.com (mail-qk0-f193.google.com [209.85.220.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 81E2068049B for ; Mon, 25 Sep 2017 04:07:29 +0300 (EEST) Received: by mail-qk0-f193.google.com with SMTP id c69so3976340qke.5 for ; Sun, 24 Sep 2017 18:07:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=6hMCbIRn+/lrGxvL98is9pb68fzBoXIF/XGmd0Nhzps=; b=YHQe8pYSa5C/ROPwsbZvCZde/MHTgASE65hikIr/ZfBtoPW40Lx1/c5t6IQKSjUKLV 803oNNrb31y9p2imcpctH4vgJk6bmX2nNXwJ3Ms7I4rTEJRtuHl7EQsNhkxczYwkSLfC z8XviqY1Lnkzsqnv1Un5WRHAKLhgHltG0TpXJjyL7NXUlwqoZOoIekgeEt2U+v/iUPj4 65vwPhdt+POUrHc8MsL8fxCw5CWG6cKX2H1v9uHoK3qD5aDC4uTUHOBMLe1N5Ws5OJDO Z5jRP25Ju4oqSfVLEnd35qDAJUiGQbsebaPuSruk4ViVprFyeXIS3UaqkVb3ytyoP2OY GgQA== 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; bh=6hMCbIRn+/lrGxvL98is9pb68fzBoXIF/XGmd0Nhzps=; b=mFltnP7baZyjB3ckvvrm8lbbs4OMjm/SnE+WCSIPenvobtLC+qcmbETwxlSJS9l4tu O8vkXztS9HapLvTGFF9rKiQC9z2ZOfp7tVKYUKWpC51rum31nYhxbZClZuApKVk/Q9od kBf5DSblU+7JWEzIi9eiIGNRHh9hH8NLnTKDGcDT4ClCsxYmCPtmPm0F3GNfZ83Bwc0Y LkSlJqd9n+1WE5jDq+TA2nfGljzpZl2LZBjOT4zhI0HSCqdrHbW3phW7vZLNKaaKkHmG FzvStGdxJVLucNQ54/PCKkwp41D5mmbbnBa/lt025/p3rH1UtwKUBH+OAuq7fOWUlLGZ qlQQ== X-Gm-Message-State: AHPjjUjvDPBBP4bIUxEH29cvxNQIBPARNHUgRzmTLtJu70NRF+odDHn2 ROEyvPFDPdRSyZHVU9Nvy63cww== X-Google-Smtp-Source: AOwi7QBOvphTwDC9+ERsK9VBlXvOf2tO4xk0vgWNDVg9bxpacHGVWIs/uTG7MT8fanmAq+zP6XwSEA== X-Received: by 10.55.126.2 with SMTP id z2mr8503893qkc.200.1506301657718; Sun, 24 Sep 2017 18:07:37 -0700 (PDT) Received: from localhost.localdomain ([181.231.68.242]) by smtp.gmail.com with ESMTPSA id q51sm4250626qtk.18.2017.09.24.18.07.36 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 24 Sep 2017 18:07:37 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 24 Sep 2017 22:06:09 -0300 Message-Id: <20170925010612.9824-1-jamrial@gmail.com> X-Mailer: git-send-email 2.14.1 Subject: [FFmpeg-devel] [PATCH 1/4] avcodec/avpacket: add av_packet_copy_side_data() 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" It's added as a replacemet of av_copy_packet_side_data() using the proper av_packet_* namespace, and differs from it in the following ways: - Side data already allocated and copied is properly freed in case of failure. - The dst packet is unchanged in case of failure instead of being unreffed. Signed-off-by: James Almer --- doc/APIchanges | 3 +++ libavcodec/avcodec.h | 16 ++++++++++++++++ libavcodec/avpacket.c | 41 +++++++++++++++++++++++++++++++++++++++++ libavcodec/version.h | 4 ++-- 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index d06144f1e9..2d3f470186 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2015-08-28 API changes, most recent first: +2017-09-xx - xxxxxxx - lavc 57.107.100 - avcodec.h + Add av_packet_copy_side_data(). + 2017-xx-xx - xxxxxxx - lavu 55.76.100 / 56.6.0 - pixdesc.h Add av_color_range_from_name(), av_color_primaries_from_name(), av_color_transfer_from_name(), av_color_space_from_name(), and diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 07d9f3e255..655e6abbde 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -4624,7 +4624,10 @@ int av_copy_packet(AVPacket *dst, const AVPacket *src); * Copy packet side data * * @return 0 on success, negative AVERROR on fail + * + * @deprecated Use av_packet_copy_side_data */ +attribute_deprecated int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); /** @@ -4664,6 +4667,19 @@ uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size); +/** + * Copy packet side data from src to dst. + * + * @see av_packet_copy_props + * @see av_packet_free_side_data + * + * @param dst Destination packet + * @param src Source packet + * + * @return 0 on success, a negative AVERROR on error. On failure, dst is unchanged. + */ +int av_packet_copy_side_data(AVPacket *dst, const AVPacket *src); + /** * Shrink the already allocated side data buffer * diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index b07180eac8..33e325c9ed 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -582,6 +582,47 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, return AVERROR(ENOENT); } +int av_packet_copy_side_data(AVPacket *dst, const AVPacket *src) +{ + AVPacketSideData *side_data; + int i, side_data_elems = 0; + + if (!src->side_data_elems) + return 0; + + side_data = av_malloc_array(src->side_data_elems, sizeof(*src->side_data)); + if (!side_data) + return AVERROR(ENOMEM); + + for (i = 0; i < src->side_data_elems; i++) { + AVPacketSideData *sd_src = &src->side_data[i]; + AVPacketSideData *sd_dst = &side_data[i]; + + if ((unsigned)sd_src->size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) + goto fail; + + sd_dst->data = av_mallocz(sd_src->size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!sd_dst->data) + goto fail; + + memcpy(sd_dst->data, sd_src->data, sd_src->size); + sd_dst->size = sd_src->size; + sd_dst->type = sd_src->type; + side_data_elems++; + } + dst->side_data = side_data; + dst->side_data_elems = side_data_elems; + + return 0; + +fail: + for (i = 0; i < side_data_elems; i++) + av_free(side_data[i].data); + av_free(side_data); + + return AVERROR(ENOMEM);; +} + int av_packet_copy_props(AVPacket *dst, const AVPacket *src) { int i; diff --git a/libavcodec/version.h b/libavcodec/version.h index e1224752bd..10d9ac4eb3 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,8 +28,8 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 57 -#define LIBAVCODEC_VERSION_MINOR 106 -#define LIBAVCODEC_VERSION_MICRO 101 +#define LIBAVCODEC_VERSION_MINOR 107 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \