Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: GDAL 4 : * Purpose: LERC driver 5 : * Author: Even Rouault <even dot rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2026, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "gdal_frmts.h" 14 : #include "gdalplugindriverproxy.h" 15 : 16 : #include "lercdrivercore.h" 17 : #include "cpl_string.h" 18 : 19 : /************************************************************************/ 20 : /* LERCDriverIdentify() */ 21 : /************************************************************************/ 22 : 23 63650 : int LERCDriverIdentify(GDALOpenInfo *poOpenInfo) 24 : 25 : { 26 : #if !defined(GDAL_USE_LERC_INTERNAL) 27 : static const char L1sig[] = "CntZImage "; 28 : #endif 29 : static const char L2sig[] = "Lerc2 "; 30 63650 : const char *pszHeader = reinterpret_cast<char *>(poOpenInfo->pabyHeader); 31 69505 : return pszHeader && poOpenInfo->nHeaderBytes >= 10 && 32 : ( 33 : #if !defined(GDAL_USE_LERC_INTERNAL) 34 : strncmp(pszHeader, L1sig, sizeof(L1sig) - 1) == 0 || 35 : #endif 36 69505 : strncmp(pszHeader, L2sig, sizeof(L2sig) - 1) == 0); 37 : } 38 : 39 : /************************************************************************/ 40 : /* LERCDriverSetCommonMetadata() */ 41 : /************************************************************************/ 42 : 43 1872 : void LERCDriverSetCommonMetadata(GDALDriver *poDriver) 44 : { 45 1872 : poDriver->SetDescription(DRIVER_NAME); 46 1872 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 47 1872 : "Limited Error Raster Compression"); 48 1872 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/lerc.html"); 49 1872 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "lrc"); 50 1872 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 51 1872 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 52 : 53 1872 : poDriver->pfnIdentify = LERCDriverIdentify; 54 1872 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 55 1872 : } 56 : 57 : /************************************************************************/ 58 : /* DeclareDeferredLERCPlugin() */ 59 : /************************************************************************/ 60 : 61 : #ifdef PLUGIN_FILENAME 62 : void DeclareDeferredLERCPlugin() 63 : { 64 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 65 : { 66 : return; 67 : } 68 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 69 : #ifdef PLUGIN_INSTALLATION_MESSAGE 70 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 71 : PLUGIN_INSTALLATION_MESSAGE); 72 : #endif 73 : LERCDriverSetCommonMetadata(poDriver); 74 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 75 : } 76 : #endif