| 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 |
| 11 #include "SkBitmap.h" | 11 #include "SkBitmap.h" |
| 12 #include "SkImage.h" | 12 #include "SkImage.h" |
| 13 #include "SkPngChunkReader.h" |
| 13 #include "SkRect.h" | 14 #include "SkRect.h" |
| 14 #include "SkRefCnt.h" | 15 #include "SkRefCnt.h" |
| 15 #include "SkTRegistry.h" | 16 #include "SkTRegistry.h" |
| 16 #include "SkTypes.h" | 17 #include "SkTypes.h" |
| 17 | 18 |
| 19 //#define SK_LEGACY_PEEKER |
| 20 |
| 18 class SkStream; | 21 class SkStream; |
| 19 class SkStreamRewindable; | 22 class SkStreamRewindable; |
| 20 | 23 |
| 21 /** \class SkImageDecoder | 24 /** \class SkImageDecoder |
| 22 | 25 |
| 23 Base class for decoding compressed images into a SkBitmap | 26 Base class for decoding compressed images into a SkBitmap |
| 24 */ | 27 */ |
| 25 class SkImageDecoder : SkNoncopyable { | 28 class SkImageDecoder : SkNoncopyable { |
| 26 public: | 29 public: |
| 27 virtual ~SkImageDecoder(); | 30 virtual ~SkImageDecoder(); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 */ | 122 */ |
| 120 void setRequireUnpremultipliedColors(bool request) { | 123 void setRequireUnpremultipliedColors(bool request) { |
| 121 fRequireUnpremultipliedColors = request; | 124 fRequireUnpremultipliedColors = request; |
| 122 } | 125 } |
| 123 | 126 |
| 124 /** Returns true if the decoder will only return bitmaps with unpremultiplie
d | 127 /** Returns true if the decoder will only return bitmaps with unpremultiplie
d |
| 125 colors. | 128 colors. |
| 126 */ | 129 */ |
| 127 bool getRequireUnpremultipliedColors() const { return fRequireUnpremultiplie
dColors; } | 130 bool getRequireUnpremultipliedColors() const { return fRequireUnpremultiplie
dColors; } |
| 128 | 131 |
| 129 /** \class Peeker | 132 #ifdef SK_LEGACY_PEEKER |
| 130 | 133 // Android subclasses SkImageDecoder::Peeker, which has been changed into Sk
PngChunkReader. |
| 131 Base class for optional callbacks to retrieve meta/chunk data out of | 134 // Temporarily use this class until Android can be updated to directly inher
it from |
| 132 an image as it is being decoded. | 135 // SkPngChunkReader. |
| 133 */ | 136 class Peeker : public SkPngChunkReader { |
| 134 class Peeker : public SkRefCnt { | |
| 135 public: | 137 public: |
| 136 /** Return true to continue decoding, or false to indicate an error, whi
ch | 138 bool readChunk(const char tag[], const void* data, size_t length) final
{ |
| 137 will cause the decoder to not return the image. | 139 return this->peek(tag, data, length); |
| 138 */ | 140 } |
| 139 virtual bool peek(const char tag[], const void* data, size_t length) = 0
; | 141 virtual bool peek(const char tag[], const void* data, size_t length) = 0
; |
| 140 private: | |
| 141 typedef SkRefCnt INHERITED; | |
| 142 }; | 142 }; |
| 143 | 143 #endif |
| 144 Peeker* getPeeker() const { return fPeeker; } | 144 SkPngChunkReader* getPeeker() const { return fPeeker; } |
| 145 Peeker* setPeeker(Peeker*); | 145 SkPngChunkReader* setPeeker(SkPngChunkReader*); |
| 146 | 146 |
| 147 /** | 147 /** |
| 148 * By default, the codec will try to comply with the "pref" colortype | 148 * By default, the codec will try to comply with the "pref" colortype |
| 149 * that is passed to decode() or decodeSubset(). However, this can be calle
d | 149 * that is passed to decode() or decodeSubset(). However, this can be calle
d |
| 150 * to override that, causing the codec to try to match the src depth instea
d | 150 * to override that, causing the codec to try to match the src depth instea
d |
| 151 * (as shown below). | 151 * (as shown below). |
| 152 * | 152 * |
| 153 * src_8Index -> kIndex_8_SkColorType | 153 * src_8Index -> kIndex_8_SkColorType |
| 154 * src_8Gray -> kN32_SkColorType | 154 * src_8Gray -> kN32_SkColorType |
| 155 * src_8bpc -> kN32_SkColorType | 155 * src_8bpc -> kN32_SkColorType |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 * If the image cannot be decompressed, return kFailure. After the | 222 * If the image cannot be decompressed, return kFailure. After the |
| 223 * decoding, the function converts the decoded colortype in bitmap | 223 * decoding, the function converts the decoded colortype in bitmap |
| 224 * to pref if possible. Whether a conversion is feasible is | 224 * to pref if possible. Whether a conversion is feasible is |
| 225 * tested by Bitmap::canCopyTo(pref). | 225 * tested by Bitmap::canCopyTo(pref). |
| 226 | 226 |
| 227 If an SkBitmap::Allocator is installed via setAllocator, it will be | 227 If an SkBitmap::Allocator is installed via setAllocator, it will be |
| 228 used to allocate the pixel memory. A clever allocator can be used | 228 used to allocate the pixel memory. A clever allocator can be used |
| 229 to allocate the memory from a cache, volatile memory, or even from | 229 to allocate the memory from a cache, volatile memory, or even from |
| 230 an existing bitmap's memory. | 230 an existing bitmap's memory. |
| 231 | 231 |
| 232 If a Peeker is installed via setPeeker, it may be used to peek into | 232 If an SkPngChunkReader is installed via setPeeker, it may be used to |
| 233 meta data during the decode. | 233 peek into meta data during the decode. |
| 234 */ | 234 */ |
| 235 Result decode(SkStream*, SkBitmap* bitmap, SkColorType pref, Mode); | 235 Result decode(SkStream*, SkBitmap* bitmap, SkColorType pref, Mode); |
| 236 Result decode(SkStream* stream, SkBitmap* bitmap, Mode mode) { | 236 Result decode(SkStream* stream, SkBitmap* bitmap, Mode mode) { |
| 237 return this->decode(stream, bitmap, kUnknown_SkColorType, mode); | 237 return this->decode(stream, bitmap, kUnknown_SkColorType, mode); |
| 238 } | 238 } |
| 239 | 239 |
| 240 /** Given a stream, this will try to find an appropriate decoder object. | 240 /** Given a stream, this will try to find an appropriate decoder object. |
| 241 If none is found, the method returns NULL. | 241 If none is found, the method returns NULL. |
| 242 */ | 242 */ |
| 243 static SkImageDecoder* Factory(SkStreamRewindable*); | 243 static SkImageDecoder* Factory(SkStreamRewindable*); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 k32Bit_SrcDepth, | 343 k32Bit_SrcDepth, |
| 344 }; | 344 }; |
| 345 /** The subclass, inside onDecode(), calls this to determine the colorType o
f | 345 /** The subclass, inside onDecode(), calls this to determine the colorType o
f |
| 346 the returned bitmap. SrcDepth and hasAlpha reflect the raw data of the | 346 the returned bitmap. SrcDepth and hasAlpha reflect the raw data of the |
| 347 src image. This routine returns the caller's preference given | 347 src image. This routine returns the caller's preference given |
| 348 srcDepth and hasAlpha, or kUnknown_SkColorType if there is no preference
. | 348 srcDepth and hasAlpha, or kUnknown_SkColorType if there is no preference
. |
| 349 */ | 349 */ |
| 350 SkColorType getPrefColorType(SrcDepth, bool hasAlpha) const; | 350 SkColorType getPrefColorType(SrcDepth, bool hasAlpha) const; |
| 351 | 351 |
| 352 private: | 352 private: |
| 353 Peeker* fPeeker; | 353 SkPngChunkReader* fPeeker; |
| 354 SkBitmap::Allocator* fAllocator; | 354 SkBitmap::Allocator* fAllocator; |
| 355 int fSampleSize; | 355 int fSampleSize; |
| 356 SkColorType fDefaultPref; // use if fUsePrefTable is false | 356 SkColorType fDefaultPref; // use if fUsePrefTable is false |
| 357 bool fPreserveSrcDepth; | 357 bool fPreserveSrcDepth; |
| 358 bool fDitherImage; | 358 bool fDitherImage; |
| 359 bool fSkipWritingZeroes; | 359 bool fSkipWritingZeroes; |
| 360 mutable bool fShouldCancelDecode; | 360 mutable bool fShouldCancelDecode; |
| 361 bool fPreferQualityOverSpeed; | 361 bool fPreferQualityOverSpeed; |
| 362 bool fRequireUnpremultipliedColors; | 362 bool fRequireUnpremultipliedColors; |
| 363 }; | 363 }; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 DECLARE_DECODER_CREATOR(PKMImageDecoder); | 408 DECLARE_DECODER_CREATOR(PKMImageDecoder); |
| 409 DECLARE_DECODER_CREATOR(KTXImageDecoder); | 409 DECLARE_DECODER_CREATOR(KTXImageDecoder); |
| 410 DECLARE_DECODER_CREATOR(ASTCImageDecoder); | 410 DECLARE_DECODER_CREATOR(ASTCImageDecoder); |
| 411 | 411 |
| 412 // Typedefs to make registering decoder and formatter callbacks easier. | 412 // Typedefs to make registering decoder and formatter callbacks easier. |
| 413 // These have to be defined outside SkImageDecoder. :( | 413 // These have to be defined outside SkImageDecoder. :( |
| 414 typedef SkTRegistry<SkImageDecoder*(*)(SkStreamRewindable*)> SkImageDecod
er_DecodeReg; | 414 typedef SkTRegistry<SkImageDecoder*(*)(SkStreamRewindable*)> SkImageDecod
er_DecodeReg; |
| 415 typedef SkTRegistry<SkImageDecoder::Format(*)(SkStreamRewindable*)> SkImageDecod
er_FormatReg; | 415 typedef SkTRegistry<SkImageDecoder::Format(*)(SkStreamRewindable*)> SkImageDecod
er_FormatReg; |
| 416 | 416 |
| 417 #endif | 417 #endif |
| OLD | NEW |