LCOV - code coverage report
Current view: top level - frmts/ecw - jp2userbox.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 27 34 79.4 %
Date: 2024-11-21 22:18:42 Functions: 6 7 85.7 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  GDAL ECW Driver
       4             :  * Purpose:  JP2UserBox implementation - arbitrary box read/write.
       5             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2005, Frank Warmerdam <warmerdam@pobox.com>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : // ncsjpcbuffer.h needs the min and max macros.
      14             : #undef NOMINMAX
      15             : 
      16             : #include "gdal_ecw.h"
      17             : 
      18             : #if defined(HAVE_COMPRESS)
      19             : 
      20             : /************************************************************************/
      21             : /*                             JP2UserBox()                             */
      22             : /************************************************************************/
      23             : 
      24          62 : JP2UserBox::JP2UserBox()
      25             : {
      26          62 :     pabyData = nullptr;
      27          62 :     nDataLength = 0;
      28             : 
      29          62 :     m_nTBox = 0;
      30          62 : }
      31             : 
      32             : /************************************************************************/
      33             : /*                            ~JP2UserBox()                             */
      34             : /************************************************************************/
      35             : 
      36         124 : JP2UserBox::~JP2UserBox()
      37             : 
      38             : {
      39          62 :     if (pabyData != nullptr)
      40             :     {
      41          62 :         CPLFree(pabyData);
      42          62 :         pabyData = nullptr;
      43             :     }
      44         124 : }
      45             : 
      46             : /************************************************************************/
      47             : /*                              SetData()                               */
      48             : /************************************************************************/
      49             : 
      50          62 : void JP2UserBox::SetData(int nLengthIn, const unsigned char *pabyDataIn)
      51             : 
      52             : {
      53          62 :     if (pabyData != nullptr)
      54           0 :         CPLFree(pabyData);
      55             : 
      56          62 :     nDataLength = nLengthIn;
      57          62 :     pabyData = static_cast<unsigned char *>(CPLMalloc(nDataLength));
      58          62 :     memcpy(pabyData, pabyDataIn, nDataLength);
      59             : 
      60          62 :     m_bValid = true;
      61          62 : }
      62             : 
      63             : /************************************************************************/
      64             : /*                            UpdateXLBox()                             */
      65             : /************************************************************************/
      66             : 
      67          48 : void JP2UserBox::UpdateXLBox()
      68             : 
      69             : {
      70          48 :     m_nXLBox = 8 + nDataLength;
      71          48 :     m_nLDBox = nDataLength;
      72          48 : }
      73             : 
      74             : /************************************************************************/
      75             : /*                               Parse()                                */
      76             : /*                                                                      */
      77             : /*      Parse box, and data contents from file into memory.             */
      78             : /************************************************************************/
      79             : #if ECWSDK_VERSION >= 55
      80             : CNCSError JP2UserBox::Parse(CPL_UNUSED NCS::SDK::CFileBase &JP2File,
      81             :                             CPL_UNUSED const NCS::CIOStreamPtr &Stream)
      82             : #elif ECWSDK_VERSION >= 40
      83             : CNCSError JP2UserBox::Parse(CPL_UNUSED NCS::SDK::CFileBase &JP2File,
      84             :                             CPL_UNUSED NCS::CIOStream &Stream)
      85             : #else
      86           0 : CNCSError JP2UserBox::Parse(CPL_UNUSED class CNCSJP2File &JP2File,
      87             :                             CPL_UNUSED CNCSJPCIOStream &Stream)
      88             : #endif
      89             : {
      90           0 :     CNCSError Error(GetCNCSError(NCS_SUCCESS));
      91             : 
      92           0 :     return Error;
      93             : }
      94             : 
      95             : /************************************************************************/
      96             : /*                              UnParse()                               */
      97             : /*                                                                      */
      98             : /*      Write box meta information, and data to file.                   */
      99             : /************************************************************************/
     100             : #if ECWSDK_VERSION >= 55
     101             : CNCSError JP2UserBox::UnParse(NCS::SDK::CFileBase &JP2File,
     102             :                               const NCS::CIOStreamPtr &Stream)
     103             : #elif ECWSDK_VERSION >= 40
     104             : CNCSError JP2UserBox::UnParse(NCS::SDK::CFileBase &JP2File,
     105             :                               NCS::CIOStream &Stream)
     106             : #else
     107          48 : CNCSError JP2UserBox::UnParse(class CNCSJP2File &JP2File,
     108             :                               CNCSJPCIOStream &Stream)
     109             : #endif
     110             : {
     111          48 :     CNCSError Error(GetCNCSError(NCS_SUCCESS));
     112             : 
     113          48 :     if (m_nTBox == 0)
     114             :     {
     115           0 :         Error = GetCNCSError(NCS_UNKNOWN_ERROR);
     116           0 :         CPLError(CE_Failure, CPLE_AppDefined,
     117             :                  "No box type set in JP2UserBox::UnParse()");
     118           0 :         return Error;
     119             :     }
     120             : #if ECWSDK_VERSION < 50
     121          48 :     Error = CNCSJP2Box::UnParse(JP2File, Stream);
     122             : #else
     123             :     Error = CNCSSDKBox::UnParse(JP2File, Stream);
     124             : #endif
     125             : 
     126             : #if ECWSDK_VERSION >= 55
     127             :     Stream->Write(pabyData, nDataLength);
     128             : #else
     129          48 :     Stream.Write(pabyData, nDataLength);
     130             : #endif
     131             : 
     132          48 :     return Error;
     133             : }
     134             : 
     135             : #endif /* defined(HAVE_COMPRESS) */

Generated by: LCOV version 1.14