OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimKakaduCompressor.h
Go to the documentation of this file.
1 //---
2 //
3 // License: MIT
4 //
5 // Description: Wrapper class to compress whole tiles using kdu_analysis
6 // object.
7 //
8 //---
9 // $Id$
10 
11 #ifndef ossimKakaduCompressor_HEADER
12 #define ossimKakaduCompressor_HEADER 1
13 
15 #include <ossim/base/ossimIrect.h>
16 #include <ossim/base/ossimObject.h>
18 #include <ossim/base/ossimRefPtr.h>
19 #include <ossim/base/ossimString.h>
21 #include <kdu_compressed.h>
22 #include <kdu_elementary.h>
23 #include <kdu_sample_processing.h>
24 #include <kdu_stripe_compressor.h>
25 
26 #include <iosfwd>
27 
28 class ossimFilename;
29 class ossimImageData;
30 class ossimImageGeometry;
31 class ossimIpt;
33 class ossimNitfJ2klraTag;
34 
35 namespace kdu_supp
36 {
37  class jp2_family_tgt;
38  class jp2_target;
39 }
40 
43 {
44 public:
45 
46  // Enums moved to: ossimKakaduCompressorInterface.h
47  // Matches static "COMPRESSION_QUALITY" string array in .cpp.
48  // enum ossimKakaduCompressionQuality
49  // {
50  // Prefixed with OKP for OSSIM Kakadu Plugin to avoid clashes.
51  // OKP_UNKNOWN = 0,
52  // OKP_USER_DEFINED = 1,
53  // OKP_NUMERICALLY_LOSSLESS = 2,
54  // OKP_VISUALLY_LOSSLESS = 3,
55  // OKP_LOSSY = 4,
56  // OKP_EPJE = 5 // Exploitation Preferred J2K Encoding
57  // };
58 
61 
63  virtual ~ossimKakaduCompressor();
64 
77  virtual void create(ossim::ostream* os,
78  ossimScalarType scalar,
79  ossim_uint32 bands,
80  const ossimIrect& imageRect,
81  const ossimIpt& tileSize,
82  ossim_uint32 tilesToWrite,
83  bool jp2);
84 
90  void openJp2Codestream();
91 
102  virtual bool writeTile(ossimImageData& srcTile);
103 
108  virtual void finish();
109 
124 
127 
136  void setReversibleFlag(bool reversible);
137 
139  bool getReversibleFlag() const;
140 
146  virtual void setAlphaChannelFlag( bool flag );
147 
154  bool getAlphaChannelFlag() const;
155 
164  virtual void setLevels(ossim_int32 levels);
165 
167  ossim_int32 getLevels() const;
168 
176  void setThreads(ossim_int32 threads);
177 
179  ossim_int32 getThreads() const;
180 
189  void setOptions(const std::vector<ossimString>& options);
190 
195  void getOptions(std::vector<ossimString>& options) const;
196 
200  bool saveState(ossimKeywordlist& kwl, const char* prefix=0)const;
201 
206  bool loadState(const ossimKeywordlist& kwl, const char* prefix=0);
207 
216  virtual bool setProperty(ossimRefPtr<ossimProperty> property);
217 
224 
230  void getPropertyNames(std::vector<ossimString>& propertyNames)const;
231 
240  bool writeGeotiffBox(const ossimImageGeometry* geom,
241  const ossimIrect& rect,
242  const ossimFilename& tmpFile,
243  ossimPixelType pixelType);
244 
251  bool writeGmlBox( const ossimImageGeometry* geom,
252  const ossimIrect& rect );
253 
259  void initialize( ossimNitfJ2klraTag* j2klraTag,
260  ossim_uint32 actualBitsPerPixel ) const;
261 
262  // ossimObject virtuals:
263  virtual ossimString getLongName() const;
264  virtual ossimString getClassName() const;
265 
266 private:
267 
268  void initializeCodingParams(kdu_core::kdu_params* cod, const ossimIrect& imageRect);
269 
270  int getNumberOfLayers() const;
271 
273  void setQualityTypeString(const ossimString& s);
274 
285  void setLevels(kdu_core::kdu_params* cod,
286  const ossimIrect& imageRect,
287  ossim_int32 levels);
288 
299  void setCodeBlockSize(kdu_core::kdu_params* cod,
300  ossim_int32 xSize,
301  ossim_int32 ySize);
302 
317  void setProgressionOrder(kdu_core::kdu_params* cod,
318  ossim_int32 corder);
319 
334  void setWaveletKernel(kdu_core::kdu_params* cod, ossim_int32 kernel);
335 
343  void setQualityLayers(kdu_core::kdu_params* cod, ossim_int32 layers);
344 
345  void setTlmTileCount(ossim_uint32 tilesToWrite);
346 
347  void printCompressionQualityTypes( std::ostream& out ) const;
348 
350 
351  kdu_supp::jp2_family_tgt* m_jp2FamTgt;
352  kdu_supp::jp2_target* m_jp2Target;
353  kdu_core::kdu_codestream m_codestream;
354  kdu_core::kdu_thread_env* m_threadEnv;
355  kdu_core::kdu_thread_queue* m_threadQueue;
356 
359 
361  std::vector<kdu_core::kdu_long> m_layerByteSizes;
362 
364  // std::vector<kdu_uint16> m_layerSlopes;
365 
368 
371 
373  bool m_alpha;
374 
377 
380 
382  std::vector<ossimString> m_options;
383 
385 
388 
389 TYPE_DATA
390 }; // End: class ossimKakaduCompressor
391 
392 #endif /* matches: #ifndef ossimKakaduCompressor_HEADER */
393 
void setQualityLayers(kdu_core::kdu_params *cod, ossim_int32 layers)
Sets the number of quality layers.
virtual void create(ossim::ostream *os, ossimScalarType scalar, ossim_uint32 bands, const ossimIrect &imageRect, const ossimIpt &tileSize, ossim_uint32 tilesToWrite, bool jp2)
Create method.
bool m_reversible
Lossless or lossy.
void setReversibleFlag(bool reversible)
Sets the m_reversible flag.
virtual void setLevels(ossim_int32 levels)
Sets the number of levels.
Represents serializable keyword/value map.
ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
void initialize(ossimNitfJ2klraTag *j2klraTag, ossim_uint32 actualBitsPerPixel) const
Initializes the tag.
bool writeGmlBox(const ossimImageGeometry *geom, const ossimIrect &rect)
Writes the GML box to the jp2.
virtual void finish()
Finish method.
void setQualityTypeString(const ossimString &s)
virtual ossimString getLongName() const
std::vector< ossimString > m_options
Container for kakadu options to pass to kdu_params::parse_string.
virtual ~ossimKakaduCompressor()
destructor
bool m_alpha
If true write alpha channel.
void getPropertyNames(std::vector< ossimString > &propertyNames) const
Pushes this&#39;s names onto the list of property names.
std::vector< kdu_core::kdu_long > m_layerByteSizes
Layer sizes provided in &#39;flush&#39; calls.
virtual ossimString getClassName() const
ossimRefPtr< ossimImageData > m_normTile
tile to use for normalized float data.
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
saves the state of the object.
void setProgressionOrder(kdu_core::kdu_params *cod, ossim_int32 corder)
Sets progression order.
void setWaveletKernel(kdu_core::kdu_params *cod, ossim_int32 kernel)
Sets the wavelet kernel to use.
void setThreads(ossim_int32 threads)
Sets the number of threads.
#define TYPE_DATA
Definition: ossimRtti.h:339
ossimKakaduCompressor()
default constructor
kdu_supp::jp2_target * m_jp2Target
void getOptions(std::vector< ossimString > &options) const
Get the array of options.
kdu_core::kdu_thread_env * m_threadEnv
unsigned int ossim_uint32
ossim_int32 m_levels
Reduced resolution levels.
void openJp2Codestream()
Calls "open_codestream" on the m_jp2Target.
bool getAlphaChannelFlag() const
Retrieve the writer&#39;s setting for whether or not to add an alpha channel to the output png image...
void printCompressionQualityTypes(std::ostream &out) const
ossimKakaduCompressionQuality getQualityType() const
virtual void setAlphaChannelFlag(bool flag)
Set the writer to add an alpha channel to the output.
virtual void setQualityType(ossimKakaduCompressionQuality type)
Sets the quality type.
ossimIrect m_imageRect
Layer slopes array provided in &#39;flush&#39; calls.
Container class that holds both 2D transform and 3D projection information for an image Only one inst...
ossimScalarType
bool writeGeotiffBox(const ossimImageGeometry *geom, const ossimIrect &rect, const ossimFilename &tmpFile, ossimPixelType pixelType)
Writes the geotiff box to the jp2.
ossimString getQualityTypeString() const
virtual bool setProperty(ossimRefPtr< ossimProperty > property)
Will set the property whose name matches the argument "property->getName()".
virtual bool writeTile(ossimImageData &srcTile)
Write tile method.
ossim_int32 getThreads() const
ossimPixelType
void initializeCodingParams(kdu_core::kdu_params *cod, const ossimIrect &imageRect)
ossimKakaduCompressedTarget * m_target
ossimKakaduCompressionQuality m_qualityType
int m_layerSpecCount
Num specs provided in &#39;flush&#39; calls.
ossimKakaduCompressedTarget JPEG2000 (J2K) kdu_compressed_target that uses an ostream for writing to ...
kdu_supp::jp2_family_tgt * m_jp2FamTgt
kdu_core::kdu_thread_queue * m_threadQueue
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
kdu_core::kdu_codestream m_codestream
void setTlmTileCount(ossim_uint32 tilesToWrite)
void setOptions(const std::vector< ossimString > &options)
Sets the options array.
ossim_int32 m_threads
Number of threads.
void setCodeBlockSize(kdu_core::kdu_params *cod, ossim_int32 xSize, ossim_int32 ySize)
Set code block size.
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
int ossim_int32