Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: EXR read/write Driver 4 : * Author: Even Rouault <even.rouault at spatialys.com> 5 : * 6 : ****************************************************************************** 7 : * Copyright (c) 2020, Even Rouault <even.rouault at spatialys.com> 8 : * 9 : * SPDX-License-Identifier: MIT 10 : ****************************************************************************/ 11 : 12 : #include "gdal_frmts.h" 13 : #include "gdalplugindriverproxy.h" 14 : 15 : #include "exrdrivercore.h" 16 : 17 : /************************************************************************/ 18 : /* EXRDriverIdentify() */ 19 : /************************************************************************/ 20 : 21 57812 : int EXRDriverIdentify(GDALOpenInfo *poOpenInfo) 22 : 23 : { 24 57812 : if (STARTS_WITH_CI(poOpenInfo->pszFilename, "EXR:")) 25 2 : return true; 26 : 27 : // Check magic number 28 3361 : return poOpenInfo->fpL != nullptr && poOpenInfo->nHeaderBytes >= 4 && 29 3170 : poOpenInfo->pabyHeader[0] == 0x76 && 30 147 : poOpenInfo->pabyHeader[1] == 0x2f && 31 61318 : poOpenInfo->pabyHeader[2] == 0x31 && 32 57957 : poOpenInfo->pabyHeader[3] == 0x01; 33 : } 34 : 35 : /************************************************************************/ 36 : /* EXRDriverSetCommonMetadata() */ 37 : /************************************************************************/ 38 : 39 1760 : void EXRDriverSetCommonMetadata(GDALDriver *poDriver) 40 : { 41 1760 : poDriver->SetDescription(DRIVER_NAME); 42 1760 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 43 1760 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 44 1760 : "Extended Dynamic Range Image File Format"); 45 1760 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/exr.html"); 46 1760 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "exr"); 47 1760 : poDriver->SetMetadataItem( 48 : GDAL_DMD_CREATIONOPTIONLIST, 49 : "<CreationOptionList>" 50 : " <Option name='COMPRESS' type='string-select' default='ZIP'>" 51 : " <Value>NONE</Value>" 52 : " <Value>RLE</Value>" 53 : " <Value>ZIPS</Value>" 54 : " <Value>ZIP</Value>" 55 : " <Value>PIZ</Value>" 56 : " <Value>PXR24</Value>" 57 : " <Value>B44</Value>" 58 : " <Value>B44A</Value>" 59 : " <Value>DWAA</Value>" 60 : " <Value>DWAB</Value>" 61 : " </Option>" 62 : " <Option name='PIXEL_TYPE' type='string-select'>" 63 : " <Value>HALF</Value>" 64 : " <Value>FLOAT</Value>" 65 : " <Value>UINT</Value>" 66 : " </Option>" 67 : " <Option name='TILED' type='boolean' description='Use tiling' " 68 : "default='YES'/>" 69 : " <Option name='BLOCKXSIZE' type='int' description='Tile width' " 70 : "default='256'/>" 71 : " <Option name='BLOCKYSIZE' type='int' description='Tile height' " 72 : "default='256'/>" 73 : " <Option name='OVERVIEWS' type='boolean' description='Whether to " 74 : "create overviews' default='NO'/>" 75 : " <Option name='OVERVIEW_RESAMPLING' type='string' " 76 : "description='Resampling method' default='CUBIC'/>" 77 : " <Option name='PREVIEW' type='boolean' description='Create a " 78 : "preview' default='NO'/>" 79 : " <Option name='AUTO_RESCALE' type='boolean' description='Whether to " 80 : "rescale Byte RGB(A) values to 0-1' default='YES'/>" 81 : " <Option name='DWA_COMPRESSION_LEVEL' type='int' description='DWA " 82 : "compression level'/>" 83 1760 : "</CreationOptionList>"); 84 1760 : poDriver->SetMetadataItem(GDAL_DMD_SUBDATASETS, "YES"); 85 1760 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 86 : 87 1760 : poDriver->pfnIdentify = EXRDriverIdentify; 88 1760 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 89 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE, "YES"); 90 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CREATECOPY, "YES"); 91 1760 : } 92 : 93 : /************************************************************************/ 94 : /* DeclareDeferredEXRPlugin() */ 95 : /************************************************************************/ 96 : 97 : #ifdef PLUGIN_FILENAME 98 2033 : void DeclareDeferredEXRPlugin() 99 : { 100 2033 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 101 : { 102 283 : return; 103 : } 104 1750 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 105 : #ifdef PLUGIN_INSTALLATION_MESSAGE 106 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 107 : PLUGIN_INSTALLATION_MESSAGE); 108 : #endif 109 1750 : EXRDriverSetCommonMetadata(poDriver); 110 1750 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 111 : } 112 : #endif