Isis 3 Programmer Reference
JP2Decoder.h
1 #ifndef JP2Decoder_h
2 #define JP2Decoder_h
3 
8 /* SPDX-License-Identifier: CC0-1.0 */
9 
10 #include <string>
11 
12 #if ENABLEJP2K
13 #include "jp2.h"
14 #include "kdu_stripe_decompressor.h"
15 #endif
16 
17 #define MIN_STRIPE_HEIGHT 256
18 #define MAX_STRIPE_HEIGHT 8192
19 
20 namespace Isis {
21  class JP2Error;
22 
83  class JP2Decoder {
84  public:
85  JP2Decoder(const QString &jp2file);
86  ~JP2Decoder();
87 
88  // Register with the Kakadu error facility
89  JP2Error *kakadu_error() const {
90  return Kakadu_Error;
91  };
92 
93  // Open and initialize the JP2 file for reading
94  void OpenFile();
95 
96  // Get the sample dimension of the JP2 file
97  inline int GetSampleDimension() const {
98  return ((int) p_numSamples);
99  }
100 
101  // Get the line dimension of the JP2 file
102  inline int GetLineDimension() const {
103  return ((int) p_numLines);
104  }
105 
106  // Get the band dimension of the JP2 file
107  inline int GetBandDimension() const {
108  return ((int) p_numBands);
109  }
110 
111  // Get number of bytes per pixel in the JP2 file
112  inline int GetPixelBytes() const {
113  return (p_pixelBytes);
114  }
115 
116  // Determine if data in JP2 file is signed
117  inline bool GetSignedData() const {
118  return (p_signedData);
119  }
120 
121  // Read byte data from the JP2 file
122  void Read(unsigned char **inbuf);
123 
124  // Read 16-bit data from the JP2 file
125  void Read(short int **inbuf);
126 
127  static bool IsJP2(QString filename);
128 
129  private:
130  QString p_jp2File;
131  unsigned int p_numSamples;
132  unsigned int p_numLines;
133  unsigned int p_numBands;
134  unsigned int p_pixelBytes;
136 
137 #if ENABLEJP2K
138  unsigned int p_resolutionLevel;
139  unsigned int p_highestResLevel;
141  int *p_maxStripeHeights;
143  int *p_precisions;
145  bool *p_isSigned;
147  int *p_stripeHeights;
149 
151  unsigned int p_pixelBits;
152  bool p_readStripes;
153 
154 
155  kdu_core::kdu_dims p_imageDims;
156  kdu_supp::jp2_family_src *JP2_Stream;
157  kdu_supp::jp2_source *JP2_Source;
158  kdu_core::kdu_codestream *JPEG2000_Codestream;
159  kdu_supp::kdu_stripe_decompressor p_decompressor;
160 #endif
163 
164  void SetResolutionAndRegion();
165  };
168 };
169 #endif
Isis::JP2Decoder::p_jp2File
QString p_jp2File
Input file name.
Definition: JP2Decoder.h:130
Isis::JP2Decoder::OpenFile
void OpenFile()
Open the JPEG2000 file.
Definition: JP2Decoder.cpp:52
Isis::JP2Decoder::p_numSamples
unsigned int p_numSamples
Number of samples in JP2 file.
Definition: JP2Decoder.h:131
Isis::JP2Decoder::Read
void Read(unsigned char **inbuf)
Read data from JP2 file containing 8-bit data.
Definition: JP2Decoder.cpp:168
Isis::JP2Decoder::JP2Decoder
JP2Decoder(const QString &jp2file)
Constructs a JPEG2000 decoder object.
Definition: JP2Decoder.cpp:32
Isis::JP2Decoder::p_numLines
unsigned int p_numLines
Number of lines in JP2 file.
Definition: JP2Decoder.h:132
Isis::JP2Error
Kakadu error messaging class.
Definition: JP2Error.h:38
Isis::JP2Decoder::Kakadu_Error
JP2Error * Kakadu_Error
JP2 Error handling facility.
Definition: JP2Decoder.h:162
Isis::JP2Decoder
JPEG2000 decoder class.
Definition: JP2Decoder.h:83
Isis::JP2Decoder::p_signedData
bool p_signedData
Set to true if data in JP2 file is signed.
Definition: JP2Decoder.h:135
Isis::JP2Decoder::~JP2Decoder
~JP2Decoder()
JP2Decoder destructor.
Definition: JP2Decoder.cpp:196
Isis::JP2Decoder::SetResolutionAndRegion
void SetResolutionAndRegion()
Sets resolution of data that will be decompressed. Also determines the image dimensions at the reques...
Definition: JP2Decoder.cpp:145
Isis::JP2Decoder::p_numBands
unsigned int p_numBands
Number of bands in JP2 file.
Definition: JP2Decoder.h:133
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16
Isis::JP2Decoder::p_pixelBytes
unsigned int p_pixelBytes
Number of bytes per pixel in JP2 file.
Definition: JP2Decoder.h:134