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 2A72F4958A for ; Thu, 14 Mar 2024 10:47:03 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6962E68D158; Thu, 14 Mar 2024 12:47:00 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2032.outbound.protection.outlook.com [40.92.89.32]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9B57168D0BD for ; Thu, 14 Mar 2024 12:46:53 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tu8MF6TNRlGgksTje7ve6yoMpa8v3qnYOXyphzNkLcMLCjyMs3LqXWvMbe8W+/npfToVmllWAccYaMvLwqAAnmxrmYnpTdMCj29MT3QlANhR+hPm/2Gy2y0dAUOzYsq6rrBeCqY/gaCxo6bfzRaKi5iHVU3c/8WDo6p+MtUw8t5/DUUgLd6oENji5OWi5HwFvsl9YAssSZUmY4uLvFUDm3k8Ngqir7sS0R3kOfuKyO6Oq+z7fM34ppctssNsi/O3TeuLuGVs2jylsqemDiupTI02tNahQMe1lFG+Lrp2ybNmMAyee/Ff7tRgarxllHK1aLOKTygJhY8OSG08QR+0Rw== 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=um2SsCfGrj+1s5SQ8vUwwyzJNxEV+P1y64pmd6hPXPI=; b=TdTCEit1TWaLHY43YOpQ629oM2FHNQPSgjLHAnENB6Uk26Hc+1gLh1A+bIxQb4PINZTYL0viniwGeZQ+AnCWAmHciP+DXgqTJek9tGqCY3I075FkV6HR2wPjB+vO8O1VyU2j6aNjgmPyG8QWQaoVKPwQKG3nPnOoASaxhaSMWOyUdHTsh6YawqjuctO5HgAKluHjouFSZ4NnBw5KIGTA3L2Dq3GAG8xKl5kjRXgjbn05uS2OdJ5hR3ZWDlbD4iK9VNsM9tyYTfysUsT3N99YHTlV3lkz2AxT+N5wESGj17DvyYTvf1g7v2d8zYsn3zJrw3vzo0+6xikyyqx3n1rCtA== 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=um2SsCfGrj+1s5SQ8vUwwyzJNxEV+P1y64pmd6hPXPI=; b=LPrr1t6M5riMu/1++QLMY9ESaoofFNkuSytN6epLMTQ5PvjXOAuE+2mjz9tX9ghQVGR09eAoQzl+kA7vKtKPs9SEgLsukw0RcJRZ44JNhxFGHkrHqq19bx6uhXmYd/louaTrYU6bSayAQ6Vfnot9b8/Cu2kpLi1Ka/93m59SKWWjak2D3qZcrTjNsmiMVLozht5uzRkKx5VT7oUFYBNbPYTB1Myla6LlVEX3sJOo33HG8W+n0lvRK+u1T7xPJaaTundyeXCbFckv0COiSIEPBJjKl6f172fNDGPDBt+NuMzhIq7MemoWge3PIRB4yYR65e0pSvDM4mL65TXgVPT6dw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by VI0P250MB1052.EURP250.PROD.OUTLOOK.COM (2603:10a6:800:24e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7386.19; Thu, 14 Mar 2024 10:46:51 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::228d:8c6f:ed10:82eb]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::228d:8c6f:ed10:82eb%7]) with mapi id 15.20.7362.035; Thu, 14 Mar 2024 10:46:51 +0000 Message-ID: Date: Thu, 14 Mar 2024 11:46:48 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Andreas Rheinhardt In-Reply-To: X-TMN: [6kEBepV/lCtlMFW74pI/puJPM88iI1ck66lZb+WmuY4=] X-ClientProxiedBy: ZR2P278CA0015.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:50::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <073dc3ab-e04f-4ec8-adff-dab8863c84de@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|VI0P250MB1052:EE_ X-MS-Office365-Filtering-Correlation-Id: 7cd4aa5c-a471-48e6-bed9-08dc44140e8d X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TSdjsC2FfcMYwqjhXAh5buFYD7lUVKLTcVncLzoj+AP4yFD1bToMShtQFMJtYOK+XSZUg81A8f3ytvaxgLCdXX4y3VesRL+c1+vw5J1TPdWlHVZipUDfjm1m2EBRFdH/6tsYqlNSZtn2+OTVm3LQEPwUO4KpYlsfRPGsq0jizubIrBDEVxl1rb03kDyJZVu1P2DERtpkxCxb72XSLUl+R5/UfK+CQGZAHAqi6+ds6D8XTujo/QP5vAxJhuEujVFQyghKh+ngeRQ2GweMlolbTYNpuMvIcUd6Veij2hDjOny7bZO6+V/sdbjUGdSHegAY0/UKwcwyxUfRozjzIUXAM6I34RDBYAzImcPuyioGceLHfS3W6IwRv/lfUSNGgk2Pyue/6dhOb2nCf0sTrYEBpjQ/2bZQ2RlrcG+n2qzAF7rfZdEbDGnLnI4vUfKLqp2P7eFEt1SzaXs4ea11DfOZkLr6b6/WYrDSMuKviwjDHN1uCh0iBoFAbV0t7x8EVePH9bfJmbBLYFd24m0PQQBsRPyieuA/Qr3tWdu3oD207+jxFfY/muG/wj0c/N2GqA2K X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NVp0cVB0bWlEeGgxdDkrS2pMbDVITmlHK2ZNdEFjcm10RVZYRDRmWEU0TERL?= =?utf-8?B?bU00SkpYeWk4NGZ2WXZ4VHloWnRKL0ZTVlU2WFVKUFF1c1NvS1UwSC9oS1Qv?= =?utf-8?B?SXB1QktyM0FYaWZCcG02eDV0YkVhbXIrQTQ5eWR2eG93ZENpay9ZaHdudDBa?= =?utf-8?B?WWlVMGZ1RXNpelZKcFVXV2dod0dMRXZwUEtsM29BWE1YOWk5L3YyR1liUnpG?= =?utf-8?B?dWhORnEwQVRWOWRpc25RV0NYYTZ2aWJGTFpoVzJFdDI1aDg4VVMxNkMySkY1?= =?utf-8?B?L2FTK0FhaURrS0JhNmMvVHZOSXVxWkNRWHZMa3hJeDR6RjlVTlJuOHI5aTNC?= =?utf-8?B?MDlIUjN1SlJCU1B1SzVaWTFmcUViejJUcnZqRTMvNDZzYVRPMElYUWJod0FN?= =?utf-8?B?MUJJWTZ1ZUw2V0tZc1A3ZkdMR0t6TTB2aGczSDg0cC9CK1J5SHBPYWQwa08x?= =?utf-8?B?SUt0OFlEYWQ3T3BhNlA1ZDlJVCtFNlc0NkZBMjhHYVFoQlJZdVQ1aWJ1WHlp?= =?utf-8?B?SDAvUVhGajB5KzZKSVRzUWxpU0pWZmtOVzRVWDVZakErcWlYbFpLMFhaQVdv?= =?utf-8?B?eHhNMWZ2VlRrOUJaanVIRlozK09xK2ZzZHBMeVk1U1lUUytqS2JpcHdFV29Q?= =?utf-8?B?TU9BSFBmSXQ4VDJBRzg2Zm1BTUVHWFExSFNlU2tUWWU2eFVXVmxHazVSWXNQ?= =?utf-8?B?MXpxYmNKa0xvaHp1MXVFY0Nlb3YyZFBDeE9QQVJCakY5bFlTckMvRkgwdVlo?= =?utf-8?B?c010cVpRWWxIL29SUUJ5UDJoNFBvRDA5WWNjZFAySXljRWxSam9LNEVYcWRN?= =?utf-8?B?amRHQkZyWFpUQ09xT0lEdXdmRjhYSS9mRmF6blZoNURXOHpyam1FcnBGNXVO?= =?utf-8?B?cGk4UDdLK1d5VndDb0pXNmlUdUpkYmpVbFBVTFFBckhSdWc3VkRFcXQ2YWtS?= =?utf-8?B?NXJ4MFgzRzlYMFQ2ZXVVMCtMcTVQcVNsbmtEdzhzNVRlZzlBbE1URnZIbkJN?= =?utf-8?B?bEpuem9zK0hsSHBCNnR4NlU4YVZwdmx0b1lQRDBDVGVqZXFSbkNmd2hHMm9r?= =?utf-8?B?T2E4OGViRFloZDlyWlVraFhLUkFKV2RYREhhQ2lJMlYrSytiV1A4QjdwN3Z6?= =?utf-8?B?a2hQc1RDOVpOWVFucTl2Y3pZNTFhekRVRDZOcGtqQW82d0tDSjg3L2Vjd2ZY?= =?utf-8?B?dDJxRjJHVXQ4TjBMbjRRNUxVWjJBcUhWQkNGSHZhY29nSHVaMG1zSFpKM2E0?= =?utf-8?B?eXRBcExPVnlGdGlOTk5YV0RsTEdHdHFhL0VmVGliZkp5eXJORnJZK2FoOSsr?= =?utf-8?B?ZW9BZWpqUzdUMUd1cjAvdjUvb2R3d1ZDd1BXaGlMNXprUSs4SUUzKzdkR1Rj?= =?utf-8?B?VXRYZUZPeFVNRC9kWXpKMEpsTDRwQllrTks4eUZTTUFZa2VhOHRKbFBpMTZY?= =?utf-8?B?N2Uzd21PNWVhekdJWno2czFxNmhWNEc5a1JGTHVKcnRiRW5MOEdjTURkMGky?= =?utf-8?B?T2RhZ3FaL2FrSGROeitwOEVLb25SdEprQ1pmTEU0b0hGQmMwZi9mOXdBWHpI?= =?utf-8?B?QnVHSHhpM25MMUtNNnozRzR5aUtQblcwUHdBWjV1SUMrRGxzL3JEdG1tMExn?= =?utf-8?B?eWl1OEJKQlcyK2s5NXRKcUI4a0NCdC82MXhsWExhOERwVnIzYzFQZkYzaU1E?= =?utf-8?B?WlVEbnpOVUxiNUk3RVNZZmhoa1ZZb0h6S2dLdjdweFpFaHorVjUrOGFRPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7cd4aa5c-a471-48e6-bed9-08dc44140e8d X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Mar 2024 10:46:51.6648 (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: VI0P250MB1052 Subject: Re: [FFmpeg-devel] [PATCH 5/6] avcodec/tiff_data: Avoid relocations for TiffGeoTagNameType 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: Andreas Rheinhardt: > Instead store all the strings in one continugous string > (with internal \0) and use offsets to access the actual > substrings. This replaces the pointers to the strings > and therefore avoids relocations (and on x64, it actually > shrinks TiffGeoTagNameType by reusing padding to store > the offset field). > > This saves 720B of .data.rel.ro and 1080B of .rela.dyn > (containing the relocation records) here while increasing > .rodata by 384B. > > Signed-off-by: Andreas Rheinhardt > --- > I also have patches for the remaining tables, but am not > satisfied with them yet. > > libavcodec/tiff.c | 28 +++++---- > libavcodec/tiff.h | 5 -- > libavcodec/tiff_data.h | 129 ++++++++++++++++++++++++----------------- > 3 files changed, 92 insertions(+), 70 deletions(-) > > diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c > index 15e5edd93b..004db89c6b 100644 > --- a/libavcodec/tiff.c > +++ b/libavcodec/tiff.c > @@ -139,27 +139,31 @@ static void free_geotags(TiffContext *const s) > s->geotag_count = 0; > } > > -#define RET_GEOKEY(TYPE, array, element)\ > +static const char *get_geokey_name(int key) > +{ > +#define RET_GEOKEY_STR(TYPE, array)\ > if (key >= TIFF_##TYPE##_KEY_ID_OFFSET &&\ > key - TIFF_##TYPE##_KEY_ID_OFFSET < FF_ARRAY_ELEMS(tiff_##array##_name_type_map))\ > - return tiff_##array##_name_type_map[key - TIFF_##TYPE##_KEY_ID_OFFSET].element; > + return tiff_##array##_name_type_string + tiff_##array##_name_type_map[key - TIFF_##TYPE##_KEY_ID_OFFSET].offset; > > -static const char *get_geokey_name(int key) > -{ > - RET_GEOKEY(VERT, vert, name); > - RET_GEOKEY(PROJ, proj, name); > - RET_GEOKEY(GEOG, geog, name); > - RET_GEOKEY(CONF, conf, name); > + RET_GEOKEY_STR(VERT, vert); > + RET_GEOKEY_STR(PROJ, proj); > + RET_GEOKEY_STR(GEOG, geog); > + RET_GEOKEY_STR(CONF, conf); > > return NULL; > } > > static int get_geokey_type(int key) > { > - RET_GEOKEY(VERT, vert, type); > - RET_GEOKEY(PROJ, proj, type); > - RET_GEOKEY(GEOG, geog, type); > - RET_GEOKEY(CONF, conf, type); > +#define RET_GEOKEY_TYPE(TYPE, array)\ > + if (key >= TIFF_##TYPE##_KEY_ID_OFFSET &&\ > + key - TIFF_##TYPE##_KEY_ID_OFFSET < FF_ARRAY_ELEMS(tiff_##array##_name_type_map))\ > + return tiff_##array##_name_type_map[key - TIFF_##TYPE##_KEY_ID_OFFSET].type; > + RET_GEOKEY_TYPE(VERT, vert); > + RET_GEOKEY_TYPE(PROJ, proj); > + RET_GEOKEY_TYPE(GEOG, geog); > + RET_GEOKEY_TYPE(CONF, conf); > > return AVERROR_INVALIDDATA; > } > diff --git a/libavcodec/tiff.h b/libavcodec/tiff.h > index 2dd21dea52..12afcfa6e5 100644 > --- a/libavcodec/tiff.h > +++ b/libavcodec/tiff.h > @@ -222,9 +222,4 @@ typedef struct TiffGeoTagKeyName { > const char *const name; > } TiffGeoTagKeyName; > > -typedef struct TiffGeoTagNameType { > - const char *const name; > - const enum TiffGeoTagType type; > -} TiffGeoTagNameType; > - > #endif /* AVCODEC_TIFF_H */ > diff --git a/libavcodec/tiff_data.h b/libavcodec/tiff_data.h > index 9b123ca8df..9ed46d31af 100644 > --- a/libavcodec/tiff_data.h > +++ b/libavcodec/tiff_data.h > @@ -32,66 +32,89 @@ > > #include "tiff.h" > > +typedef struct TiffGeoTagNameType { > + enum TiffGeoTagType type; > + unsigned offset; > +} TiffGeoTagNameType; > + > #define TIFF_CONF_KEY_ID_OFFSET 1024 > -static const TiffGeoTagNameType tiff_conf_name_type_map[] = { > - {"GTModelTypeGeoKey", GEOTIFF_SHORT }, > - {"GTRasterTypeGeoKey", GEOTIFF_SHORT }, > - {"GTCitationGeoKey", GEOTIFF_STRING} > -}; > +#define CONF_NAME_TYPE_MAP(KEY) \ > + KEY(GTModelTypeGeoKey, SHORT ) \ > + KEY(GTRasterTypeGeoKey, SHORT ) \ > + KEY(GTCitationGeoKey, STRING) \ > > #define TIFF_GEOG_KEY_ID_OFFSET 2048 > -static const TiffGeoTagNameType tiff_geog_name_type_map[] = { > - {"GeographicTypeGeoKey", GEOTIFF_SHORT }, > - {"GeogCitationGeoKey", GEOTIFF_STRING}, > - {"GeogGeodeticDatumGeoKey", GEOTIFF_SHORT }, > - {"GeogPrimeMeridianGeoKey", GEOTIFF_SHORT }, > - {"GeogLinearUnitsGeoKey", GEOTIFF_SHORT }, > - {"GeogLinearUnitSizeGeoKey", GEOTIFF_DOUBLE}, > - {"GeogAngularUnitsGeoKey", GEOTIFF_SHORT }, > - {"GeogAngularUnitSizeGeoKey", GEOTIFF_DOUBLE}, > - {"GeogEllipsoidGeoKey", GEOTIFF_SHORT }, > - {"GeogSemiMajorAxisGeoKey", GEOTIFF_DOUBLE}, > - {"GeogSemiMinorAxisGeoKey", GEOTIFF_DOUBLE}, > - {"GeogInvFlatteningGeoKey", GEOTIFF_DOUBLE}, > - {"GeogAzimuthUnitsGeoKey", GEOTIFF_SHORT }, > - {"GeogPrimeMeridianLongGeoKey", GEOTIFF_DOUBLE} > -}; > +#define GEOG_NAME_TYPE_MAP(KEY) \ > + KEY(GeographicTypeGeoKey, SHORT ) \ > + KEY(GeogCitationGeoKey, STRING) \ > + KEY(GeogGeodeticDatumGeoKey, SHORT ) \ > + KEY(GeogPrimeMeridianGeoKey, SHORT ) \ > + KEY(GeogLinearUnitsGeoKey, SHORT ) \ > + KEY(GeogLinearUnitSizeGeoKey, DOUBLE) \ > + KEY(GeogAngularUnitsGeoKey, SHORT ) \ > + KEY(GeogAngularUnitSizeGeoKey, DOUBLE) \ > + KEY(GeogEllipsoidGeoKey, SHORT ) \ > + KEY(GeogSemiMajorAxisGeoKey, DOUBLE) \ > + KEY(GeogSemiMinorAxisGeoKey, DOUBLE) \ > + KEY(GeogInvFlatteningGeoKey, DOUBLE) \ > + KEY(GeogAzimuthUnitsGeoKey, SHORT ) \ > + KEY(GeogPrimeMeridianLongGeoKey, DOUBLE) \ > > #define TIFF_PROJ_KEY_ID_OFFSET 3072 > -static const TiffGeoTagNameType tiff_proj_name_type_map[] = { > - {"ProjectedCSTypeGeoKey", GEOTIFF_SHORT }, > - {"PCSCitationGeoKey", GEOTIFF_STRING}, > - {"ProjectionGeoKey", GEOTIFF_SHORT }, > - {"ProjCoordTransGeoKey", GEOTIFF_SHORT }, > - {"ProjLinearUnitsGeoKey", GEOTIFF_SHORT }, > - {"ProjLinearUnitSizeGeoKey", GEOTIFF_DOUBLE}, > - {"ProjStdParallel1GeoKey", GEOTIFF_DOUBLE}, > - {"ProjStdParallel2GeoKey", GEOTIFF_DOUBLE}, > - {"ProjNatOriginLongGeoKey", GEOTIFF_DOUBLE}, > - {"ProjNatOriginLatGeoKey", GEOTIFF_DOUBLE}, > - {"ProjFalseEastingGeoKey", GEOTIFF_DOUBLE}, > - {"ProjFalseNorthingGeoKey", GEOTIFF_DOUBLE}, > - {"ProjFalseOriginLongGeoKey", GEOTIFF_DOUBLE}, > - {"ProjFalseOriginLatGeoKey", GEOTIFF_DOUBLE}, > - {"ProjFalseOriginEastingGeoKey", GEOTIFF_DOUBLE}, > - {"ProjFalseOriginNorthingGeoKey", GEOTIFF_DOUBLE}, > - {"ProjCenterLongGeoKey", GEOTIFF_DOUBLE}, > - {"ProjCenterLatGeoKey", GEOTIFF_DOUBLE}, > - {"ProjCenterEastingGeoKey", GEOTIFF_DOUBLE}, > - {"ProjCenterNorthingGeoKey", GEOTIFF_DOUBLE}, > - {"ProjScaleAtNatOriginGeoKey", GEOTIFF_DOUBLE}, > - {"ProjScaleAtCenterGeoKey", GEOTIFF_DOUBLE}, > - {"ProjAzimuthAngleGeoKey", GEOTIFF_DOUBLE}, > - {"ProjStraightVertPoleLongGeoKey", GEOTIFF_DOUBLE} > -}; > +#define PROJ_NAME_TYPE_MAP(KEY) \ > + KEY(ProjectedCSTypeGeoKey, SHORT ) \ > + KEY(PCSCitationGeoKey, STRING) \ > + KEY(ProjectionGeoKey, SHORT ) \ > + KEY(ProjCoordTransGeoKey, SHORT ) \ > + KEY(ProjLinearUnitsGeoKey, SHORT ) \ > + KEY(ProjLinearUnitSizeGeoKey, DOUBLE) \ > + KEY(ProjStdParallel1GeoKey, DOUBLE) \ > + KEY(ProjStdParallel2GeoKey, DOUBLE) \ > + KEY(ProjNatOriginLongGeoKey, DOUBLE) \ > + KEY(ProjNatOriginLatGeoKey, DOUBLE) \ > + KEY(ProjFalseEastingGeoKey, DOUBLE) \ > + KEY(ProjFalseNorthingGeoKey, DOUBLE) \ > + KEY(ProjFalseOriginLongGeoKey, DOUBLE) \ > + KEY(ProjFalseOriginLatGeoKey, DOUBLE) \ > + KEY(ProjFalseOriginEastingGeoKey, DOUBLE) \ > + KEY(ProjFalseOriginNorthingGeoKey, DOUBLE) \ > + KEY(ProjCenterLongGeoKey, DOUBLE) \ > + KEY(ProjCenterLatGeoKey, DOUBLE) \ > + KEY(ProjCenterEastingGeoKey, DOUBLE) \ > + KEY(ProjCenterNorthingGeoKey, DOUBLE) \ > + KEY(ProjScaleAtNatOriginGeoKey, DOUBLE) \ > + KEY(ProjScaleAtCenterGeoKey, DOUBLE) \ > + KEY(ProjAzimuthAngleGeoKey, DOUBLE) \ > + KEY(ProjStraightVertPoleLongGeoKey, DOUBLE) \ > > #define TIFF_VERT_KEY_ID_OFFSET 4096 > -static const TiffGeoTagNameType tiff_vert_name_type_map[] = { > - {"VerticalCSTypeGeoKey", GEOTIFF_SHORT }, > - {"VerticalCitationGeoKey", GEOTIFF_STRING}, > - {"VerticalDatumGeoKey", GEOTIFF_SHORT }, > - {"VerticalUnitsGeoKey", GEOTIFF_SHORT } > -}; > +#define VERT_NAME_TYPE_MAP(KEY) \ > + KEY(VerticalCSTypeGeoKey, SHORT ) \ > + KEY(VerticalCitationGeoKey, STRING) \ > + KEY(VerticalDatumGeoKey, SHORT ) \ > + KEY(VerticalUnitsGeoKey, SHORT ) \ > + > +#define ADD_OFFSET(NAME, TYPE) \ > + NAME ## _OFFSET, \ > + NAME ## _END = NAME ## _OFFSET + sizeof(#NAME) - 1, \ > + > +#define STRING(NAME, TYPE) #NAME "\0" > + > +#define ENTRY(NAME, TYPE) { .type = GEOTIFF_ ## TYPE, .offset = NAME ## _OFFSET }, > +#define NAME_TYPE_MAP(NAME, name) \ > + enum { \ > + NAME ## _NAME_TYPE_MAP(ADD_OFFSET) \ > + }; \ > + static const TiffGeoTagNameType tiff_ ## name ## _name_type_map[] = { \ > + NAME ## _NAME_TYPE_MAP(ENTRY) \ > + }; \ > + static const char *const tiff_ ## name ## _name_type_string = \ > + NAME ## _NAME_TYPE_MAP(STRING) > + > +NAME_TYPE_MAP(CONF, conf); > +NAME_TYPE_MAP(GEOG, geog); > +NAME_TYPE_MAP(PROJ, proj); > +NAME_TYPE_MAP(VERT, vert); > > #define TIFF_GEO_KEY_UNDEFINED 0 > #define TIFF_GEO_KEY_USER_DEFINED 32767 Will apply the two remaining patches of this patchset tonight unless there are objections. - 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".