svn-gvsig-desktop / tags / v2_0_0_prep_before_2001 / libraries / libjni-mrsid-macosx / include / base / lti_imageWriter.h @ 44480
History | View | Annotate | Download (8.13 KB)
1 | 9099 | mija | /* $Id$ */
|
---|---|---|---|
2 | /* //////////////////////////////////////////////////////////////////////////
|
||
3 | // //
|
||
4 | // This code is Copyright (c) 2004 LizardTech, Inc, 1008 Western Avenue, //
|
||
5 | // Suite 200, Seattle, WA 98104. Unauthorized use or distribution //
|
||
6 | // prohibited. Access to and use of this code is permitted only under //
|
||
7 | // license from LizardTech, Inc. Portions of the code are protected by //
|
||
8 | // US and foreign patents and other filings. All Rights Reserved. //
|
||
9 | // //
|
||
10 | ////////////////////////////////////////////////////////////////////////// */
|
||
11 | /* PUBLIC */
|
||
12 | |||
13 | #ifndef LTI_IMAGEWRITER_H
|
||
14 | #define LTI_IMAGEWRITER_H
|
||
15 | |||
16 | // lt_lib_base
|
||
17 | #include "lt_base.h" |
||
18 | |||
19 | // lt_lib_mrsid_core
|
||
20 | #include "lti_imageFilter.h" |
||
21 | |||
22 | LT_BEGIN_NAMESPACE(LizardTech) |
||
23 | |||
24 | #if defined(LT_COMPILER_MS)
|
||
25 | #pragma warning(push,4) |
||
26 | #endif
|
||
27 | |||
28 | class LTIReusableBSQBuffer; |
||
29 | class LTIProgressDelegate; |
||
30 | class LTIInterruptDelegate; |
||
31 | |||
32 | |||
33 | /**
|
||
34 | * abstract class for implementing an image writer
|
||
35 | *
|
||
36 | * The LTIImageWriter abstract class is used to output pixels from an image
|
||
37 | * pipeline to an actual image format. The classes MG3ImageWriter,
|
||
38 | * TIFFImageWriter, etc, derive from this class.
|
||
39 | */
|
||
40 | class LTIImageWriter |
||
41 | { |
||
42 | public:
|
||
43 | /**
|
||
44 | * constructor
|
||
45 | *
|
||
46 | * This constructor creates an abstract image writer for the given
|
||
47 | * image stage.
|
||
48 | *
|
||
49 | * Note that the pointer to the input image stage may not be NULL.
|
||
50 | * The writer does not take ownership of the image stage.
|
||
51 | *
|
||
52 | * @param image the source of image data to be written
|
||
53 | */
|
||
54 | LTIImageWriter(LTIImageStage* image); |
||
55 | |||
56 | /**
|
||
57 | * destructor
|
||
58 | */
|
||
59 | virtual ~LTIImageWriter(); |
||
60 | |||
61 | /**
|
||
62 | * initialization function
|
||
63 | */
|
||
64 | virtual LT_STATUS initialize(); |
||
65 | |||
66 | /**
|
||
67 | * write (encode) a scene to the output format
|
||
68 | *
|
||
69 | * This function writes the given scene to the implemented image format.
|
||
70 | *
|
||
71 | * The write() function just calls writeBegin() for the given scene(),
|
||
72 | * then calls writeStrip() repeatedly for each strip in the scene(), then
|
||
73 | * calls writeEnd().
|
||
74 | *
|
||
75 | * A derived classes should not override this function, unless it has
|
||
76 | * special requirements for interacting with the rest of the image
|
||
77 | * pipeline.
|
||
78 | *
|
||
79 | * @param scene the scene to decode and output
|
||
80 | * @return status code indicating success or failure
|
||
81 | */
|
||
82 | virtual LT_STATUS write(const LTIScene& scene);
|
||
83 | |||
84 | /**
|
||
85 | * begin an encode (write) operation
|
||
86 | *
|
||
87 | * This function implements the logic for beginning the encoding of the
|
||
88 | * given scene.
|
||
89 | *
|
||
90 | * The scene must be a valid scene for the underlying image pipeline.
|
||
91 | *
|
||
92 | * This function is called by write(). Derived classes must implement
|
||
93 | * this function.
|
||
94 | *
|
||
95 | * @param scene the scene to decode and output
|
||
96 | * @return status code indicating success or failure
|
||
97 | */
|
||
98 | virtual LT_STATUS writeBegin(const LTIScene& scene) =0; |
||
99 | |||
100 | /**
|
||
101 | * encode one strip of the scene
|
||
102 | *
|
||
103 | * This function implements the logic for actually encoding a given strip
|
||
104 | * of the given scene.
|
||
105 | *
|
||
106 | * This function is called by write(). Derived classes must implement
|
||
107 | * this function.
|
||
108 | *
|
||
109 | * @param stripBuffer the pixels for the current strip
|
||
110 | * @param stripScene the scene representing the strip being written
|
||
111 | * @return status code indicating success or failure
|
||
112 | */
|
||
113 | virtual LT_STATUS writeStrip(LTISceneBuffer& stripBuffer, |
||
114 | const LTIScene& stripScene) =0; |
||
115 | |||
116 | /**
|
||
117 | * complete an encode (write) operation
|
||
118 | *
|
||
119 | * This function implements the logic for completing the encoding of the
|
||
120 | * given scene.
|
||
121 | *
|
||
122 | * This function is called by write(). Derived classes must implement
|
||
123 | * this function.
|
||
124 | *
|
||
125 | * @return status code indicating success or failure
|
||
126 | */
|
||
127 | virtual LT_STATUS writeEnd() =0;
|
||
128 | |||
129 | /**
|
||
130 | * set the stripheight for the encode
|
||
131 | *
|
||
132 | * This function sets the stripheight to be used when encoding a scene,
|
||
133 | * i.e. the number of rows to process at one time. This value is used
|
||
134 | * to control the decode requests from the image pipeline.
|
||
135 | *
|
||
136 | * @param stripHeight the number of rows to encode at one time
|
||
137 | * @return status code indicating success or failure
|
||
138 | */
|
||
139 | virtual LT_STATUS setStripHeight(lt_uint32 stripHeight); |
||
140 | |||
141 | /**
|
||
142 | * get the stripheight for the encode
|
||
143 | *
|
||
144 | * Returns the number of rows which will be encoded at a time.
|
||
145 | *
|
||
146 | * @return the stripheight setting of the encoder
|
||
147 | */
|
||
148 | virtual lt_uint32 getStripHeight() const;
|
||
149 | |||
150 | /**
|
||
151 | * get the preferred stripheight for the encode
|
||
152 | *
|
||
153 | * Returns the preferred stripheight for the encoder. By default, this is
|
||
154 | * just the stripheight of the underlying image pipeline. A derived class
|
||
155 | * may override this to reflect specific needs of an encoder
|
||
156 | * implementation, however.
|
||
157 | *
|
||
158 | * @return the preferred stripheight setting of the encoder
|
||
159 | */
|
||
160 | virtual lt_uint32 getDefaultStripHeight() const;
|
||
161 | |||
162 | /**
|
||
163 | * get the cost to encode the scene
|
||
164 | *
|
||
165 | * Returns the cost to encode this scene, for application using the usage
|
||
166 | * metering system. See LTIImageStage::getEncodingCost() for details.
|
||
167 | *
|
||
168 | * @param scene the scene to determine the cost for
|
||
169 | * @return the cost for the scene
|
||
170 | */
|
||
171 | virtual lt_int64 getEncodingCost(const LTIScene& scene) const; |
||
172 | |||
173 | /**
|
||
174 | * set progress delegate
|
||
175 | *
|
||
176 | * This function sets the progress delegate, which is used in a callback-like
|
||
177 | * fashion to report percent-complete of a write() operation back to the
|
||
178 | * calling application.
|
||
179 | *
|
||
180 | * Passing NULL to this function should remove the LTIImageWriter's current delegate,
|
||
181 | * if any.
|
||
182 | *
|
||
183 | * Note this function does not take ownership of the delegate object.
|
||
184 | *
|
||
185 | * @param delegate a pointer to the delegate object to be used by the image writer
|
||
186 | */
|
||
187 | virtual void setProgressDelegate(LTIProgressDelegate* delegate);
|
||
188 | |||
189 | /**
|
||
190 | * set interrupt delegate
|
||
191 | *
|
||
192 | * This function sets the interrupt delegate, which is used in a callback-like
|
||
193 | * fashion by the calling application to asynchronously indicate that a write()
|
||
194 | * operation should be halted without completing.
|
||
195 | *
|
||
196 | * Passing NULL to this function should remove the LTIImageWriter's current delegate,
|
||
197 | * if any.
|
||
198 | *
|
||
199 | * Note this function does not take ownership of the delegate object.
|
||
200 | *
|
||
201 | * @param delegate a pointer to the delegate object to be used by the image writer
|
||
202 | */
|
||
203 | virtual void setInterruptDelegate(LTIInterruptDelegate* delegate);
|
||
204 | |||
205 | protected:
|
||
206 | /**
|
||
207 | * get progress delegate
|
||
208 | *
|
||
209 | * This function returns the object's progress delegate.
|
||
210 | *
|
||
211 | * The function will return NULL if no delegate has been set.
|
||
212 | *
|
||
213 | * Derived classes should call this method from within their write()
|
||
214 | * methods so that they can inform the user of the progress of the write
|
||
215 | * operation.
|
||
216 | *
|
||
217 | * @return a pointer to the delegate object (or NULL if no delegate has been set)
|
||
218 | */
|
||
219 | virtual LTIProgressDelegate* getProgressDelegate() const;
|
||
220 | |||
221 | /**
|
||
222 | * get interrupt delegate
|
||
223 | *
|
||
224 | * This function returns the object's interrupt delegate.
|
||
225 | *
|
||
226 | * The function will return NULL if no delegate has been set.
|
||
227 | *
|
||
228 | * Derived classes should call this method from within their write()
|
||
229 | * methods so that they can determine if the user has requested that the write
|
||
230 | * operation should be aborted.
|
||
231 | *
|
||
232 | * @return a pointer to the delegate object (or NULL if no delegate has been set)
|
||
233 | */
|
||
234 | virtual LTIInterruptDelegate* getInterruptDelegate() const;
|
||
235 | |||
236 | LTIImageStage* m_image; |
||
237 | |||
238 | private:
|
||
239 | LT_STATUS checkDelegates(const LTIScene& fullScene,
|
||
240 | const LTIScene* currScene,
|
||
241 | bool atEnd);
|
||
242 | |||
243 | lt_uint32 m_stripHeight; |
||
244 | LTIReusableBSQBuffer* m_buffer; |
||
245 | |||
246 | LTIProgressDelegate* m_progressDelegate; |
||
247 | LTIInterruptDelegate* m_interruptDelegate; |
||
248 | |||
249 | // nope
|
||
250 | LTIImageWriter(); |
||
251 | LTIImageWriter(LTIImageWriter&); |
||
252 | LTIImageWriter& operator=(const LTIImageWriter&);
|
||
253 | }; |
||
254 | |||
255 | |||
256 | LT_END_NAMESPACE(LizardTech) |
||
257 | |||
258 | #if defined(LT_COMPILER_MS)
|
||
259 | #pragma warning(pop)
|
||
260 | #endif
|
||
261 | |||
262 | #endif // LTI_IMAGEWRITER_H |