31 #ifndef GDAL_JP2READER_H_INCLUDED
32 #define GDAL_JP2READER_H_INCLUDED
46 class CPL_DLL GDALJP2Box
51 char szBoxType[5]{0, 0, 0, 0, 0};
58 GByte abyUUID[16]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
60 GByte *pabyData =
nullptr;
62 bool m_bAllowGetFileSize =
true;
67 explicit GDALJP2Box(
VSILFILE * =
nullptr);
70 void SetAllowGetFileSize(
bool b)
72 m_bAllowGetFileSize = b;
75 int SetOffset(
GIntBig nNewOffset);
81 int ReadFirstChild(GDALJP2Box *poSuperBox);
82 int ReadNextChild(GDALJP2Box *poSuperBox);
104 GByte *ReadBoxData();
108 int DumpReadable(FILE *,
int nIndentLevel = 0);
115 const GByte *GetUUID()
121 void SetType(
const char *);
122 void SetWritableData(
int nLength,
const GByte *pabyData);
123 void AppendWritableData(
int nLength,
const void *pabyDataIn);
124 void AppendUInt32(
GUInt32 nVal);
125 void AppendUInt16(
GUInt16 nVal);
126 void AppendUInt8(
GByte nVal);
127 const GByte *GetWritableData()
const
131 GByte *GetWritableBoxData()
const;
134 static GDALJP2Box *CreateSuperBox(
const char *pszType,
int nCount,
135 const GDALJP2Box *
const *papoBoxes);
136 static GDALJP2Box *CreateAsocBox(
int nCount,
137 const GDALJP2Box *
const *papoBoxes);
138 static GDALJP2Box *CreateLblBox(
const char *pszLabel);
139 static GDALJP2Box *CreateLabelledXMLAssoc(
const char *pszLabel,
141 static GDALJP2Box *CreateUUIDBox(
const GByte *pabyUUID,
int nDataSize,
142 const GByte *pabyData);
145 static GDALJP2Box *CreateJUMBFDescriptionBox(
const GByte *pabyUUIDType,
146 const char *pszLabel);
147 static GDALJP2Box *CreateJUMBFBox(
const GDALJP2Box *poJUMBFDescriptionBox,
149 const GDALJP2Box *
const *papoBoxes);
156 typedef struct _GDALJP2GeoTIFFBox GDALJP2GeoTIFFBox;
158 class CPL_DLL GDALJP2Metadata
162 void CollectGMLData(GDALJP2Box *);
163 int GMLSRSLookup(
const char *pszURN);
165 int nGeoTIFFBoxesCount;
166 GDALJP2GeoTIFFBox *pasGeoTIFFBoxes;
171 void GetGMLJP2GeoreferencingInfo(
int &nEPSGCode,
double adfOrigin[2],
172 double adfXVector[2],
double adfYVector[2],
173 const char *&pszComment,
174 CPLString &osDictBox,
bool &bNeedAxisFlip);
176 int bMainMDDomainOnly);
181 char **papszGMLMetadata;
183 bool bHaveGeoTransform;
184 double adfGeoTransform[6];
194 char **papszMetadata;
195 char *pszXMPMetadata;
196 char *pszGDALMultiDomainMetadata;
199 void ReadBox(
VSILFILE *fpVSIL, GDALJP2Box &oBox,
int &iBox);
207 int ParseJP2GeoTIFF();
209 int ParseGMLCoverageDesc();
211 int ReadAndParse(
VSILFILE *fpVSIL,
int nGEOJP2Index = 0,
212 int nGMLJP2Index = 1,
int nMSIGIndex = 2,
213 int *pnIndexUsed =
nullptr);
214 int ReadAndParse(
const char *pszFilename,
int nGEOJP2Index = 0,
215 int nGMLJP2Index = 1,
int nMSIGIndex = 2,
216 int nWorldFileIndex = 3,
int *pnIndexUsed =
nullptr);
220 void SetGeoTransform(
double *);
221 void SetGCPs(
int,
const GDAL_GCP *);
222 void SetRPCMD(
char **papszRPCMDIn);
224 GDALJP2Box *CreateJP2GeoTIFF();
225 GDALJP2Box *CreateGMLJP2(
int nXSize,
int nYSize);
226 GDALJP2Box *CreateGMLJP2V2(
int nXSize,
int nYSize,
227 const char *pszDefFilename,
231 CreateGDALMultiDomainMetadataXMLBox(
GDALDataset *poSrcDS,
232 int bMainMDDomainOnly);
233 static GDALJP2Box **CreateXMLBoxes(
GDALDataset *poSrcDS,
int *pnBoxes);
234 static GDALJP2Box *CreateXMPBox(
GDALDataset *poSrcDS);
235 static GDALJP2Box *CreateIPRBox(
GDALDataset *poSrcDS);
236 static int IsUUID_MSI(
const GByte *abyUUID);
237 static int IsUUID_XMP(
const GByte *abyUUID);
243 const char CPL_DLL *GDALGetJPEG2000Reversibility(
const char *pszFilename,