From patchwork Fri Dec 3 07:58:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soft Works X-Patchwork-Id: 31904 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp345911iog; Thu, 2 Dec 2021 23:58:30 -0800 (PST) X-Google-Smtp-Source: ABdhPJw0BoHv/5QA44+NHoiFajrsxPC27j8uRukUWqFMRK8U2ip7dlgySmq4KFkJ2yuWb3/yFXui X-Received: by 2002:a05:6402:430e:: with SMTP id m14mr24497032edc.93.1638518310532; Thu, 02 Dec 2021 23:58:30 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id qk8si3392174ejc.230.2021.12.02.23.58.30; Thu, 02 Dec 2021 23:58:30 -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; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=kNhrlxif; arc=fail (body hash mismatch); 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=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 805B368AE21; Fri, 3 Dec 2021 09:58:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam08olkn2062.outbound.protection.outlook.com [40.92.47.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 35EFF68A78A for ; Fri, 3 Dec 2021 09:58:20 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Uu4ybxprYCDhdAj8SV6qDpZwxU2+b0TNZaRZg0RACeA/iZgOQO3NHbExD6CyRG6IQbF+W0l7v6aeBbMz0MY/sABI3hTcnpiLjQ8DX4RNMgxWIyDF9HWxhKQs+y/oeNZZ29f8hHDtNl91CXMl0/S/KOrz0r+SXE181A6oODOtnANjELd6TH+YMlhZAdPEPrga5RULgaQlEEfvUTJe7wzEjgAhsyl4vhv+6d3tCLnmeE7CHa2ez1gUx5OGC5Y5THVF58HGQOMHMPmg4Chx18yEpg90VgQ6ZNyOavqLTfxwkK8zM6ukFQEn9Xd4KZqBM29auCRs3PlM2BIGQ5Whxvgw2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5kSgyQKj5Xj7Cje6N672nngntBkXKoOYtmtm5zHEOsY=; b=R5Y8yAAvQc/JKDjhVlK03cnAJHIjgMup6N/EvvJY0K5GuRWPEJH9ClVenfcj6g/bTY9WOQ0HB9uz6/uthyGSY2gZWV2roD3pd1AYKT8EAEBkHEsHyA/GE9qApgDdE3GqinGP87GkvWHDmmtyc2C5bcwW6lx9xbNGQrotg7ZWh1C7pnWKVKok4ArIcyeLGj2NTCSFgdGvbep8fmweRo/yR0dj5y2wCGP1sPCpAQIn8+zX+PcbWuccus3diz3r5U4SyWPnob61uX7gfcAT+s+Rc01FXMYfC4aD4LkVbgiYrCfiOofjL6rnMPpKwCsIPPBg1nX48WYpKYAZX9BQ/D8FMw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5kSgyQKj5Xj7Cje6N672nngntBkXKoOYtmtm5zHEOsY=; b=kNhrlxifwtDWrHbrMOJ1epOUhjtzCE/ypewrO6N11C6YHtGMUC9UFW7+Zvgx3bLC+ths9aToOU4TQZHfOQEuAevPXAyYX3iiW4a0iJU/9X7jhPC1RvBjf8YRTDriLUdiB6YU3YEKQdepvPHUq8+H7yzKT78g+O2JpK1j7lgT4vkLiSOjANjXahcgHaeBcRe3JoiffLJoVkenywl0EjAn4fc+1V6chuv4JbQUL8gKY9Vs+F/OehV2b16sj3KsO/DNeeqkYTcVkofOXZ4r3tzITqYXKi5gkyg4LUjM7CXlNCHvDhK+daVC/u5GpJ0yFEFT/qMtVuOVF48qZCabgdi0OQ== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by DM8P223MB0160.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.28; Fri, 3 Dec 2021 07:58:18 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::9c8d:fc63:9488:9775]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::9c8d:fc63:9488:9775%8]) with mapi id 15.20.4755.016; Fri, 3 Dec 2021 07:58:18 +0000 From: Soft Works To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v3 1/2] avutil/frame: Add av_frame_copy_side_data() function Thread-Index: AQHv9YpgUfzWeM78KviKBwamYt35zAEnmXJ6 Date: Fri, 3 Dec 2021 07:58:18 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [Bar9T+d4aRgC0nQ99LmrL4YkyZcRneYj] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 35457ee3-6b7d-4d6f-273d-08d9b632aae1 x-ms-traffictypediagnostic: DM8P223MB0160: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: sdXrIEfye3md2+km/CmOq11lVVmU6sv+ZYEDtfGmEXAgs1Jv4dbggR8bM2Oe16SskgPHtwgz5H1Rfr0QL9DwaHYbCNY2F9XnF3EdG4eDz+7FjkyXToUryLZyfhtv/ewlORL29Y7pu/wfYRsc8kOwqvIV+SHqBKJmrvXiv94ClcSvuS0hR0NhKvXYFqqrAoLj+pGijDkr4V4yancKnZq/R9yC4gzIAbkY5H/gq7ZkussGcUZ/7LkV3xlb8QnQ2Zd+2e0yzvtb/8tqmCgCWlOhl0xW62BH3teZIdGoJHdRTCuvqLBwUu9hf36QdkbNa/Akw6KhNL0KG2gNW0F1NtbUGlKBPDBQHV9tB/TAhRwRsCcL+9qdPrBr1nnTsIjq1zEzMsZi9ItO9qfUYHAeSm/zWlAtP/SseVJ3fVyFeNFSj28eq0IfhzTKTRjZEozM6l5OvIOTRGBof3TesKaDsNn2Y+OwXtGDInG1dt0EdkFkHiJ39TA1NUwq1atuhiEx51N3y/8IYvrVOuerGTYRQ9NyF0Q8wPYdoUkt9F5uDMTxSk3VH+6w+5FxICoILIlo+Y1rrh8/JQOM+prZU/E5HPmyqQ== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?Gd9XgBju4RknFANyN3pndsio8zk7?= =?utf-8?q?K0wiyuYy8dEp324MMnO3cI1gemGsZkXlI55tHT0KIjhTuCKnNbArke3tYueeX39I5?= =?utf-8?q?axaPBQodFQga3AEzJuP8KykUpME7S4Ky6t63j+wJYGeZ6FLdQ4NW8l1kDJ1g3qyRb?= =?utf-8?q?UjWijD8bwQwxsNa4F4cstUQA1x/s1lqb/nhA7UJCuYso5zN846S6G7O8W96HZ1uxU?= =?utf-8?q?G82MmQBD8UtdYir0nu9TEm26LOiU6PyVXDOSK1FtTSVtV7ggZozn9yrkhrUYKeUlC?= =?utf-8?q?UEriRzatVZABgMmtVYIKeQfebIR2FqlgDNJjdGV5pKcsmnCLJV/ZmYMY0rK1c+pax?= =?utf-8?q?k41VohcP3O/tThXFJ7nzMH2uXtW8raaGUw22rSzdV7jC6gwsWMdRa9adXqsr5F7Kw?= =?utf-8?q?6JQbNQpEVG7P++7/gf91G4tfz8yyUla6mr0JKnleLPh+VmJE2l04ZzVwH6tAjtyc1?= =?utf-8?q?SOl/d7i9DEh+LGuOZhfP26N24fFC29oLSYOz5w4rWTNdlgmh3p6QkEOJyEcs8LvWP?= =?utf-8?q?QQJkrFRTG9jS+qu6H5qSLoxVHWYom8qdQmAqnHRsaH8B2V7upp96nQjSPQXtOjFNI?= =?utf-8?q?hQTvrEDYzT7POIssP1bWgB+qDyqajOl0v7WV0hmaix+8zK4zyaqY9Z9nBTaE0uHjI?= =?utf-8?q?GlAzI6+FfIKgKt6NMr50UmWzmVhuBiXVyZmBdxtDMpRIxTAYrpi8lK3BqBsIqRfJh?= =?utf-8?q?ji6VoOI/y27p2AJOIaq3a61gHjingXBpHlg4oHy0C48FhE3YWTCbt0qD9yoFJHUQv?= =?utf-8?q?bQnH5ggDqJgsKIHE8HniZEe7dIGAHRl98qrcbaCLBIBdBtFiH4zHXLRfKAeQ7vSga?= =?utf-8?q?XRqhSdoJqt+dIP4Uy2rNxDLMUHbnM09vBKsscFWmSdiCCNB+2+K01jZaah45nhu/H?= =?utf-8?q?W3F7uv35o3HsSBT4lfevlHbeVHhcg7uqHnnELJbOFHqg=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-1ff67.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 35457ee3-6b7d-4d6f-273d-08d9b632aae1 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Dec 2021 07:58:18.0520 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM8P223MB0160 Subject: [FFmpeg-devel] [PATCH v3 1/2] avutil/frame: Add av_frame_copy_side_data() function 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: 0KOeamMWBkNE Signed-off-by: softworkz --- V3: Split commits, add version bump, use flag param doc/APIchanges | 3 +++ libavutil/frame.c | 58 ++++++++++++++++++++++++++------------------- libavutil/frame.h | 16 +++++++++++++ libavutil/version.h | 4 ++-- 4 files changed, 54 insertions(+), 27 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index bc9f4e38da..409f66ec4d 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2021-12-02 - xxxxxxxxxx - lavu 57.10.100 - frame.h + Add av_frame_copy_side_data() and AV_FRAME_COPY_PROPS_FORCECOPY flag. + 2021-11-22 - xxxxxxxxxx - lavu 57.9.100 - pixfmt.h Add AV_PIX_FMT_P210, AV_PIX_FMT_P410, AV_PIX_FMT_P216, and AV_PIX_FMT_P416. diff --git a/libavutil/frame.c b/libavutil/frame.c index d4d3ad6988..f5177c2667 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -256,6 +256,36 @@ int av_frame_get_buffer(AVFrame *frame, int align) return AVERROR(EINVAL); } +int av_frame_copy_side_data(AVFrame* dst, const AVFrame* src, int flags) +{ + for (unsigned i = 0; i < src->nb_side_data; i++) { + const AVFrameSideData *sd_src = src->side_data[i]; + AVFrameSideData *sd_dst; + if ( sd_src->type == AV_FRAME_DATA_PANSCAN + && (src->width != dst->width || src->height != dst->height)) + continue; + if (flags & AV_FRAME_COPY_PROPS_FORCECOPY) { + sd_dst = av_frame_new_side_data(dst, sd_src->type, + sd_src->size); + if (!sd_dst) { + wipe_side_data(dst); + return AVERROR(ENOMEM); + } + memcpy(sd_dst->data, sd_src->data, sd_src->size); + } else { + AVBufferRef *ref = av_buffer_ref(sd_src->buf); + sd_dst = av_frame_new_side_data_from_buf(dst, sd_src->type, ref); + if (!sd_dst) { + av_buffer_unref(&ref); + wipe_side_data(dst); + return AVERROR(ENOMEM); + } + } + av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); + } + return 0; +} + static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy) { int ret, i; @@ -293,31 +323,9 @@ static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy) av_dict_copy(&dst->metadata, src->metadata, 0); - for (i = 0; i < src->nb_side_data; i++) { - const AVFrameSideData *sd_src = src->side_data[i]; - AVFrameSideData *sd_dst; - if ( sd_src->type == AV_FRAME_DATA_PANSCAN - && (src->width != dst->width || src->height != dst->height)) - continue; - if (force_copy) { - sd_dst = av_frame_new_side_data(dst, sd_src->type, - sd_src->size); - if (!sd_dst) { - wipe_side_data(dst); - return AVERROR(ENOMEM); - } - memcpy(sd_dst->data, sd_src->data, sd_src->size); - } else { - AVBufferRef *ref = av_buffer_ref(sd_src->buf); - sd_dst = av_frame_new_side_data_from_buf(dst, sd_src->type, ref); - if (!sd_dst) { - av_buffer_unref(&ref); - wipe_side_data(dst); - return AVERROR(ENOMEM); - } - } - av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); - } + if (ret = av_frame_copy_side_data(dst, src, + force_copy ? AV_FRAME_COPY_PROPS_FORCECOPY : 0) < 0) + return ret; ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref); ret |= av_buffer_replace(&dst->private_ref, src->private_ref); diff --git a/libavutil/frame.h b/libavutil/frame.h index 753234792e..58da8c4cc3 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -812,6 +812,22 @@ int av_frame_copy(AVFrame *dst, const AVFrame *src); */ int av_frame_copy_props(AVFrame *dst, const AVFrame *src); +/** + * Copy actual data buffers instead of references. + */ +#define AV_FRAME_COPY_PROPS_FORCECOPY 1 + +/** + * Copy only side-data from src to dst. + * + * @param dst a frame to which the side data should be copied. + * @param src a frame from which to copy the side data. + * @param flags flags of type AV_FRAME_COPY_PROPS_*, controlling copy behavior. + * + * @return >= 0 on success, a negative AVERROR on error. + */ +int av_frame_copy_side_data(AVFrame* dst, const AVFrame* src, int flags); + /** * Get the buffer reference a given data plane is stored in. * diff --git a/libavutil/version.h b/libavutil/version.h index a2615cd299..0acb88cf40 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,8 +79,8 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 9 -#define LIBAVUTIL_VERSION_MICRO 101 +#define LIBAVUTIL_VERSION_MINOR 10 +#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \