Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: GIF Driver 4 : * Purpose: Implement GDAL GIF Support using libungif code. 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2001, Frank Warmerdam 9 : * Copyright (c) 2007-2012, Even Rouault <even dot rouault at spatialys.com> 10 : * 11 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #include "gdal_frmts.h" 15 : #include "gdalplugindriverproxy.h" 16 : 17 : #include "gifdrivercore.h" 18 : 19 : /************************************************************************/ 20 : /* GIFDriverIdentify() */ 21 : /************************************************************************/ 22 : 23 118079 : int GIFDriverIdentify(GDALOpenInfo *poOpenInfo) 24 : 25 : { 26 118079 : if (poOpenInfo->nHeaderBytes < 8 || !poOpenInfo->fpL) 27 110394 : return FALSE; 28 : 29 15326 : return (memcmp(poOpenInfo->pabyHeader, "GIF87a", 6) == 0 || 30 15326 : memcmp(poOpenInfo->pabyHeader, "GIF89a", 6) == 0); 31 : } 32 : 33 : /************************************************************************/ 34 : /* BIGGIFDriverSetCommonMetadata() */ 35 : /************************************************************************/ 36 : 37 2112 : void BIGGIFDriverSetCommonMetadata(GDALDriver *poDriver) 38 : { 39 2112 : poDriver->SetDescription(BIGGIF_DRIVER_NAME); 40 2112 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 41 2112 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 42 2112 : "Graphics Interchange Format (.gif)"); 43 2112 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/gif.html"); 44 2112 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "gif"); 45 2112 : poDriver->SetMetadataItem(GDAL_DMD_MIMETYPE, "image/gif"); 46 2112 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 47 : 48 2112 : poDriver->pfnIdentify = GIFDriverIdentify; 49 2112 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 50 2112 : } 51 : 52 : /************************************************************************/ 53 : /* GIFDriverSetCommonMetadata() */ 54 : /************************************************************************/ 55 : 56 2112 : void GIFDriverSetCommonMetadata(GDALDriver *poDriver) 57 : { 58 2112 : poDriver->SetDescription(GIF_DRIVER_NAME); 59 2112 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 60 2112 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 61 2112 : "Graphics Interchange Format (.gif)"); 62 2112 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/gif.html"); 63 2112 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "gif"); 64 2112 : poDriver->SetMetadataItem(GDAL_DMD_MIMETYPE, "image/gif"); 65 2112 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONDATATYPES, "Byte"); 66 : 67 2112 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONOPTIONLIST, 68 : "<CreationOptionList>\n" 69 : " <Option name='INTERLACING' type='boolean'/>\n" 70 : " <Option name='WORLDFILE' type='boolean'/>\n" 71 2112 : "</CreationOptionList>\n"); 72 : 73 2112 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 74 : 75 2112 : poDriver->pfnIdentify = GIFDriverIdentify; 76 2112 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 77 2112 : poDriver->SetMetadataItem(GDAL_DCAP_CREATECOPY, "YES"); 78 2112 : } 79 : 80 : /************************************************************************/ 81 : /* DeclareDeferredGIFPlugin() */ 82 : /************************************************************************/ 83 : 84 : #ifdef PLUGIN_FILENAME 85 2033 : void DeclareDeferredGIFPlugin() 86 : { 87 2033 : if (GDALGetDriverByName(GIF_DRIVER_NAME) != nullptr) 88 : { 89 283 : return; 90 : } 91 : { 92 1750 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 93 : #ifdef PLUGIN_INSTALLATION_MESSAGE 94 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 95 : PLUGIN_INSTALLATION_MESSAGE); 96 : #endif 97 1750 : GIFDriverSetCommonMetadata(poDriver); 98 1750 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 99 : } 100 : { 101 1750 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 102 : #ifdef PLUGIN_INSTALLATION_MESSAGE 103 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 104 : PLUGIN_INSTALLATION_MESSAGE); 105 : #endif 106 1750 : BIGGIFDriverSetCommonMetadata(poDriver); 107 1750 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 108 : } 109 : } 110 : #endif