LCOV - code coverage report
Current view: top level - frmts/gif - gifdrivercore.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 42 42 100.0 %
Date: 2025-10-13 21:15:08 Functions: 7 7 100.0 %

          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

Generated by: LCOV version 1.14