From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id D0008405D7 for ; Fri, 27 May 2022 14:35:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8BAFC68B5AE; Fri, 27 May 2022 17:35:36 +0300 (EEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12olkn2092.outbound.protection.outlook.com [40.92.21.92]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A3E9668B537 for ; Fri, 27 May 2022 17:35:30 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AibWL6k9WVqNT0sGH7X3Vuw8J6c53xb1vSrla1wS/pRNWmz+ba/SqzYdHY9Nuj3ZogsZmaYsPSD2BfkVk6GYFr2ehApcCcgfeEt1UeqxGjwcc2tW1DH/Tj0EhKcke+XvHzaVx2MpQPDJXDDcteSKKbQdeGYrkLkCOxwJmoTtAIPEt4voe3NRUJgl8tnLkmqLey5dGb1CCwWVGAuSt0Z8ibefyuONlGq54PRThFZvKpMXqA3So8TpLENTIaq77Rm21NLKpkJSWRjkGH48fb6Le7xxbMbAROiqnNETtNJFuwhYHwgZawKWCi5gNTftC+lBq/wa3QT+hpV1uf1CWapajQ== 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=OVeezLTuUY/dp3o8nRduK1Bq3oPO/YSsIOGIONymFx4=; b=I1YGQl9WgVRsNUM4SO370oQEc1nsp5+NBLc8O4u9CrrWKGmOp35BUqDcsU/1DvLyGv9UBp6oDnWbw8J1J69608jO0xy3hBQreEqUhQBLmhOoyOmMR+8knuAnDiU6pYpKjtstOgPliPn7+XeiaaGlr2BrLLJ9RoZDsl6UfAdQRWV32UjpFmSRvmeAlRDbMEjve2MQBRJN5nLmYgPggfFpTU6vXCzqppVCL34dn3NBvTFHI6Fmrg5+zQV3bmEIvkZQPP2nBcSlPC+i3O1DJob727z6HDhJkkZOLkslc2blPfcEDhMX5Ml6WiSk8GFgab1V9v72/85+a1oRLIqsG8GnBw== 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=OVeezLTuUY/dp3o8nRduK1Bq3oPO/YSsIOGIONymFx4=; b=L8Ljz3pZbIzJQ0m3Ijlj/WAfKfG7h/P56oqDhV4lpVD6QG64/EzfpcZp/ZGtJhEPEw5rdvzCSYlG7zpCLkVC5e0fXzhJXCdVn10aHWBfgP7/GCVUfI49Dhs0cqPab9f5efndSjhWm99V4kXGx++ytuwA329dfmjOoyqkV6swHwbmXd6aCViHL/ySliKDD23HrhXbsxm8Ou1BRXzcDeAZi9LPUW/4Bo/au92778QqHvQE8lZ04FEe5mZGR7WfQo7o5lwMD0xOAp97pwjBQjq6sNts7LVP5uhYfmrTg5CJvujtyR/v5adzuFlgjYfHM6a91lCPuqs7tyjgOfVD9KDEDQ== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by DS7P223MB0456.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:9c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5273.19; Fri, 27 May 2022 14:35:27 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a%7]) with mapi id 15.20.5293.016; Fri, 27 May 2022 14:35:27 +0000 From: Soft Works To: softworkz , "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH 1/6] avutil/frame: Add av_frame_copy_side_data() and av_frame_remove_all_side_data() Thread-Index: AQHYcNfXS9prgXUaG0unRc11SasN860yx3Fw Date: Fri, 27 May 2022 14:35:27 +0000 Message-ID: References: <4ee6cb47db828e4a91f5e349fab2678c07a95f82.1653552529.git.ffmpegagent@gmail.com> In-Reply-To: <4ee6cb47db828e4a91f5e349fab2678c07a95f82.1653552529.git.ffmpegagent@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-tmn: [26x72Xqvb0TeW/Wm1zkhMdclxPy15lu2] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5ba79011-9dc4-4004-a770-08da3fee2469 x-ms-traffictypediagnostic: DS7P223MB0456:EE_ x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 1uCGxoRoz+zqDg4k6f9XFCC1ozi9D0+RVrStcso8pxCLvLIL95dYP+vbHMGDQ9SIaFHzxNwrjox06y7ML8Q102ipV7fIIRJYUiE43+A3IrSZlQAbLh5vmiHFolOOR8b539WPXY/RecQ3uVO1m1tMRPy9QaK/u96zO9PAZgkBoC7bp1diLsispFpNq0w6yQezfuSTfo7hE3LYUlD/RBG670RVUWgKXFjIi9OMDVc2b70yT1Fn2GzYBZKW9N9Um5o2MTcalEOxiHTjYiRhNSWlF7mzyKx/R+Y5GhlkNr3rFEf/fWLoCbe+4IvzCWakcY8rpxg3BFj8is52esRBUe8ePEWu0XA40jCiqbByeMctZtTiNT5KLl6/gu4qZybYQR/B8gPblyr6izXdkfyfxVObr7loOSX3U4ug2gQFWIa7KIofVQZkEF1uRKiflWwspIcUXAbdOV6NxqBf9TN0OxcLFGkVjvBsFQEh56hiOgqz6c3eI9WulWmVQ4Ad5xWxI3tY9rwo+k4/gQZzQL8lNw/HXlouyvDknWMebhsYUiS314BUcX8Ds4IT4lPPoClgllyq5A+L5jHgTjio3OKCY+vjOw== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?STcxbjVtQ0h6R1hCT0JjZmFlTkdSa1M5WGlucWFaNWw3dy9hNW1RZG1KaXZt?= =?utf-8?B?S1BPM1dkaFlCYXR5cXZteDdncHo2bGpJRktVOHlITXZqaDlQaHFNQ2RsVjBB?= =?utf-8?B?Z3FyRXk0T2RPLy9wZVY3WDBsTlFXeUtaMjAxbmlvVTJ1cTgrUE9LNG9rbGtw?= =?utf-8?B?S1Q1aXBSRHl2VkhjeEVzVHgvMUx0VjhpdElGZk1nd2h2Q1pQc2JZVmxLa1BJ?= =?utf-8?B?Nm5BempoZGh1bzdZclJ5dDkxRHdKNVpnSXRsMkRwUG02K0NxQUdYTGhlZlcv?= =?utf-8?B?RTV2aXNYQWdDUlFENUp1ZGp1UjhDbzExaEZ6WU9sajQ0VVZMYW9QZEZrcGtQ?= =?utf-8?B?MTF6cDRPSU5Ea3JVV1FnRlE4OTJKQk1ibjlXLytnS3RCaW15SUdRSGovQ0Uv?= =?utf-8?B?ZzZFRDdIMUxsMG5iR0k2bGx3ZlhtRCthcG5YSVJwbWovQnQ2SjgvdEtxbzY5?= =?utf-8?B?OHFxdlBFOFBKbzFFYTEyU2ViWTVDNVpoK0tjMCtYNTVIeC9aZkpVRG5vdGhr?= =?utf-8?B?QXhCeEpBVU40M2MyOFF5WWZOd2J1NkwrRHVyWFg0MStlR0dzV29WOFlZWUN1?= =?utf-8?B?K0dhMkJlQjFIV3l2ZnlUaHRSNVFDOUpXbVhtWnBRZ3RDNVZRajZ0UjNScmlS?= =?utf-8?B?bTJwaXhoNThUVm9vemhxY3FMSVM4enkvVmpReVo3V2J5TjVpRHMvUElsbi9m?= =?utf-8?B?My9LVFRhVFN5eXZTd1Jlbm4vNlp2UjBydkhNVlQvZDA1V0xxOGljSjliVDhq?= =?utf-8?B?eGkxR3NXZElLNm5EVnNzTzFtQ1NLK201RWVZN2dyclBWNUNLR04zU1ppMEsw?= =?utf-8?B?bWoybXladW1nNHdSTy9IRE05cVlRcktMTHZZYTlVSlR4Ukt4VFlQclQzbG9q?= =?utf-8?B?QlpSOGdEQ0c5NEN3Q0R1QUEwdVFmMkM1UWlCSTRhR2VzdkVDZENJQ0VYNmt1?= =?utf-8?B?aHJXSHpwTUVqQUpudmk2dkpXaThJK1YwSHluVlZjelUwcEcvQ0pDT0t1d2pT?= =?utf-8?B?MEgvRGp2UHB1Y0RTQm9ZbXgvd2Y0Wkl3ZCtSVDJqbThuVXdKLzVoNGYyblZs?= =?utf-8?B?ZWNUR1QxQjRUYnlwS2FPcVBPUzJkQ0plSWxqYUNDeWFWc3FXOUNzcmpaOXQ5?= =?utf-8?B?L05nbDZXSXJOMnJYVHdwdTY4MzhTVDEyTWFSZzNzWnFvM3JDMnVtQ2ZvSzJk?= =?utf-8?B?Q0xSMzlnckovLzFYUmluQ1dsNEdSVzNPS1E0dnlHcVpHYUdkUEp5anZwNVFD?= =?utf-8?B?V1JkTUZCcDBFYzZnZWpFdTlFbnFZZjZTQk1PcEFCUmpvOFI2WW0raHRPd0NO?= =?utf-8?B?czRqUDVNNEk2Wk82N0wyZkQ2U2lEMEJWMHlUZ3RUaTBaV1ZqVVJZK29OUEtu?= =?utf-8?B?MFhOUzNQRkFYajFTemNFbVl1WEJod2VRamh3SFdMT3JYRk8rbE0veHhKd1B3?= =?utf-8?B?TWxoSlBISnZqZnNQL21mOXoyUWdMN3NhU09oeVduS2toTTc0Q0NZbTM1VjV5?= =?utf-8?B?YXprRXY0N1c4ZU1QY0FZeWZIdG5IUW16bDI0MnJtZVI2UmVvTU5GbmFjU2hK?= =?utf-8?B?MnBiTW1xbHBiS3BMSGlFQWI0VmNhdU93b1l3ZmdmWnptTUE5NGdUcUZKcnJU?= =?utf-8?B?Z3F4K2JEd09wNTlSQTIvbnlYQ3RsbWE1eW5iVEpWSFNiTW5McFNCbkRPN21P?= =?utf-8?B?RWptTC9KTFY4dnNjQVZaeFk0Sm9sNTQ3M1J1T3Q2MVpRS2NDTzRwWWx2OUVK?= =?utf-8?B?dXg4TDN1amtkSWVLMFc0UkhsRXRLd0hHUWpvT3VWOVFERzlFSDN2WUZLU0pv?= =?utf-8?B?RFVJak1LWklqN2c2QW9VR1hyOWd5OCt3TWdsdVc0ZmVpazF6T2NEM3diR0Yz?= =?utf-8?B?VWxHNzlQVlZueVF2aTZLbU12U0tXbWVUdVkzeURIQVhVNHlxVTNrd3Q3RlAx?= =?utf-8?Q?+iwnWn21gss=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: 5ba79011-9dc4-4004-a770-08da3fee2469 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 May 2022 14:35:27.1548 (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: DS7P223MB0456 Subject: Re: [FFmpeg-devel] [PATCH 1/6] avutil/frame: Add av_frame_copy_side_data() and av_frame_remove_all_side_data() 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: > -----Original Message----- > From: softworkz > Sent: Thursday, May 26, 2022 10:09 AM > To: ffmpeg-devel@ffmpeg.org > Cc: softworkz ; softworkz > > Subject: [PATCH 1/6] avutil/frame: Add av_frame_copy_side_data() and > av_frame_remove_all_side_data() > > From: softworkz > > Signed-off-by: softworkz > Signed-off-by: Anton Khirnov > --- > doc/APIchanges | 4 +++ > libavutil/frame.c | 67 +++++++++++++++++++++++++++---------------- > -- > libavutil/frame.h | 32 ++++++++++++++++++++++ > libavutil/version.h | 2 +- > 4 files changed, 78 insertions(+), 27 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 337f1466d8..e5dd6f1e83 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -14,6 +14,10 @@ libavutil: 2021-04-27 > > API changes, most recent first: > > +2022-05-26 - xxxxxxxxx - lavu 57.26.100 - frame.h > + Add av_frame_remove_all_side_data(), av_frame_copy_side_data(), > + AV_FRAME_TRANSFER_SD_COPY, and AV_FRAME_TRANSFER_SD_FILTER. > + > 2022-05-23 - xxxxxxxxx - lavu 57.25.100 - avutil.h > Deprecate av_fopen_utf8() without replacement. > > diff --git a/libavutil/frame.c b/libavutil/frame.c > index fbb869fffa..bfe575612d 100644 > --- a/libavutil/frame.c > +++ b/libavutil/frame.c > @@ -271,9 +271,45 @@ FF_ENABLE_DEPRECATION_WARNINGS > return AVERROR(EINVAL); > } > > +void av_frame_remove_all_side_data(AVFrame *frame) > +{ > + wipe_side_data(frame); > +} > + > +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 ((flags & AV_FRAME_TRANSFER_SD_FILTER) && > + sd_src->type == AV_FRAME_DATA_PANSCAN && > + (src->width != dst->width || src->height != dst- > >height)) > + continue; > + if (flags & AV_FRAME_TRANSFER_SD_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); > + } > + return 0; > +} > + > static int frame_copy_props(AVFrame *dst, const AVFrame *src, int > force_copy) > { > - int ret, i; > + int ret; > > dst->key_frame = src->key_frame; > dst->pict_type = src->pict_type; > @@ -309,31 +345,10 @@ 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_TRANSFER_SD_COPY : 0) | > + AV_FRAME_TRANSFER_SD_FILTER) < 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 33fac2054c..a868fa70d7 100644 > --- a/libavutil/frame.h > +++ b/libavutil/frame.h > @@ -850,6 +850,30 @@ int av_frame_copy(AVFrame *dst, const AVFrame > *src); > */ > int av_frame_copy_props(AVFrame *dst, const AVFrame *src); > > + > +/** > + * Copy side data, rather than creating new references. > + */ > +#define AV_FRAME_TRANSFER_SD_COPY (1 << 0) > +/** > + * Filter out side data that does not match dst properties. > + */ > +#define AV_FRAME_TRANSFER_SD_FILTER (1 << 1) > + > +/** > + * Copy all 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 a combination of AV_FRAME_TRANSFER_SD_* > + * > + * @return >= 0 on success, a negative AVERROR on error. > + * > + * @note This function will create new references to side data > buffers in src, > + * unless the AV_FRAME_TRANSFER_SD_COPY flag is passed. > + */ > +int av_frame_copy_side_data(AVFrame* dst, const AVFrame* src, int > flags); > + > /** > * Get the buffer reference a given data plane is stored in. > * > @@ -901,6 +925,14 @@ AVFrameSideData *av_frame_get_side_data(const > AVFrame *frame, > */ > void av_frame_remove_side_data(AVFrame *frame, enum > AVFrameSideDataType type); > > +/** > + * Remove and free all side data instances. > + * > + * @param frame from which to remove all side data. > + */ > +void av_frame_remove_all_side_data(AVFrame *frame); > + > + > > /** > * Flags for frame cropping. > diff --git a/libavutil/version.h b/libavutil/version.h > index 1b4b41d81f..2c7f4f6b37 100644 > --- a/libavutil/version.h > +++ b/libavutil/version.h > @@ -79,7 +79,7 @@ > */ > > #define LIBAVUTIL_VERSION_MAJOR 57 > -#define LIBAVUTIL_VERSION_MINOR 25 > +#define LIBAVUTIL_VERSION_MINOR 26 > #define LIBAVUTIL_VERSION_MICRO 100 > > #define LIBAVUTIL_VERSION_INT > AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ > -- > ffmpeg-codebot @Anton - I have integrated your proposed changes in this patch but Kept the av_frame_copy_side_data() name for the function. Would you be OK with this? I understand that "copy" is ambiguous. You said that without parameter it doesn't really do a copy. But while it doesn't create independent copies of the data buffers, it still "copies" the references to the side data, that's why I would consider the term "copy" still to be applicable. Please let me know what you think. Thanks, sw _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".