Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: include/codec/SkCodec.h

Issue 1230033004: Allow creating multiple scanline decoders. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Progressive scanline decoder needs to handle rewind on first call. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dm/DMSrcSink.cpp ('k') | include/codec/SkScanlineDecoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkCodec_DEFINED 8 #ifndef SkCodec_DEFINED
9 #define SkCodec_DEFINED 9 #define SkCodec_DEFINED
10 10
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, con st Options*, 165 Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, con st Options*,
166 SkPMColor ctable[], int* ctableCount); 166 SkPMColor ctable[], int* ctableCount);
167 167
168 /** 168 /**
169 * Simplified version of getPixels() that asserts that info is NOT kIndex8_ SkColorType and 169 * Simplified version of getPixels() that asserts that info is NOT kIndex8_ SkColorType and
170 * uses the default Options. 170 * uses the default Options.
171 */ 171 */
172 Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes); 172 Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes);
173 173
174 /** 174 /**
175 * Return an object which can be used to decode individual scanlines. 175 * Create a new object which can be used to decode individual scanlines.
176 * 176 *
177 * This object is owned by the SkCodec, which will handle its lifetime. The 177 * The returned object has its own state, independent of the SkCodec, or an y
178 * returned object is only valid until the SkCodec is deleted or the next 178 * previously spawned SkScanlineDecoders. At creation, it will be ready to
179 * call to getScanlineDecoder, whichever comes first. 179 * return the first scanline.
180 *
181 * Calling a second time will rewind and replace the existing one with a
182 * new one. If the stream cannot be rewound, this will delete the existing
183 * one and return NULL.
184 * 180 *
185 * @param dstInfo Info of the destination. If the dimensions do not match 181 * @param dstInfo Info of the destination. If the dimensions do not match
186 * those of getInfo, this implies a scale. 182 * those of getInfo, this implies a scale.
187 * @param options Contains decoding options, including if memory is zero 183 * @param options Contains decoding options, including if memory is zero
188 * initialized. 184 * initialized.
189 * @param ctable A pointer to a color table. When dstInfo.colorType() is 185 * @param ctable A pointer to a color table. When dstInfo.colorType() is
190 * kIndex8, this should be non-NULL and have enough storage for 256 186 * kIndex8, this should be non-NULL and have enough storage for 256
191 * colors. The color table will be populated after decoding the palett e. 187 * colors. The color table will be populated after decoding the palett e.
192 * @param ctableCount A pointer to the size of the color table. When 188 * @param ctableCount A pointer to the size of the color table. When
193 * dstInfo.colorType() is kIndex8, this should be non-NULL. It will 189 * dstInfo.colorType() is kIndex8, this should be non-NULL. It will
194 * be modified to the true size of the color table (<= 256) after 190 * be modified to the true size of the color table (<= 256) after
195 * decoding the palette. 191 * decoding the palette.
196 * @return New SkScanlineDecoder, or NULL on failure. 192 * @return New SkScanlineDecoder, or NULL on failure.
197 * 193 *
198 * NOTE: If any rows were previously decoded, this requires rewinding the 194 * NOTE: This requires duplicating the SkStream.
199 * SkStream.
200 *
201 * NOTE: The scanline decoder is owned by the SkCodec and will delete it
202 * when the SkCodec is deleted.
203 */ 195 */
204 SkScanlineDecoder* getScanlineDecoder(const SkImageInfo& dstInfo, const Opti ons* options, 196 SkScanlineDecoder* getScanlineDecoder(const SkImageInfo& dstInfo, const Opti ons* options,
205 SkPMColor ctable[], int* ctableCount); 197 SkPMColor ctable[], int* ctableCount);
206 198
207 /** 199 /**
208 * Simplified version of getScanlineDecoder() that asserts that info is NOT 200 * Simplified version of getScanlineDecoder() that asserts that info is NOT
209 * kIndex8_SkColorType and uses the default Options. 201 * kIndex8_SkColorType and uses the default Options.
210 */ 202 */
211 SkScanlineDecoder* getScanlineDecoder(const SkImageInfo& dstInfo); 203 SkScanlineDecoder* getScanlineDecoder(const SkImageInfo& dstInfo);
212 204
(...skipping 19 matching lines...) Expand all
232 224
233 virtual SkEncodedFormat onGetEncodedFormat() const = 0; 225 virtual SkEncodedFormat onGetEncodedFormat() const = 0;
234 226
235 virtual Result onGetPixels(const SkImageInfo& info, 227 virtual Result onGetPixels(const SkImageInfo& info,
236 void* pixels, size_t rowBytes, const Options&, 228 void* pixels, size_t rowBytes, const Options&,
237 SkPMColor ctable[], int* ctableCount) = 0; 229 SkPMColor ctable[], int* ctableCount) = 0;
238 230
239 /** 231 /**
240 * Override if your codec supports scanline decoding. 232 * Override if your codec supports scanline decoding.
241 * 233 *
242 * As in onGetPixels(), the implementation must call rewindIfNeeded() and
243 * handle as appropriate.
244 *
245 * @param dstInfo Info of the destination. If the dimensions do not match 234 * @param dstInfo Info of the destination. If the dimensions do not match
246 * those of getInfo, this implies a scale. 235 * those of getInfo, this implies a scale.
247 * @param options Contains decoding options, including if memory is zero 236 * @param options Contains decoding options, including if memory is zero
248 * initialized. 237 * initialized.
249 * @param ctable A pointer to a color table. When dstInfo.colorType() is 238 * @param ctable A pointer to a color table. When dstInfo.colorType() is
250 * kIndex8, this should be non-NULL and have enough storage for 256 239 * kIndex8, this should be non-NULL and have enough storage for 256
251 * colors. The color table will be populated after decoding the palett e. 240 * colors. The color table will be populated after decoding the palett e.
252 * @param ctableCount A pointer to the size of the color table. When 241 * @param ctableCount A pointer to the size of the color table. When
253 * dstInfo.colorType() is kIndex8, this should be non-NULL. It will 242 * dstInfo.colorType() is kIndex8, this should be non-NULL. It will
254 * be modified to the true size of the color table (<= 256) after 243 * be modified to the true size of the color table (<= 256) after
255 * decoding the palette. 244 * decoding the palette.
256 * @return New SkScanlineDecoder on success, NULL otherwise. The SkCodec 245 * @return New SkScanlineDecoder on success, NULL otherwise. The caller is
257 * will take ownership of the returned scanline decoder. 246 * responsible for deleting the returned object.
258 */ 247 */
259 virtual SkScanlineDecoder* onGetScanlineDecoder(const SkImageInfo& dstInfo, 248 virtual SkScanlineDecoder* onGetScanlineDecoder(const SkImageInfo& dstInfo,
260 const Options& options, 249 const Options& options,
261 SkPMColor ctable[], 250 SkPMColor ctable[],
262 int* ctableCount) { 251 int* ctableCount) {
263 return NULL; 252 return NULL;
264 } 253 }
265 254
266 virtual bool onReallyHasAlpha() const { return false; } 255 virtual bool onReallyHasAlpha() const { return false; }
267 256
(...skipping 18 matching lines...) Expand all
286 */ 275 */
287 RewindState SK_WARN_UNUSED_RESULT rewindIfNeeded(); 276 RewindState SK_WARN_UNUSED_RESULT rewindIfNeeded();
288 277
289 /** 278 /**
290 * Get method for the input stream 279 * Get method for the input stream
291 */ 280 */
292 SkStream* stream() { 281 SkStream* stream() {
293 return fStream.get(); 282 return fStream.get();
294 } 283 }
295 284
296 /**
297 * If the codec has a scanline decoder, return it (no ownership change occur s)
298 * else return NULL.
299 * The returned decoder is valid while the codec exists and the client has n ot
300 * created a new scanline decoder.
301 */
302 SkScanlineDecoder* scanlineDecoder() {
303 return fScanlineDecoder;
304 }
305
306 /**
307 * Allow the codec subclass to detach and take ownership of the scanline dec oder.
308 * This will likely be used when the scanline decoder needs to be destroyed
309 * in the destructor of the subclass.
310 */
311 SkScanlineDecoder* detachScanlineDecoder() {
312 SkScanlineDecoder* scanlineDecoder = fScanlineDecoder;
313 fScanlineDecoder = NULL;
314 return scanlineDecoder;
315 }
316
317 private: 285 private:
318 const SkImageInfo fInfo; 286 const SkImageInfo fInfo;
319 SkAutoTDelete<SkStream> fStream; 287 SkAutoTDelete<SkStream> fStream;
320 bool fNeedsRewind; 288 bool fNeedsRewind;
321 SkScanlineDecoder* fScanlineDecoder;
322 }; 289 };
323 #endif // SkCodec_DEFINED 290 #endif // SkCodec_DEFINED
OLDNEW
« no previous file with comments | « dm/DMSrcSink.cpp ('k') | include/codec/SkScanlineDecoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698