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) */