00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013 #ifndef __MRSID_IMAGE_STAGE_MANAGER_H__
00014 #define __MRSID_IMAGE_STAGE_MANAGER_H__
00015
00016
00017 #include "lti_imageStageManager.h"
00018 #include "MrSIDImageReaderBase.h"
00019
00020 LT_BEGIN_NAMESPACE(LizardTech)
00021
00022 class MG3Container;
00023 class MG3SingleImageReader;
00024 class MG4SingleImageReader;
00025 class MG2ImageReader;
00026
00027 class MrSIDImageStageManager : public LTIImageStageManager
00028 {
00029 LTI_REFERENCE_COUNTED_BOILERPLATE(MrSIDImageStageManager);
00030 public:
00038 LT_STATUS initialize(const LTFileSpec &fileSpec,
00039 MrSIDMemoryUsage memoryUsage = MRSID_MEMORY_USAGE_DEFAULT,
00040 MrSIDStreamUsage streamUsage = MRSID_STREAM_USAGE_DEFAULT);
00041
00049 LT_STATUS initialize(LTIOStreamInf *stream,
00050 MrSIDMemoryUsage memoryUsage = MRSID_MEMORY_USAGE_DEFAULT,
00051 MrSIDStreamUsage streamUsage = MRSID_STREAM_USAGE_DEFAULT);
00052
00053
00054 LT_STATUS createImageStage(lt_uint32 imageNumber,
00055 LTIImageStage *&imageStage);
00056 LT_STATUS createOverviewImageStage(LTIImageStage *&imageStage);
00057
00058 LT_STATUS createImageStage(lt_uint32 imageNumber,
00059 MrSIDSingleImageReaderBase *&imageStage);
00060 LT_STATUS createOverviewImageStage(MrSIDSingleImageReaderBase *&imageStage);
00061
00062 LT_STATUS getMrSIDVersion(lt_uint8& major, lt_uint8& minor,
00063 lt_uint8& tweak, char& letter) const;
00064
00065
00066 MrSIDMemoryUsage getMemoryUsage(void) const;
00067
00068 MrSIDStreamUsage getStreamUsage(void) const;
00069
00070
00071 bool hasMG2Tiles(void) const;
00072
00073 bool hasMG3Tiles(void) const;
00074
00075 bool hasMG4Tiles(void) const;
00076
00077 bool isOptimizable(void) const;
00078
00079 bool hasOverviewImage(void) const;
00080
00081
00085 enum CompositeImageType
00086 {
00087 COMPOSITETYPE_MG2 = 1,
00088 COMPOSITETYPE_MG3 = 2,
00089 COMPOSITETYPE_MG4 = 3,
00090 };
00091
00092
00093 struct TileInfo
00094 {
00095
00096 lt_uint32 id;
00097 CompositeImageType type;
00098
00099 lt_uint8 numLevels;
00100 bool isLocked;
00101 bool isOptimizable;
00102
00103 lt_uint32 subblockSize;
00104
00105 };
00106
00107
00108 const TileInfo *getTileInfo(lt_uint32 index) const;
00109
00110 const TileInfo *getOverviewInfo() const;
00111
00112 lt_uint32 findTileId(lt_uint32 id) const;
00113
00114
00115 const MG3Container *getContainer(void) const;
00116
00117
00118 void treatMG3asMG4(void);
00119 protected:
00120 LT_STATUS init(lt_uint32 numImages,
00121 MrSIDMemoryUsage memoryUsage,
00122 MrSIDStreamUsage streamUsage);
00123
00124 virtual LT_STATUS updateMemoryModel();
00125 virtual LT_STATUS createMG2Reader(lt_uint32 imageNumber,
00126 MG2ImageReader *&mg2Reader);
00127 virtual LT_STATUS createMG3Reader(lt_uint32 imageNumber,
00128 MG3SingleImageReader *&mg3Reader);
00129 virtual LT_STATUS createMG4Reader(lt_uint32 imageNumber,
00130 MG4SingleImageReader *&mg4Reader);
00131
00132 LTIOStreamInf *m_stream;
00133 bool m_ownStream;
00134
00135 MrSIDMemoryUsage m_memoryUsage;
00136 MrSIDStreamUsage m_streamUsage;
00137 lt_uint8 m_major;
00138 lt_uint8 m_minor;
00139 lt_uint8 m_tweak;
00140 char m_letter;
00141 MG3Container *m_container;
00142 TileInfo *m_tileInfo;
00143 TileInfo *m_overviewInfo;
00144 bool m_hasMG2Tiles;
00145 bool m_hasMG3Tiles;
00146 bool m_hasMG4Tiles;
00147 };
00148
00149
00150 LT_END_NAMESPACE(LizardTech)
00151
00152
00153 #endif // __MRSID_IMAGE_STAGE_MANAGER_H__