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) { m_bAllowGetFileSize = b; }
72 int SetOffset(
GIntBig nNewOffset );
78 int ReadFirstChild( GDALJP2Box *poSuperBox );
79 int ReadNextChild( GDALJP2Box *poSuperBox );
81 GIntBig GetBoxOffset()
const {
return nBoxOffset; }
82 GIntBig GetBoxLength()
const {
return nBoxLength; }
84 GIntBig GetDataOffset()
const {
return nDataOffset; }
87 const char *GetType() {
return szBoxType; }
93 int DumpReadable( FILE *,
int nIndentLevel = 0 );
95 VSILFILE *GetFILE() {
return fpVSIL; }
97 const GByte *GetUUID() {
return abyUUID; }
100 void SetType(
const char * );
101 void SetWritableData(
int nLength,
const GByte *pabyData );
102 void AppendWritableData(
int nLength,
const void *pabyDataIn );
103 void AppendUInt32(
GUInt32 nVal );
104 void AppendUInt16(
GUInt16 nVal );
105 void AppendUInt8(
GByte nVal );
106 const GByte*GetWritableData()
const {
return pabyData; }
107 GByte *GetWritableBoxData()
const;
110 static GDALJP2Box *CreateSuperBox(
const char* pszType,
112 const GDALJP2Box *
const *papoBoxes );
113 static GDALJP2Box *CreateAsocBox(
int nCount,
114 const GDALJP2Box *
const *papoBoxes );
115 static GDALJP2Box *CreateLblBox(
const char *pszLabel );
116 static GDALJP2Box *CreateLabelledXMLAssoc(
const char *pszLabel,
117 const char *pszXML );
118 static GDALJP2Box *CreateUUIDBox(
const GByte *pabyUUID,
119 int nDataSize,
const GByte *pabyData );
122 static GDALJP2Box *CreateJUMBFDescriptionBox(
const GByte *pabyUUIDType,
123 const char* pszLabel );
124 static GDALJP2Box *CreateJUMBFBox(
const GDALJP2Box* poJUMBFDescriptionBox,
126 const GDALJP2Box *
const *papoBoxes );
133 typedef struct _GDALJP2GeoTIFFBox GDALJP2GeoTIFFBox;
135 class CPL_DLL GDALJP2Metadata
139 void CollectGMLData( GDALJP2Box * );
140 int GMLSRSLookup(
const char *pszURN );
142 int nGeoTIFFBoxesCount;
143 GDALJP2GeoTIFFBox *pasGeoTIFFBoxes;
148 int GetGMLJP2GeoreferencingInfo(
int& nEPSGCode,
150 double adfXVector[2],
151 double adfYVector[2],
152 const char*& pszComment,
154 int& bNeedAxisFlip );
155 static CPLXMLNode* CreateGDALMultiDomainMetadataXML(
157 int bMainMDDomainOnly );
162 char **papszGMLMetadata;
164 bool bHaveGeoTransform;
165 double adfGeoTransform[6];
175 char **papszMetadata;
176 char *pszXMPMetadata;
177 char *pszGDALMultiDomainMetadata;
180 void ReadBox(
VSILFILE *fpVSIL, GDALJP2Box& oBox,
int& iBox );
188 int ParseJP2GeoTIFF();
190 int ParseGMLCoverageDesc();
192 int ReadAndParse(
VSILFILE * fpVSIL,
193 int nGEOJP2Index = 0,
int nGMLJP2Index = 1,
194 int nMSIGIndex = 2,
int *pnIndexUsed =
nullptr );
195 int ReadAndParse(
const char *pszFilename,
int nGEOJP2Index = 0,
196 int nGMLJP2Index = 1,
int nMSIGIndex = 2,
197 int nWorldFileIndex = 3,
int *pnIndexUsed =
nullptr );
201 void SetGeoTransform(
double * );
202 void SetGCPs(
int,
const GDAL_GCP * );
203 void SetRPCMD(
char** papszRPCMDIn );
205 GDALJP2Box *CreateJP2GeoTIFF();
206 GDALJP2Box *CreateGMLJP2(
int nXSize,
int nYSize );
207 GDALJP2Box *CreateGMLJP2V2(
int nXSize,
int nYSize,
208 const char* pszDefFilename,
211 static GDALJP2Box* CreateGDALMultiDomainMetadataXMLBox(
213 int bMainMDDomainOnly );
214 static GDALJP2Box** CreateXMLBoxes(
GDALDataset* poSrcDS,
216 static GDALJP2Box *CreateXMPBox (
GDALDataset* poSrcDS );
217 static GDALJP2Box *CreateIPRBox (
GDALDataset* poSrcDS );
218 static int IsUUID_MSI(
const GByte *abyUUID);
219 static int IsUUID_XMP(
const GByte *abyUUID);
226 const char CPL_DLL *GDALGetJPEG2000Reversibility(
const char* pszFilename,