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 ESMTPS id 2D6874A852 for ; Wed, 29 Jan 2025 12:29:34 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4C91F68BA00; Wed, 29 Jan 2025 14:29:30 +0200 (EET) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2081.outbound.protection.outlook.com [40.92.59.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 41BEE68B851 for ; Wed, 29 Jan 2025 14:29:23 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NtDIpCE/+LOlStPaogZfZVBRj8BlMTmFMotMhh0cNGp+tGesK34IZzVlDBl0F/Nti3Yspt+lh712wYD+k3SZogoqkM5bJ63NofFccfNZOo6zWTR6Y/m4JghgySDdmSEzpeudtYdyTTJqwch4xir1ucBEvAI65Vu8tkSXJ914lSbS9iaYyN0Dandf9ofsqRtRdZeIUTazEjuEa8jHNY0Q4IctfHZ6cx9PWaJSgZM2uOdOwt5s1lC61QOCQS9wLwyK6agso9earH4tJaGQ8+nosM9f9yCek0g5cBzzzHM738g8w/4U35rTPIesUunMLhIDNHVXdSGMFPVL3j35ZTMBKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=PVMjm28DAnBev0G35W5QQao8+f3DVYYyJTe+GFPZJXQ=; b=lwoCSK1jpPAZiVEkLaunkTDxZayArKUFONZgpwVYZITpnoHJdwgOjzlF52By38kN2lgKSpPD0TY0PISeuH/BCl16dQ9CMIi+5pBKKywHwC1DsGyEu7p6upsiN92Q3noYNMUcQ3iGzRQUT9g6y0AyvupBKl8zHc0xE1ZxIXHkupeXLOJllrBdNbWeLsDBNYPuF3Uc+dL4Nkro/KQVSROb1GC1Kg/FYihRWtE8+7wwrQM8lqwutIomzM+AHsnHjq8Yb1/6cvP1JIos/oY3tfkkSXa9dG3A7qI26wO2L3etOngQLv1kvMF6NZsFYJvZ2PACoHehmiAqtrIk6YPhA0GM3g== 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=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PVMjm28DAnBev0G35W5QQao8+f3DVYYyJTe+GFPZJXQ=; b=X8nPNmuI2i0SWNfuOSu0G/3GHqiI9b3ak+2i97UA26E1zAjG9t3A0wuuwRdReMiwSkWnOGdfRhXq2SJOK+8yf+y8WiHqBCu9G8RW5wuQONvRHsBSpFdUvtAGrCLldcv8DMMgWgKI0YvOQ11A5Rhi5B7JTxRPr5oosWSC+If3yjMYCi6wIbE8XtmGCoWWG2Dy7fCveIpekk5C4HF6jkNg/ldpNZ7msipsCdB9+1EDUPw+uAsyk92q93SJsYNbFdUySLcp4f0sL/RmyOiN6/UspPDZ5wXCYcgTfIWk79wuhU4u0waDCpzxNWTK79D0v4jrTEYhfqyJD2mL2HgTxTWDEQ== Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) by AS8P250MB0988.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:5a7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Wed, 29 Jan 2025 12:29:21 +0000 Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::1f36:56b3:1d04:c7a6]) by DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::1f36:56b3:1d04:c7a6%4]) with mapi id 15.20.8377.021; Wed, 29 Jan 2025 12:29:21 +0000 Message-ID: Date: Wed, 29 Jan 2025 13:29:19 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250125202143.12126-1-jamrial@gmail.com> <20250125202143.12126-8-jamrial@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20250125202143.12126-8-jamrial@gmail.com> X-ClientProxiedBy: ZR0P278CA0054.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1d::23) To DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0P250MB0747:EE_|AS8P250MB0988:EE_ X-MS-Office365-Filtering-Correlation-Id: 924ee7cb-f74a-48aa-76be-08dd40608ec2 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199028|19110799003|5072599009|7092599003|6090799003|15080799006|8060799006|440099028|3412199025|41001999003|12091999003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VUtvbDRhREo0d0tqQjJBcW5GaFdXc3c5bVRudGxuU05pM2NseFdZVkQwbmJz?= =?utf-8?B?UWlRQUlmbG9VNW8vQ2RxaUh5M2FGeS9lcjVnNmtEdkZCbXpUbDJaOGJQeEhK?= =?utf-8?B?OUc3d1pzZkZCMytzTFZrWi8rWUpTM3hIbmMxU2FQRFF6aFAwdGV6UjRyd3Fl?= =?utf-8?B?aDlNQU1qTFhhdC8xWHNvZW11ZnE4RnVyN0pSUy84NUphb2p5WWx6WEZ6YmdC?= =?utf-8?B?TDNpc0w3TmdCajVtZHMzTlYzbHkwd1dBRlNzdktWeW1xV2dyTWtRNW8vdngx?= =?utf-8?B?alo3UmZFcGo1V0U1NEc4NWNNYnY4Q1cvK3Jxb3doV3ArdnVoa0R2T1dtTjFx?= =?utf-8?B?NjRxL2Zta0FuRnBDV0tWcTZCek8xQzVadjRkU0xuWFIxNCtPUFBqTGo2QThm?= =?utf-8?B?M3k5VXZ3RHUyZXBhSHVyTkxqOWQ0SnZ1QllQS3B5aXZuTW5HTERUc0VNWmt5?= =?utf-8?B?WSs2MVdYMXZCT0xjNVFSL1NKeEtTZEg2T3FuM2RRN0xVazNTV3BmQ0dDY1ZB?= =?utf-8?B?eFZ3TXdPRDBybmRSOXkwUWIxV3ZzMFBhb1NNSHRNV1FLckZYWUFQS3VSZ3A5?= =?utf-8?B?WTMrY1VvUE85enhwRjV2S0tNeUUrZ3M5enJ5Kys2UHFTcHVUZ2JpSUxjNitU?= =?utf-8?B?L0E5bmhWck9KdzZWOUZydUk5dkhLbHVPc1ZLc0l5L3lxelJUS3g4eFVTWTB5?= =?utf-8?B?WFVXUEh0aGsxdUZYMERQZTNPcGw3d29xTkZGYkRuMVl2dkk1Z0c5RzE4TEVU?= =?utf-8?B?REE1SXZmMWlVL3BXWE9icDVnMzdCVUcyWEFMdEdHQ0JicTVubVFUcHp4c01i?= =?utf-8?B?UVozVzJHQ3l4SUkwRHY0TENDK0lSSzhBM1FlcTNSNGE5b2JZUmZST0hrejAx?= =?utf-8?B?UXBYVy9qL2hqd3JXYlFLbC9oY1VkcG1aaHNzR1JTSUxnOG5Tc0kyanRBZm9r?= =?utf-8?B?aVdnYXMydGxORVIvYnVTc04wRzV3TlVxOWRDQnlCYzRKNVVZWTI0ODMrT2dP?= =?utf-8?B?NDc3RkZHUE04bGN0OXJRaXhkcWtHbVpaaXM4TWpGYmJ1OVpPayt4aThKMll5?= =?utf-8?B?Z2d0bUs2bmxZVjlOaWlrTGVBYklKN0pxK1ZpQXRvdURLcnUrT2FKOEVrZEJQ?= =?utf-8?B?R3VRNlFKck40Z2tRV2d4WXF4amlydTc3UUJ1WGJLTDZSZ1l1ejNzZ3pDeUx0?= =?utf-8?B?dHdHcy8vKzRET2VOUVhsQkRYbzVoMWcvWW55cUFxa1Vta3RXb0dqemJZak8r?= =?utf-8?B?eEFDUW1GbFd0SmVNZElRL3RuYWE5Q3NOSmZOUXd2N2t3ZXM3amVWRHZBTkNU?= =?utf-8?B?L0lBUForVmNLamJJamRmY0NqZFN0K1lMaGtXL05NbEgrcmkrVHR6M1dBYWlM?= =?utf-8?B?c2RVZnpkWGFrZlBiVXprZjc4VE1sK2I4SWdDWFlka3c2bXl0eDdQWDlUZklL?= =?utf-8?B?cWxoMUwzMS8wMkcyaE9Hc0pMWTZ0a2ordzlVR2FPMVU3RSttOG4rZjNuaFhY?= =?utf-8?B?V1d3UVFabVFrSW5valBxdEE1K0g1WFpsSVU5OGo0dm85eGNtbWNWeHk1YWdF?= =?utf-8?Q?KmKosRQ1ykPz0pSbRt0vsXO3s=3D?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RkhDb0g4NU0vZDQrazlsYjBxa0dMazBCSDdpUVFmVFVROXhWVDU4U29pVWNx?= =?utf-8?B?WkFDaHUvdDdvWWl2Wm91Z3NjakN2V2QxdEtWOSszVVhqeldReVFGdyt4aFA5?= =?utf-8?B?b1dIeHBLY2xoRUZ4RXFBelBUQ0VaSkJZdnZYOTczcFh6N3NkbmxWZHZILzJM?= =?utf-8?B?eG1weCsyNWI2WVhRNng5ai9ObS9hbTJZRk5pbjN2MG9zK00zKzRWbUlScS9h?= =?utf-8?B?Z3M0L2I4a1NjK2FuT0lnSmVYTkdMUjdhRkRpbW4yS3NHYlNpT3RVTDRnUE42?= =?utf-8?B?YWtkRkRadVZYdHQ4T1U5STJnMTk1VmRaem5wdWlidmY2TTBoQzVLbHNtZzEz?= =?utf-8?B?QmdMdWVDYUwxei9sMlJWcUNKZDNyT0lxcFVXclpaeUNHeFhsUm12ZTZWVndY?= =?utf-8?B?aklqQkUvLzlNbXgzS0s2dW0yTUtoV0JyY1BXWFFsdEdma0xJNEMzTFNvSXZM?= =?utf-8?B?bXlWVGh2N2Uwc3FoSC92VkJhdy9SK2ZHY3dJNXEwbjlscmdQaXdCWENLQitr?= =?utf-8?B?ajBhRitFejYwbVhSck95VjBFR2pwSllMQy9JaWgxRnVIOXVPOWY0clVxSi9Y?= =?utf-8?B?V3VWNEViMnFWVUF0dXEvUTZseXU1R0hhODhwTWlWV0gwWG91bUdRM3psVFdY?= =?utf-8?B?OGVqRjRLQmVZT1BjNFdVTGFiN0ZLN1JXYVY1ZmRxY3ZCRVU5VW50VS9PY1dQ?= =?utf-8?B?bCsycGJacjdCbCtWZFpyRFI1VlptcWUvNFhqM1NNVFJDOHQxTUJtVG9MUWVZ?= =?utf-8?B?cGh5Z2hMWmdFcVZKMTluR3NkNU1IWXo0a1BCRFJFWWJLelR6Nnhod2wxUTNm?= =?utf-8?B?Z01pRUxQUTBMbDlhMWdzMVRXaDdRbHVrTzBlSkhndVI2WjZsRjIrQUVydW9n?= =?utf-8?B?TGZOeDM4eTFRWlZrbDNEaVNjcTcxcFF6dVJLYmRGNFFzWGdhWlFJcTlxcE1u?= =?utf-8?B?aUxNOTBva1VsUG4yR29lTWNSNWZXYXB3RVcyaGNYTVRHUlczaUZhb2JXNjVz?= =?utf-8?B?MGFXQVNPT3FWbjZUZDIyeSsxamFDUExPdWJ4Z0NPL2RPU0FrQ1VobUZyQlJN?= =?utf-8?B?UkQ4djc0WFpseVhJd3paT0RXbGtLc2pMK1E3LzJjcUhMSGNKTDZjWWlYR2I0?= =?utf-8?B?bW02TkpXdW1lRjhzUHlGN01wNkt5MXZVZUdXZ083dW5xdjF0dW1sZUdERStK?= =?utf-8?B?VHZEaC93Q2NiSm5FdVk2a2lmNU4xUE9nbHV5R21XcGNsOGZpeHI5Qmpnd0dS?= =?utf-8?B?R0xZbTc2TGJqeDVBcE5Ud3FUYUVvZHdLZzZLOWp0Ump6V1lpRWRDRDdpbmpQ?= =?utf-8?B?MERJN0gzN0JzYWQzamxWdDZhREljNjF0SnNIdnA2UGNvZ2pabGNWekNnUHk3?= =?utf-8?B?UkE5U1dpSlNzVHFpWmdsUVVWcFZHcm1hdnA2dmcvMXZpRFo1NEJVbThDbmhB?= =?utf-8?B?NkxtZXVRcW5PM3RuMkJhT2xOMCtyNlh4Nnp0dGd3RHRBSWF6cVpPUVpaTWR2?= =?utf-8?B?RjhJVUhRSi9IZGlrZWJsU0RNWTdyR2U2SVpBT3A2QlVjcm9PTEJOVURRSDRO?= =?utf-8?B?YWg2OFVHYTZyV3BaKzMrYVNiNkliRmJnTytCUitvRjN6aXdBTitsTmpRR3RP?= =?utf-8?B?SHB4L254QTNVV3ZzWmxGdFliQm9FU2Y4MzhTVTduOE9ZallOUFY2WG5NTnNk?= =?utf-8?B?WFcyK2piTTBtd3FTMGpIMEloM0xoS3BnaGRGd1BIb2JKTmJtMENZRFBBPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 924ee7cb-f74a-48aa-76be-08dd40608ec2 X-MS-Exchange-CrossTenant-AuthSource: DU0P250MB0747.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2025 12:29:21.5729 (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: AS8P250MB0988 Subject: Re: [FFmpeg-devel] [PoC][PATCH 08/14] avutil/frame: add a param change side data type 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: James Almer: > Similar in purpose as the packet side data of the same name, but for encoders. > > Signed-off-by: James Almer > --- > An example of RefCount used for side data, including a copy and uninit callback > to handle allocations within the entry. > > libavutil/frame.h | 14 ++++++++++++++ > libavutil/side_data.c | 23 +++++++++++++++++++++++ > 2 files changed, 37 insertions(+) > > diff --git a/libavutil/frame.h b/libavutil/frame.h > index 1feb11506a..c677407781 100644 > --- a/libavutil/frame.h > +++ b/libavutil/frame.h > @@ -243,8 +243,22 @@ enum AVFrameSideDataType { > * The data is an int storing the view ID. > */ > AV_FRAME_DATA_VIEW_ID, > + > + /** > + * A side data used to signal an encoder that certain parameters changed. > + * The payload is an AVParamChange struct. > + */ > + AV_FRAME_DATA_PARAM_CHANGE, > }; > > +typedef struct AVParamChange { > + /** > + * A dictionary filled with options to be passed to an already initialized > + * encoder. May contain global and encoder private options. > + */ > + AVDictionary *opts; > +} AVParamChange; > + > enum AVActiveFormatDescription { > AV_AFD_SAME = 8, > AV_AFD_4_3 = 9, > diff --git a/libavutil/side_data.c b/libavutil/side_data.c > index 597228baf1..c156d2bef8 100644 > --- a/libavutil/side_data.c > +++ b/libavutil/side_data.c > @@ -63,6 +63,24 @@ typedef struct FFSideDataDescriptor { > size_t size; > } FFSideDataDescriptor; > > +/* Type specific refstruct callbacks */ > + > +static int copy_param_change(void *_dst, const void *_src) > +{ > + const AVParamChange *src = _src; > + AVParamChange *dst = _dst; > + int ret = av_dict_copy(&dst->opts, src->opts, 0); > + if (ret < 0) > + av_dict_free(&dst->opts); > + return ret; > +} > + > +static void uninit_param_change(AVRefStructOpaque opaque, void *obj) > +{ > + AVParamChange *param = obj; > + av_dict_free(¶m->opts); > +} > + > static const FFSideDataDescriptor sd_props[] = { > [AV_FRAME_DATA_PANSCAN] = { .p = { "AVPanScan", AV_SIDE_DATA_PROP_STRUCT | AV_SIDE_DATA_PROP_SIZE_DEPENDENT }, > .size = sizeof(AVPanScan) }, > @@ -88,6 +106,11 @@ static const FFSideDataDescriptor sd_props[] = { > [AV_FRAME_DATA_DOVI_METADATA] = { .p = { "Dolby Vision Metadata", AV_SIDE_DATA_PROP_COLOR_DEPENDENT } }, > [AV_FRAME_DATA_LCEVC] = { .p = { "LCEVC NAL data", AV_SIDE_DATA_PROP_SIZE_DEPENDENT } }, > [AV_FRAME_DATA_VIEW_ID] = { .p = { "View ID" } }, > + [AV_FRAME_DATA_PARAM_CHANGE] = { .p = { "Param Change", AV_SIDE_DATA_PROP_STRUCT }, > + .props = FF_SIDE_DATA_PROP_REFSTRUCT, > + .copy = copy_param_change, > + .uninit = uninit_param_change, > + .size = sizeof(AVParamChange) }, > [AV_FRAME_DATA_STEREO3D] = { .p = { "Stereo 3D", AV_SIDE_DATA_PROP_GLOBAL | AV_SIDE_DATA_PROP_STRUCT }, > .size = sizeof(AVStereo3D) }, > [AV_FRAME_DATA_REPLAYGAIN] = { .p = { "AVReplayGain", AV_SIDE_DATA_PROP_GLOBAL | AV_SIDE_DATA_PROP_STRUCT }, I dislike the whole approach: Frame side data is supposed to contain side-data that applies to the frame; yet a lot of encoder options which will ultimately be added to this side data (if it gets committed) are not frame properties at all. Furthermore, this approach necessitates checking every frame (even of encoders that do not support parameter changes) for the existence of said side-data, although this side data will not exist in the overwhelming majority of cases. Why not add a new function for this task? (This does not imply that I am in favor of the reconfiguration approach at all. I'm still leaning towards "close+reopen".) - Andreas _______________________________________________ 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".