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 AC15E410DD for ; Mon, 3 Jan 2022 09:49:03 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BD60368B171; Mon, 3 Jan 2022 11:49:00 +0200 (EET) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-oln040092065013.outbound.protection.outlook.com [40.92.65.13]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F16B0687EBB for ; Mon, 3 Jan 2022 11:48:53 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D38eMax44xImrgpPGtH/1bTjfQB1R1YW1/hAhRJ5NZHgfH8SkCOGWuYkAmuSTx/8RVFVCdOzhO5RlOGBfpMqMxFC+k53ssw2HM24kWRhn/kM4t7Fv24/WYsum3Q83Sah20l8nZOW3ma9im7NKkp4k2PsZ8B+vPqstysG7XO/DDmeax+TiCfmPxnoL2kMFVoHYkXRvD9JazpLzhXZMJ7iy7aQf3Yp3nLwYLGPZpU6dNNxGZZqrGYbkxb/xcoAtqWqnpa/uZFTPb+kq6g21cH4E8rx8OlE5nxgVKvP37fp7ujErFVfPppB78MnB17xuYNP5o+iygxEx1dmxiJuscU5SQ== 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=pnzJxk8UGvnoSr9Dmj0C2kDUuGQ/OW/AnqEuuADgOek=; b=VIOGzaIf/5q5uzOURq+Vyxz7s3S36QKl6JO+v93CgtLvkEGUp6uC1Mv/9HAPJt5h1oovYdBPPR4XihGVh67O5Umx1/pZPpXBo+RLF1Gf6dyufaE0pOIX/9KjNkr7TVYU5cMLpeKvGcUypuFowCfyNKbfMc+M1j/LZFuHb8Qsf5YmviMxAsRvG2kDHPxE5Qrwo+BagfkkqYp8/Wri611YYZ7msN9EmrTGhCeTuQp3xCdOQ8+4YYFQMVvrjyCz2pgUjkVd9I8NdVloFzUaFMH7s6848/j7DcIM8t+AHFn6ktqNXhTtdYwcketOGTJeVM3jnl0vTnpCYKpc60ynSlOeyw== 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=pnzJxk8UGvnoSr9Dmj0C2kDUuGQ/OW/AnqEuuADgOek=; b=GuEwh9DqhXaCXygBnlSIGMh8CLZss4o5eDoBj5gAHsvMacnzVa7ntdYdvcACp0anro5mKbrqoT2NEgZWMDBIhECaWBGt/yUdd4kOFks2VVFItLqPW691+DMx9nQP+YL8Bq5ZhdzYeX0rmReRGXRDrUPl7CptEo5FCy8C6wFFY2oqmCqXHjphLhOTljixcdGsE85kuONOf4HuMsAmYGJ0swLvFc9k34VackW6bpyOwoarwxGs5Msao6QtnAww/tn5p0UQYz4Ny4FT6xKvYmOvQcvaBgOXahJFJYaELs+/rtyAIgniEgf2VYHcuWPMOi+byLnIaOfaFB/8yFlwxp2IOw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4103.eurprd03.prod.outlook.com (2603:10a6:20b:22::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4844.16; Mon, 3 Jan 2022 09:48:52 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%6]) with mapi id 15.20.4844.016; Mon, 3 Jan 2022 09:48:52 +0000 Message-ID: Date: Mon, 3 Jan 2022 10:48:50 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20211226171650.372-1-dcnieho@gmail.com> From: Andreas Rheinhardt In-Reply-To: X-TMN: [IpG5TPGcLvH0NeAoSKI8pRqL2vjO9fUV] X-ClientProxiedBy: AS9PR06CA0306.eurprd06.prod.outlook.com (2603:10a6:20b:45b::15) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <9997e1c2-440f-2b23-f697-4ba8c0389af7@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a6651c6d-816f-4d12-a5ae-08d9ce9e3fb4 X-MS-TrafficTypeDiagnostic: AM6PR03MB4103:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ayZ2qj7XySSqfFOTpLGTpTfl5q1nhap8NstlTRqCxuL6L8ub2UGy20ZA7n5eZYX55aLei5j1PtxOQa2YA/wqjC9qKSOYhst0IeokT8LkBaYjtuk+BH9N94SfUTvt5ktvF5rjpFUxepnO3hUp7K1etmUmAJLBoM1WJa2Y+shI9hEdRhU673rn/fqxsgu843G1nOZ7HwDuO9Ws3/11zyjpd9tuaoSvcpuVz5+wuuEwhzx+4ZMpdqrADS3wEPTdbZ4LjOYSqIO4W9AB/U43zWa7fTq/jZntkZs7u/E4vOBduMW3WdmqDuT+dwhk8hJd1vox40Ob7sztZYZxFngBiGeeFCK3HdlBle2LBPRNVcVVIN/yFaWVXXDCT1hYNOXz9mMK+sQQq/MZubopzD2Uk9BhaKl7I53lufiD4Kl/RcshG352ILWUp19ZF2EHqguNhrvqHn4gdBWojDd/Yn73xWhb4LqxSGLVVRU6WKYBS9t4Sv+WOsfiV+0maZNn90C1FRtiQR7+CPkqO6jVWco5t54aYOF2PHaBiKEB5BDMY52TiFiEOIHKIJGPXc8N8sKsatBGAB+2zUDQoiQ1Y3dvbe6PnV2kkhsGS2bxIxa6z1+8oihEvOXN975kL1wwFHSvzTv8Hk3pm3vJsWGoZp0j3t/e0VOFHKblp+C3s1HUJg6tuvs= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dXQzSnhSODltMVFRMlNMd01YY2oybU0rU3ZDd0QrZmRIMWFMOUdpRHJJa0VL?= =?utf-8?B?TG55citFWFlzcnFMTXl3TXhrU245ZzJZd01QVnhUWUNIbzJvZGxuSXJIZEdV?= =?utf-8?B?S0hVS01qM25pY0YwUXd6U2I0SWZQTUFwWlYzTUxmZ0JvSHR4d1hqdXFaV1hx?= =?utf-8?B?YnoyM1B2cmNWbzlpaWlIdVJCSkFiZnhLOE9VdXJCN1R0ejFqWUZORmg1S0VO?= =?utf-8?B?aG1JUGlWUnY4LytaUUQyaEJNWUVYc2hGSXlSdmU5aUZXV1R2RG1MRUJZZFlV?= =?utf-8?B?RWVnM3lOMDVyTDVqRUtJMG14czNITW1qUmVicWFuVWVqT21YYXhOYS92T25H?= =?utf-8?B?WEtMTTZ2cUJhMUIxaE1DRXV1Zmw5NHpLWXJCS1RBSWx1eFFMNFFweUhidkhw?= =?utf-8?B?bTdZSmlhek1ndmFRZ3E5QlgvVnIvOVY3R29nZDJocGtmc1FrcDBSV2xjb2M5?= =?utf-8?B?eFEwaEtlSStkZUZWQlluWWt6Y1BqS1U3RStyRXFSV210bUluZERuL1ByMkRr?= =?utf-8?B?WlB4a1VFWVJMYWZrSEQ2b24wZ0RsUFZFc1MzTm4wU2pBdmY5eFR0cG5kaThU?= =?utf-8?B?cm00aEZQZUxGYnhkQUZjT2hwVEg1ZktSTE9jQ2d6Q21mczlRR2JhVFoxNXIx?= =?utf-8?B?VWR3UERXdDVra0RhN2VoZlp6eUJkWmVKeXZFNmhTREZJMm5LVFhVdFBrRllN?= =?utf-8?B?bWovRUVQZ3FFQ3lvdzQ0SjJKR3huN0MvdHlpRys5b2hObExKRVdIdkhnSE83?= =?utf-8?B?WGZCOTNTeVBvRTAraWhHRkdtR1VjU20vVmVkazExT1U0NXpmZHBaVGhiRU9E?= =?utf-8?B?eDdUZFFYWW4vclIxeVJ5UkU3RFR4MHduM3ByRWhlU1Nxd2J6VmUxVVVHQWZT?= =?utf-8?B?R3FuQXRPOVFxQWJBYnozdEM4bmFacFNST0lsN1RabUlmU2kydEI4dkhodllp?= =?utf-8?B?MkE5Q3hiYlFFclN4bDloVGloc0pNUjVyYjRDS1liRjV6U3VyVGNMdnBZbnZR?= =?utf-8?B?WXcwNUxHQmN0WGFEOHdDSEgzWnFPelZtd05PMjJaaFNYUXVLMzFjZ0E0cldL?= =?utf-8?B?WnA5T2J0N1drTHlyRkhrc2MvTitxOWZXTGJtcTJSNENIbmhlVjJXRllsdjhW?= =?utf-8?B?TDBoMWRONTh1YjNKRmV3Z1orYitsK0pSZzAwcVJBYTdlOUxOWnpZWHpPYmZ2?= =?utf-8?B?N0paaW11clBtU3FHU0kzUHJJUkYrRTAzZVpRc3FYdDliWXdmYUVIaEJGTXpo?= =?utf-8?B?aFFnYmtoQWVqYlpCeHEvNEQ4RVQxVjNqVlAzOStHNXk5Mmpzdz09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6651c6d-816f-4d12-a5ae-08d9ce9e3fb4 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jan 2022 09:48:52.0781 (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: AM6PR03MB4103 Subject: Re: [FFmpeg-devel] [RFC] avdevice: lock to minor version of avformat 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: Diederick C. Niehorster: > FWIW, the macro > #define AV_MAKE_MAJOR_MINOR_FUNC_NAME(name,major,minor) > AV_GLUE(av,name)AV_GLUE(_version_,major)AV_GLUE(_,minor) > doesn't compile on patchwork > (https://patchwork.ffmpeg.org/check/49062/), but worked fine for me on > MSVC. Is MSVC non-compliant somehow? Suggestions appreciated, I'm no > star in C macros. > AV_GLUE(av,name)AV_GLUE(_version_,major)AV_GLUE(_,minor) will yield three preprocessor tokens after macro expansion, one for each AV_GLUE. There will be no whitespace between them and yet they are different preprocessor tokens. After the preprocessor has been run, these preprocessor tokens are directly converted into tokens; there is no "rescan" that joins preprocessor tokens that are not separated by whitespace (and therefore appear to you to be a single token). And therefore the result is incompliant. It seems like MSVC does such a rescan, but the specs allow a compiler to omit it (and GCC apparently does so). > In any case, this is a discussion starter, so let it not compiling not > hold us back from that. > > Cheers, > Dee > > On Sun, Dec 26, 2021 at 6:17 PM Diederick Niehorster wrote: >> >> As per discussion on the list ( >> https://ffmpeg.org/pipermail/ffmpeg-devel/2021-June/281513.html, see >> especially https://ffmpeg.org/pipermail/ffmpeg-devel/2021-June/281586.html), >> to resolve the the unholy ABI-relationship between libavdevice and >> libavformat and allow easier working on the part of the avdevice API >> that lives in avformat, lock avdevice to a specific major and minor >> version of avformat. >> >> Signed-off-by: Diederick Niehorster >> --- >> libavdevice/avdevice.c | 10 ++++++++++ >> libavdevice/version.h | 10 ++++++++++ >> libavformat/utils.c | 5 +++++ >> libavformat/version.h | 11 +++++++++++ >> libavutil/macros.h | 2 ++ >> 5 files changed, 38 insertions(+) >> >> diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c >> index 8f460c7564..b608ec532f 100644 >> --- a/libavdevice/avdevice.c >> +++ b/libavdevice/avdevice.c >> @@ -38,6 +38,16 @@ unsigned avdevice_version(void) >> return LIBAVDEVICE_VERSION_INT; >> } >> >> +unsigned avdevice_version_same_minor() >> +{ >> + // check version of loaded lavf has same major and minor version as >> + // this library was compiled against >> + if ((avformat_version_same_minor()) & ~0xFF != (LIBAVFORMAT_VERSION_INT & ~0xFF)) >> + abort(); >> + >> + return avformat_version(); >> +} >> + >> const char * avdevice_configuration(void) >> { >> return FFMPEG_CONFIGURATION; >> diff --git a/libavdevice/version.h b/libavdevice/version.h >> index 41f568d6b0..4c511a7f53 100644 >> --- a/libavdevice/version.h >> +++ b/libavdevice/version.h >> @@ -26,6 +26,7 @@ >> */ >> >> #include "libavutil/version.h" >> +#include "libavutil/macros.h" >> >> #define LIBAVDEVICE_VERSION_MAJOR 59 >> #define LIBAVDEVICE_VERSION_MINOR 1 >> @@ -48,4 +49,13 @@ >> */ >> #define FF_API_DEVICE_CAPABILITIES (LIBAVDEVICE_VERSION_MAJOR < 60) >> >> +/** >> + * avdevice_version_same_minor() expands to a function with >> + * the same minor and major version it was compiled against >> + * encoded in it. Enables linking locking to the minor version >> + * of other libraries they were compiled against. >> + */ >> +#define avdevice_version_same_minor AV_MAKE_MAJOR_MINOR_FUNC_NAME(device,LIBAVFORMAT_VERSION_MAJOR,LIBAVFORMAT_VERSION_MINOR) >> +unsigned avdevice_version_same_minor(); >> + >> #endif /* AVDEVICE_VERSION_H */ >> diff --git a/libavformat/utils.c b/libavformat/utils.c >> index 332ba534d2..607a777c3f 100644 >> --- a/libavformat/utils.c >> +++ b/libavformat/utils.c >> @@ -63,6 +63,11 @@ unsigned avformat_version(void) >> return LIBAVFORMAT_VERSION_INT; >> } >> >> +unsigned avformat_version_same_minor() >> +{ >> + return avformat_version(); >> +} >> + >> const char *avformat_configuration(void) >> { >> return FFMPEG_CONFIGURATION; >> diff --git a/libavformat/version.h b/libavformat/version.h >> index 379a68cc7c..2423800687 100644 >> --- a/libavformat/version.h >> +++ b/libavformat/version.h >> @@ -28,6 +28,7 @@ >> */ >> >> #include "libavutil/version.h" >> +#include "libavutil/macros.h" >> >> // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) >> // Also please add any ticket numbers that you believe might be affected here >> @@ -63,4 +64,14 @@ >> >> >> #define FF_API_R_FRAME_RATE 1 >> + >> +/** >> + * avformat_version_same_minor() expands to a function with >> + * the same minor and major version it was compiled against >> + * encoded in it. Enables linking locking to the minor version >> + * of other libraries they were compiled against. >> + */ >> +#define avformat_version_same_minor AV_MAKE_MAJOR_MINOR_FUNC_NAME(format,LIBAVFORMAT_VERSION_MAJOR,LIBAVFORMAT_VERSION_MINOR) >> +unsigned avformat_version_same_minor(); >> + >> #endif /* AVFORMAT_VERSION_H */ >> diff --git a/libavutil/macros.h b/libavutil/macros.h >> index 2a7567c3ea..dda1bf6452 100644 >> --- a/libavutil/macros.h >> +++ b/libavutil/macros.h >> @@ -73,6 +73,8 @@ >> * @} >> */ >> >> +#define AV_MAKE_MAJOR_MINOR_FUNC_NAME(name,major,minor) AV_GLUE(av,name)AV_GLUE(_version_,major)AV_GLUE(_,minor) >> + >> #define AV_PRAGMA(s) _Pragma(#s) >> >> #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) >> -- >> 2.28.0.windows.1 >> _______________________________________________ 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".