00001
00043 #ifndef INC_SPATMOD_IMAGETARGETJ2K_H
00044 #define INC_SPATMOD_IMAGETARGETJ2K_H
00045
00046 #ifndef INC_SPATMOD_IMAGETARGETFILE_H
00047 #include <spatmod/imagetargetfile.h>
00048 #endif
00049
00050 class JP2_TARGET;
00051
00052 namespace SPATMOD {
00053 namespace IMAGE {
00054
00055
00056
00057 class TARGETPARM_J2K {
00058 public:
00059
00061 enum GEOMETHOD {
00062 GEOMETHOD_None = 0x00,
00063 GEOMETHOD_GML = 0x01,
00064 GEOMETHOD_GeoTIFF = 0x02,
00065 GEOMETHOD_Automatic = 0x00,
00066 GEOMETHOD_Affine = 0x10,
00067 };
00068
00070
00071 enum PROGORDER {
00072 PROGORDER_LRCP = 0,
00073 PROGORDER_RLCP = 1,
00074 PROGORDER_RPCL = 2,
00075 PROGORDER_PCRL = 3,
00076 PROGORDER_CPRL = 4,
00077 PROGORDER_Auto = 99
00078 };
00079
00081 TARGETPARM_J2K ();
00082
00085 void SetGeoMethod (
00086 GEOMETHOD GeoMethod
00087 ) { m_GeoMethod = GeoMethod; }
00088
00092 void SetIncludePacketLengthMarkers (
00093 bool IncludePLT = true
00094 ) { m_IncludePLT = IncludePLT; }
00095
00103 void SetIncludeTilePartHeaders (
00104 bool IncludeTPH = true
00105 ) { m_IncludeTPH = IncludeTPH; }
00106
00109 void SetNumDetailLayers (
00110 int NumDetailLayers
00111 ) { m_NumDetailLayers = NumDetailLayers; }
00112
00116 void SetNumResolutionLevels (
00117 int numlevels
00118 ) { m_NumResLevels = numlevels; }
00119
00122 void SetPrecinctUsage (
00123 bool UsePrecincts
00124 ) { m_UsePrecincts = UsePrecincts; }
00125
00128 void SetPrecinctSizes (
00129 const SIMPLE_ARRAY<LPOINT2D>& PrecinctSizes
00130 ) { m_PrecinctSizes = PrecinctSizes; }
00131
00134 void SetProgressionOrder (
00135 PROGORDER ProgOrder
00136 ) { m_ProgOrder = ProgOrder; }
00137
00140 void SetReversible (
00141 bool reversible = true
00142 ) { m_Reversible = reversible; }
00143
00145 void SetTargetQuality (
00146 double TargetQuality
00147 ) { m_TargetQuality = TargetQuality; m_TargetRatio = 0; m_TargetSizeBytes = 0; }
00148
00150 void SetTargetRatio (
00151 UINT16 TargetRatio
00152 ) { m_TargetRatio = TargetRatio; m_TargetQuality = 0; m_TargetSizeBytes = 0; }
00153
00155 void SetTargetSize (
00156 INT64 TargetSizeBytes
00157 ) { m_TargetSizeBytes = TargetSizeBytes; m_TargetQuality = 0; m_TargetRatio = 0; }
00158
00159 private:
00160 #ifndef GENERATING_DOXYGEN_OUTPUT
00161 SIMPLE_ARRAY<LPOINT2D> m_PrecinctSizes;
00162 double m_TargetQuality;
00163 INT64 m_TargetSizeBytes;
00164 UINT16 m_TargetRatio;
00165 int m_NumDetailLayers;
00166 int m_NumResLevels;
00167 PROGORDER m_ProgOrder;
00168 GEOMETHOD m_GeoMethod;
00169 bool m_IncludePLT;
00170 bool m_IncludeTPH;
00171 bool m_UsePrecincts;
00172 bool m_Reversible;
00173 friend class TARGET_J2K;
00174 #endif
00175 };
00176
00177 #ifndef GENERATING_DOXYGEN_OUTPUT
00178 DEFINE_ENUM_OP_BITWISE(TARGETPARM_J2K::GEOMETHOD)
00179 #endif // GENERATING_DOXYGEN_OUTPUT
00180
00181
00182
00186 class TARGET_J2K : public TARGET_FILE {
00187 public:
00188
00190 class FACTORY : public FACTORY_TARGET_FILE {
00191 public:
00192
00194 explicit FACTORY (
00195 const TARGETPARM_J2K& settings
00196 );
00197
00199 FACTORY (const FACTORY& rhs);
00200
00202 virtual ~FACTORY ();
00203
00204 private:
00205 #ifndef GENERATING_DOXYGEN_OUTPUT
00206 TARGETPARM_J2K m_Settings;
00207
00208
00209 virtual FACTORY_TARGET_FILE * v_Clone () const;
00210 virtual TARGET_FILE * v_ConstructTarget (STAGE *pInputStage, const FILEPATH& filepath, GEOFORMATS GeoFormats) const;
00211
00212
00213 FACTORY& operator= (const FACTORY& rhs);
00214 #endif
00215 };
00216
00218 TARGET_J2K (
00219 STAGE *pInputStage,
00220 const FILEPATH& filepath,
00221 const TARGETPARM_J2K& settings,
00222 GEOFORMATS GeoFormats = GEOFORMAT_None
00223 );
00224
00226 virtual ~TARGET_J2K ();
00227
00229 void SetMaxMemUsage (
00230 int MaxMemUsageMB
00231 ) { m_MaxMemUsageMB = MaxMemUsageMB; }
00232
00233 private:
00234 #ifndef GENERATING_DOXYGEN_OUTPUT
00235 TARGETPARM_J2K m_Settings;
00236 int m_MaxMemUsageMB;
00237 JP2_TARGET *m_pFile;
00238
00239 ERRVALUE Close ();
00240 ERRVALUE MakeFile (const FILEPATH& filepath, const LRECT2D& extent);
00241
00242
00243 virtual ERRVALUE v_FillTileRows ( INT32 NumColumns, INT32 NumRows);
00244 virtual ERRVALUE v_Initialize ();
00245 virtual ERRVALUE v_PushBegin (const SECTION_ITERATOR& iterator);
00246 virtual ERRVALUE v_PushEnd ();
00247 virtual ERRVALUE v_TileBegin (const FILEPATH& FilePath, const LRECT2D& Extents);
00248 virtual ERRVALUE v_TileEnd ();
00249 virtual ERRVALUE v_WriteSubSection (const SECTION& SubSection, const BUFFER& buffer);
00250
00251
00252 TARGET_J2K (const TARGET_J2K&);
00253 TARGET_J2K& operator= (const TARGET_J2K&);
00254 #endif // GENERATING_DOXYGEN_OUTPUT
00255
00256 };
00257
00258
00259
00260 }
00261 }
00262
00263 #endif // INC_SPATMOD_IMAGETARGETJ2K_H
00264