svn-gvsig-desktop / tags / extI18n-0.1.0-1045_8 / libraries / libjni-ecw / include / NCSJPCResolution.h @ 40799
History | View | Annotate | Download (10.1 KB)
1 |
/********************************************************
|
---|---|
2 |
** Copyright 2003 Earth Resource Mapping Ltd.
|
3 |
** This document contains proprietary source code of
|
4 |
** Earth Resource Mapping Ltd, and can only be used under
|
5 |
** one of the three licenses as described in the
|
6 |
** license.txt file supplied with this distribution.
|
7 |
** See separate license.txt file for license details
|
8 |
** and conditions.
|
9 |
**
|
10 |
** This software is covered by US patent #6,442,298,
|
11 |
** #6,102,897 and #6,633,688. Rights to use these patents
|
12 |
** is included in the license agreements.
|
13 |
**
|
14 |
** FILE: $Archive: /NCS/Source/include/NCSJPCResolution.h $
|
15 |
** CREATED: 12/02/2003 3:27:34 PM
|
16 |
** AUTHOR: Simon Cope
|
17 |
** PURPOSE: CNCSJPCResolution class header
|
18 |
** EDITS: [xx] ddMmmyy NAME COMMENTS
|
19 |
*******************************************************/
|
20 |
|
21 |
#ifndef NCSJPCRESOLUTION_H
|
22 |
#define NCSJPCRESOLUTION_H
|
23 |
|
24 |
#ifndef NCSJPCPRECINCT_H
|
25 |
#include "NCSJPCPrecinct.h" |
26 |
#endif // NCSJPCPRECINCT_H |
27 |
#ifndef NCSJPCNODE_H
|
28 |
#include "NCSJPCNode.h" |
29 |
#endif // NCSJPCNODE_H |
30 |
#ifndef NCSJPCPLTMARKER_H
|
31 |
#include "NCSJPCPLTMarker.h" |
32 |
#endif // NCSJPCPLTMARKER_H |
33 |
|
34 |
/**
|
35 |
* CNCSJPCResolution class - the JPC Resolution level.
|
36 |
*
|
37 |
* @author Simon Cope
|
38 |
* @version $Revision: 3538 $ $Author: nacho $ $Date: 2006-01-09 12:56:54 +0100 (Mon, 09 Jan 2006) $
|
39 |
*/
|
40 |
class NCSJPC_EXPORT_ALL CNCSJPCResolution: public CNCSJPCNodeTiler { |
41 |
public:
|
42 |
/** Component for this resolution */
|
43 |
class CNCSJPCComponent *m_pComponent; |
44 |
/** Resolution level */
|
45 |
UINT8 m_nResolution; |
46 |
/** Compression target ratio */
|
47 |
UINT16 m_nCompressionRatio; |
48 |
|
49 |
/** Precincts */
|
50 |
CNCSJPCPrecinctMap m_Precincts; |
51 |
//std::vector<CNCSJPCPrecinct*> m_Precincts;
|
52 |
|
53 |
// CNCSJPCIOStreamVector m_EncoderFiles;
|
54 |
//char *m_pEncoderFileName;
|
55 |
UINT32 m_nEncoderPLTStartIndex; |
56 |
// std::vector<UINT32> m_EncoderPLTIndex;
|
57 |
// CNCSJPCIOStreamVector m_EncoderPLTFiles;
|
58 |
//char *m_pEncoderPLTFileName;
|
59 |
|
60 |
/**
|
61 |
* constructor
|
62 |
* @param pComponent Parent component
|
63 |
* @param nResolution Resolution level, 0-32
|
64 |
*/
|
65 |
CNCSJPCResolution(class CNCSJPCComponent *pComponent, UINT8 nResolution); |
66 |
/** Virtual destructor */
|
67 |
virtual ~CNCSJPCResolution(); |
68 |
|
69 |
/**
|
70 |
* Get X0 of this node.
|
71 |
* @return INT32 Coordinate value.
|
72 |
*/
|
73 |
virtual INT32 GetX0(); |
74 |
/**
|
75 |
* Get Y0 of this node.
|
76 |
* @return INT32 Coordinate value.
|
77 |
*/
|
78 |
virtual INT32 GetY0(); |
79 |
/**
|
80 |
* Get X1 of this node.
|
81 |
* @return INT32 Coordinate value.
|
82 |
*/
|
83 |
virtual INT32 GetX1(); |
84 |
/**
|
85 |
* Get Y1 of this node.
|
86 |
* @return INT32 Coordinate value.
|
87 |
*/
|
88 |
virtual INT32 GetY1(); |
89 |
|
90 |
/**
|
91 |
* Get Precinct Width.
|
92 |
* @return UINT32 Un-clipped Width of precincts.
|
93 |
*/
|
94 |
virtual UINT32 GetPrecinctWidth(); |
95 |
/**
|
96 |
* Get Precinct Height.
|
97 |
* @return UINT32 Un-clipped height of precincts.
|
98 |
*/
|
99 |
virtual UINT32 GetPrecinctHeight(); |
100 |
/**
|
101 |
* Get number of precincts wide.
|
102 |
* @return INT32 Nr of precincts across.
|
103 |
*/
|
104 |
virtual UINT32 GetNumPrecinctsWide(); |
105 |
/**
|
106 |
* Get number of precincts high.
|
107 |
* @return UINT32 Nr of precincts high.
|
108 |
*/
|
109 |
virtual UINT32 GetNumPrecinctsHigh(); |
110 |
/**
|
111 |
* Get codeblock Width.
|
112 |
* @return UINT32 Un-clipped Width of codeblocks.
|
113 |
*/
|
114 |
virtual UINT32 GetCBWidth(); |
115 |
/**
|
116 |
* Get codeblock Height.
|
117 |
* @return UINT32 Un-clipped height of codeblocks.
|
118 |
*/
|
119 |
virtual UINT32 GetCBHeight(); |
120 |
|
121 |
/**
|
122 |
* Get CPRL/PCRL/RPCL Progression resolution multiplier.
|
123 |
* @return INT32 Progression resolution multiplier.
|
124 |
*/
|
125 |
virtual INT32 GetResMultiplier(); |
126 |
/**
|
127 |
* Get CPRL/PCRL/RPCL Progression XRsiz multiplier.
|
128 |
* @return INT32 Progression XRsiz multiplier.
|
129 |
*/
|
130 |
virtual INT32 GetXRsizResMultiplier(); |
131 |
/**
|
132 |
* Get CPRL/PCRL/RPCL Progression YRsiz multiplier.
|
133 |
* @return INT32 Progression YRsiz multiplier.
|
134 |
*/
|
135 |
virtual INT32 GetYRsizResMultiplier(); |
136 |
/**
|
137 |
* Get CPRL/PCRL/RPCL Progression DivX factor.
|
138 |
* @return INT32 Progression DixX Factor.
|
139 |
*/
|
140 |
virtual INT32 GetDivX(); |
141 |
/**
|
142 |
* Get CPRL/PCRL/RPCL Progression DivY factor.
|
143 |
* @return INT32 Progression DixY Factor.
|
144 |
*/
|
145 |
virtual INT32 GetDivY(); |
146 |
|
147 |
/**
|
148 |
* Get CPRL/PCRL/RPCL Progression X origin check OK test result.
|
149 |
* @return INT32 Progression DixX Factor.
|
150 |
*/
|
151 |
virtual bool XOriginCheckOk();
|
152 |
/**
|
153 |
* Get CPRL/PCRL/RPCL Progression Y origin check OK test result.
|
154 |
* @return INT32 Progression DixY Factor.
|
155 |
*/
|
156 |
virtual bool YOriginCheckOk();
|
157 |
/**
|
158 |
* Read a BufferType line from the input.
|
159 |
* @param nCtx Read context
|
160 |
* @param pDst Destination buffer.
|
161 |
* @param iComponent Output Component
|
162 |
* @return bool true on succes, else false.
|
163 |
*/
|
164 |
/**
|
165 |
* Get X0 of top left precinct for this resolution.
|
166 |
* @return INT32 Coordinate value.
|
167 |
*/
|
168 |
virtual INT32 GetPX0(); |
169 |
/**
|
170 |
* Get Y0 of top left precinct for this resolution.
|
171 |
* @return INT32 Coordinate value.
|
172 |
*/
|
173 |
virtual INT32 GetPY0(); |
174 |
|
175 |
virtual bool ReadLine(ContextID nCtx, CNCSJPCBuffer *pDst, UINT16 iComponent);
|
176 |
/**
|
177 |
* Write a BufferType line to the output.
|
178 |
* @param nCtx Context
|
179 |
* @param pSrc Source buffer.
|
180 |
* @param iComponent Output Component
|
181 |
* @return bool true on succes, else false.
|
182 |
*/
|
183 |
virtual bool WriteLine(ContextID nCtx, CNCSJPCBuffer *pSrc, UINT16 iComponent);
|
184 |
|
185 |
/**
|
186 |
* UnLink input nodes.
|
187 |
* @param nCtx Read context
|
188 |
* @return bool true on success, else false on error.
|
189 |
*/
|
190 |
virtual bool UnLink(ContextID nCtx, UINT16 nInputs = 0); |
191 |
|
192 |
virtual bool WritePrecinctLayerPLT(CNCSJPC &JPC, CNCSJPCIOStream &Stream, CNCSJPCTilePartHeader &TilePart, CNCSJPCPLTMarker &PLT, CNCSJPCPacketLengthType &Len, INT64 &nSOTOffset, UINT32 &nBytes, UINT32 p, UINT32 l);
|
193 |
virtual bool WriteLayerPLTs(CNCSJPC &JPC, CNCSJPCIOStream &Stream, CNCSJPCTilePartHeader &TilePart, CNCSJPCPLTMarker &PLT, CNCSJPCPacketLengthType &Len, INT64 &nSOTOffset, UINT32 &nBytes, UINT32 l);
|
194 |
virtual bool WritePrecinctLayerPacket(CNCSJPC &JPC, CNCSJPCIOStream &Stream, UINT32 p, UINT32 l);
|
195 |
virtual bool WriteLayerPackets(CNCSJPC &JPC, CNCSJPCIOStream &Stream, UINT32 l);
|
196 |
|
197 |
protected:
|
198 |
static CNCSJPCNodeTracker sm_Tracker;
|
199 |
|
200 |
CNCSJPCBuffer m_EncoderLL; |
201 |
CNCSJPCBuffer m_EncoderLH; |
202 |
CNCSJPCBuffer m_EncoderHL; |
203 |
CNCSJPCBuffer m_EncoderHH; |
204 |
|
205 |
class NCSJPC_EXPORT_ALL Context: public CNCSJPCNode::Context { |
206 |
public:
|
207 |
/** 2-line Output Buffer */
|
208 |
CNCSJPCBuffer m_OutputBuffer; |
209 |
|
210 |
CNCSJPCBufferCache m_State; |
211 |
INT32 m_nStateU0; |
212 |
INT32 m_nStateU1; |
213 |
INT32 m_nStateV; |
214 |
|
215 |
Context(); |
216 |
virtual ~Context(); |
217 |
}; |
218 |
|
219 |
/**
|
220 |
* Get the context for the given ContextID
|
221 |
* @param nCtx ContextID to retrive context
|
222 |
* @param bAutoConstruct Autoconstruct a new context for this ContextID if one doesn't exist
|
223 |
* @return Context* Context for given ID.
|
224 |
*/
|
225 |
virtual CNCSJPCNode::Context *GetContext(ContextID nCtx, bool bAutoConstruct = true); |
226 |
|
227 |
/**
|
228 |
* Read a BufferType line from the given subband.
|
229 |
* @param nCtx Read Context
|
230 |
* @param nX X coordinate of node within it's resolution rect.
|
231 |
* @param nY Y coordinate of node within it's resolution rect.
|
232 |
* @param nWidth Number of pixels to read.
|
233 |
* @param eType Buffer type
|
234 |
* @param pBuffer Pointer to destination buffer.
|
235 |
* @param eSubBandType SubBand index enum.
|
236 |
* @return bool true on succes, else false.
|
237 |
*/
|
238 |
bool ReadSubBandLine(ContextID nCtx, CNCSJPCBuffer *pDst, NCSJPCSubBandType eSubBandType);
|
239 |
/**
|
240 |
* Write a BufferType line to the given subband.
|
241 |
* @param nCtx Context
|
242 |
* @param pSrc Source buffer.
|
243 |
* @param eSubBandType SubBand index enum.
|
244 |
* @return bool true on succes, else false.
|
245 |
*/
|
246 |
bool WriteSubBandLine(ContextID nCtx, CNCSJPCBuffer *pSrc, NCSJPCSubBandType eSubBandType);
|
247 |
/**
|
248 |
* Get normal Node Width.
|
249 |
* @return INT32 Un-clipped Width of codeblocks.
|
250 |
*/
|
251 |
virtual UINT32 GetNodeWidth(UINT16 iComponent = 0) { return(GetPrecinctWidth()); }; |
252 |
/**
|
253 |
* Get normal Node Height.
|
254 |
* @return INT32 Un-clipped height of codeblocks.
|
255 |
*/
|
256 |
virtual UINT32 GetNodeHeight(UINT16 iComponent = 0) { return(GetPrecinctHeight()); }; |
257 |
/**
|
258 |
* Get number of nodes wide.
|
259 |
* @return INT32 Nr of codeblocks across.
|
260 |
*/
|
261 |
virtual UINT32 GetNumNodesWide(UINT16 iComponent = 0) { return(GetNumPrecinctsWide()); }; |
262 |
/**
|
263 |
* Get number of nodes high.
|
264 |
* @return INT32 Nr of codeblocks high.
|
265 |
*/
|
266 |
virtual UINT32 GetNumNodesHigh(UINT16 iComponent = 0) { return(GetNumPrecinctsHigh()); }; |
267 |
/**
|
268 |
* Get pointer to specific node.
|
269 |
* @param UINT32 Node nr
|
270 |
* @return CNCSJPCNode * Ptr to node.
|
271 |
*/
|
272 |
virtual __inline CNCSJPCNode *GetNodePtr(UINT32 nNode, UINT16 iComponent = 0) {
|
273 |
return(m_Precincts.find(nNode));
|
274 |
} |
275 |
virtual bool INTERLEAVE_2D(ContextID nCtx,
|
276 |
INT32 u0, |
277 |
INT32 u1, |
278 |
INT32 v0, |
279 |
INT32 v1, |
280 |
CNCSJPCBuffer &a); |
281 |
virtual bool SR_2D(ContextID nCtx,
|
282 |
INT32 u0, |
283 |
INT32 u1, |
284 |
INT32 v0, |
285 |
INT32 v1, |
286 |
CNCSJPCBuffer &Dst); |
287 |
virtual bool HOR_SR(ContextID nCtx,
|
288 |
CNCSJPCBuffer &a, |
289 |
INT32 u0, |
290 |
INT32 u1, |
291 |
INT32 v0, |
292 |
INT32 v1); |
293 |
virtual CNCSJPCBuffer *GET_STATE_BUFFER(ContextID nCtx, |
294 |
INT32 u0, |
295 |
INT32 u1, |
296 |
INT32 v, |
297 |
CNCSJPCBuffer::Type eType); |
298 |
virtual bool VER_SR_INPUT2(ContextID nCtx,
|
299 |
INT32 u0, |
300 |
INT32 u1, |
301 |
CNCSJPCBuffer *pDst, |
302 |
CNCSJPCBuffer::Type eType); |
303 |
virtual bool VER_SR(ContextID nCtx,
|
304 |
INT32 u0, |
305 |
INT32 u1, |
306 |
INT32 v0, |
307 |
INT32 v1, |
308 |
CNCSJPCBuffer &Dst); |
309 |
|
310 |
virtual bool SD_2D_OUTPUT4(ContextID nCtx,
|
311 |
INT32 u0, |
312 |
INT32 u1, |
313 |
INT32 v, |
314 |
CNCSJPCBuffer::Type eType); |
315 |
virtual bool SD_2D(ContextID nCtx,
|
316 |
CNCSJPCBuffer *pSrc); |
317 |
private:
|
318 |
TNCSCachedValue<UINT32> m_CBWidth; |
319 |
TNCSCachedValue<UINT32> m_CBHeight; |
320 |
TNCSCachedValue<UINT32> m_PrecinctWidth; |
321 |
TNCSCachedValue<UINT32> m_PrecinctHeight; |
322 |
TNCSCachedValue<INT32> m_NumPrecinctsWide; |
323 |
TNCSCachedValue<INT32> m_NumPrecinctsHigh; |
324 |
|
325 |
TNCSCachedValue<INT32> m_ResMultiplier; |
326 |
TNCSCachedValue<INT32> m_XRsizResMultiplier; |
327 |
TNCSCachedValue<INT32> m_YRsizResMultiplier; |
328 |
TNCSCachedValue<INT32> m_DivX; |
329 |
TNCSCachedValue<INT32> m_DivY; |
330 |
|
331 |
TNCSCachedValue<bool> m_XOriginCheckOk;
|
332 |
TNCSCachedValue<bool> m_YOriginCheckOk;
|
333 |
TNCSCachedValue<INT32> m_PX0; |
334 |
TNCSCachedValue<INT32> m_PY0; |
335 |
}; |
336 |
|
337 |
#endif // !NCSJPCRESOLUTION_H |