LCOV - code coverage report
Current view: top level - frmts/exr - exrdrivercore.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 30 30 100.0 %
Date: 2025-10-01 17:07:58 Functions: 5 5 100.0 %

          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

Generated by: LCOV version 1.14