OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
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 SkImageDecoder_DEFINED | 8 #ifndef SkImageDecoder_DEFINED |
9 #define SkImageDecoder_DEFINED | 9 #define SkImageDecoder_DEFINED |
10 | 10 |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 | 218 |
219 /** Passed to the decode method. If kDecodeBounds_Mode is passed, then | 219 /** Passed to the decode method. If kDecodeBounds_Mode is passed, then |
220 only the bitmap's info need be set. If kDecodePixels_Mode | 220 only the bitmap's info need be set. If kDecodePixels_Mode |
221 is passed, then the bitmap must have pixels or a pixelRef. | 221 is passed, then the bitmap must have pixels or a pixelRef. |
222 */ | 222 */ |
223 enum Mode { | 223 enum Mode { |
224 kDecodeBounds_Mode, //!< only return info in bitmap | 224 kDecodeBounds_Mode, //!< only return info in bitmap |
225 kDecodePixels_Mode //!< return entire bitmap (including pixels) | 225 kDecodePixels_Mode //!< return entire bitmap (including pixels) |
226 }; | 226 }; |
227 | 227 |
| 228 /** Result of a decode. If read as a boolean, a partial success is |
| 229 considered a success (true). |
| 230 */ |
| 231 enum Result { |
| 232 kFailure = 0, //!< Image failed to decode. bitmap will be |
| 233 // unchanged. |
| 234 kPartialSuccess = 1, //!< Part of the image decoded. The rest is |
| 235 // filled in automatically |
| 236 kSuccess = 2 //!< The entire image was decoded, if Mode is |
| 237 // kDecodePixels_Mode, or the bounds were |
| 238 // decoded, in kDecodeBounds_Mode. |
| 239 }; |
| 240 |
228 /** Given a stream, decode it into the specified bitmap. | 241 /** Given a stream, decode it into the specified bitmap. |
229 If the decoder can decompress the image, it calls bitmap.setInfo(), | 242 If the decoder can decompress the image, it calls bitmap.setInfo(), |
230 and then if the Mode is kDecodePixels_Mode, call allocPixelRef(), | 243 and then if the Mode is kDecodePixels_Mode, call allocPixelRef(), |
231 which will allocated a pixelRef. To access the pixel memory, the codec | 244 which will allocated a pixelRef. To access the pixel memory, the codec |
232 needs to call lockPixels/unlockPixels on the | 245 needs to call lockPixels/unlockPixels on the |
233 bitmap. It can then set the pixels with the decompressed image. | 246 bitmap. It can then set the pixels with the decompressed image. |
234 * If the image cannot be decompressed, return false. After the | 247 * If the image cannot be decompressed, return kFailure. After the |
235 * decoding, the function converts the decoded colortype in bitmap | 248 * decoding, the function converts the decoded colortype in bitmap |
236 * to pref if possible. Whether a conversion is feasible is | 249 * to pref if possible. Whether a conversion is feasible is |
237 * tested by Bitmap::canCopyTo(pref). | 250 * tested by Bitmap::canCopyTo(pref). |
238 | 251 |
239 If an SkBitmap::Allocator is installed via setAllocator, it will be | 252 If an SkBitmap::Allocator is installed via setAllocator, it will be |
240 used to allocate the pixel memory. A clever allocator can be used | 253 used to allocate the pixel memory. A clever allocator can be used |
241 to allocate the memory from a cache, volatile memory, or even from | 254 to allocate the memory from a cache, volatile memory, or even from |
242 an existing bitmap's memory. | 255 an existing bitmap's memory. |
243 | 256 |
244 If a Peeker is installed via setPeeker, it may be used to peek into | 257 If a Peeker is installed via setPeeker, it may be used to peek into |
245 meta data during the decode. | 258 meta data during the decode. |
246 */ | 259 */ |
247 bool decode(SkStream*, SkBitmap* bitmap, SkColorType pref, Mode); | 260 Result decode(SkStream*, SkBitmap* bitmap, SkColorType pref, Mode); |
248 bool decode(SkStream* stream, SkBitmap* bitmap, Mode mode) { | 261 Result decode(SkStream* stream, SkBitmap* bitmap, Mode mode) { |
249 return this->decode(stream, bitmap, kUnknown_SkColorType, mode); | 262 return this->decode(stream, bitmap, kUnknown_SkColorType, mode); |
250 } | 263 } |
251 | 264 |
252 /** | 265 /** |
253 * Given a stream, build an index for doing tile-based decode. | 266 * Given a stream, build an index for doing tile-based decode. |
254 * The built index will be saved in the decoder, and the image size will | 267 * The built index will be saved in the decoder, and the image size will |
255 * be returned in width and height. | 268 * be returned in width and height. |
256 * | 269 * |
257 * Return true for success or false on failure. | 270 * Return true for success or false on failure. |
258 */ | 271 */ |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 of the decoded stream. On failure it is ignored. | 340 of the decoded stream. On failure it is ignored. |
328 */ | 341 */ |
329 static bool DecodeStream(SkStreamRewindable* stream, SkBitmap* bitmap, SkCol
orType pref, Mode, | 342 static bool DecodeStream(SkStreamRewindable* stream, SkBitmap* bitmap, SkCol
orType pref, Mode, |
330 Format* format = NULL); | 343 Format* format = NULL); |
331 static bool DecodeStream(SkStreamRewindable* stream, SkBitmap* bitmap) { | 344 static bool DecodeStream(SkStreamRewindable* stream, SkBitmap* bitmap) { |
332 return DecodeStream(stream, bitmap, kUnknown_SkColorType, kDecodePixels_
Mode, NULL); | 345 return DecodeStream(stream, bitmap, kUnknown_SkColorType, kDecodePixels_
Mode, NULL); |
333 } | 346 } |
334 | 347 |
335 protected: | 348 protected: |
336 // must be overridden in subclasses. This guy is called by decode(...) | 349 // must be overridden in subclasses. This guy is called by decode(...) |
337 virtual bool onDecode(SkStream*, SkBitmap* bitmap, Mode) = 0; | 350 virtual Result onDecode(SkStream*, SkBitmap* bitmap, Mode) = 0; |
338 | 351 |
339 // If the decoder wants to support tiled based decoding, | 352 // If the decoder wants to support tiled based decoding, |
340 // this method must be overridden. This guy is called by buildTileIndex(...) | 353 // this method must be overridden. This guy is called by buildTileIndex(...) |
341 virtual bool onBuildTileIndex(SkStreamRewindable*, int *width, int *height)
{ | 354 virtual bool onBuildTileIndex(SkStreamRewindable*, int *width, int *height)
{ |
342 return false; | 355 return false; |
343 } | 356 } |
344 | 357 |
345 // If the decoder wants to support tiled based decoding, | 358 // If the decoder wants to support tiled based decoding, |
346 // this method must be overridden. This guy is called by decodeRegion(...) | 359 // this method must be overridden. This guy is called by decodeRegion(...) |
347 virtual bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& rect) { | 360 virtual bool onDecodeSubset(SkBitmap* bitmap, const SkIRect& rect) { |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 DECLARE_DECODER_CREATOR(PKMImageDecoder); | 510 DECLARE_DECODER_CREATOR(PKMImageDecoder); |
498 DECLARE_DECODER_CREATOR(KTXImageDecoder); | 511 DECLARE_DECODER_CREATOR(KTXImageDecoder); |
499 DECLARE_DECODER_CREATOR(ASTCImageDecoder); | 512 DECLARE_DECODER_CREATOR(ASTCImageDecoder); |
500 | 513 |
501 // Typedefs to make registering decoder and formatter callbacks easier. | 514 // Typedefs to make registering decoder and formatter callbacks easier. |
502 // These have to be defined outside SkImageDecoder. :( | 515 // These have to be defined outside SkImageDecoder. :( |
503 typedef SkTRegistry<SkImageDecoder*(*)(SkStreamRewindable*)> SkImageDecod
er_DecodeReg; | 516 typedef SkTRegistry<SkImageDecoder*(*)(SkStreamRewindable*)> SkImageDecod
er_DecodeReg; |
504 typedef SkTRegistry<SkImageDecoder::Format(*)(SkStreamRewindable*)> SkImageDecod
er_FormatReg; | 517 typedef SkTRegistry<SkImageDecoder::Format(*)(SkStreamRewindable*)> SkImageDecod
er_FormatReg; |
505 | 518 |
506 #endif | 519 #endif |
OLD | NEW |