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 | 8 |
9 #include "SkImageDecoder.h" | 9 #include "SkImageDecoder.h" |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
11 #include "SkImagePriv.h" | 11 #include "SkImagePriv.h" |
12 #include "SkPixelRef.h" | 12 #include "SkPixelRef.h" |
13 #include "SkStream.h" | 13 #include "SkStream.h" |
14 #include "SkTemplates.h" | 14 #include "SkTemplates.h" |
15 #include "SkCanvas.h" | 15 #include "SkCanvas.h" |
16 | 16 |
17 SkImageDecoder::SkImageDecoder() | 17 SkImageDecoder::SkImageDecoder() |
18 : fPeeker(NULL) | 18 : fPeeker(NULL) |
19 #ifdef SK_SUPPORT_LEGACY_IMAGEDECODER_CHOOSER | |
20 , fChooser(NULL) | |
21 #endif | |
22 , fAllocator(NULL) | 19 , fAllocator(NULL) |
23 , fSampleSize(1) | 20 , fSampleSize(1) |
24 , fDefaultPref(kUnknown_SkColorType) | 21 , fDefaultPref(kUnknown_SkColorType) |
25 , fPreserveSrcDepth(false) | 22 , fPreserveSrcDepth(false) |
26 , fDitherImage(true) | 23 , fDitherImage(true) |
27 , fSkipWritingZeroes(false) | 24 , fSkipWritingZeroes(false) |
28 , fPreferQualityOverSpeed(false) | 25 , fPreferQualityOverSpeed(false) |
29 , fRequireUnpremultipliedColors(false) { | 26 , fRequireUnpremultipliedColors(false) { |
30 } | 27 } |
31 | 28 |
32 SkImageDecoder::~SkImageDecoder() { | 29 SkImageDecoder::~SkImageDecoder() { |
33 SkSafeUnref(fPeeker); | 30 SkSafeUnref(fPeeker); |
34 #ifdef SK_SUPPORT_LEGACY_IMAGEDECODER_CHOOSER | |
35 SkSafeUnref(fChooser); | |
36 #endif | |
37 SkSafeUnref(fAllocator); | 31 SkSafeUnref(fAllocator); |
38 } | 32 } |
39 | 33 |
40 void SkImageDecoder::copyFieldsToOther(SkImageDecoder* other) { | 34 void SkImageDecoder::copyFieldsToOther(SkImageDecoder* other) { |
41 if (NULL == other) { | 35 if (NULL == other) { |
42 return; | 36 return; |
43 } | 37 } |
44 other->setPeeker(fPeeker); | 38 other->setPeeker(fPeeker); |
45 #ifdef SK_SUPPORT_LEGACY_IMAGEDECODER_CHOOSER | |
46 other->setChooser(fChooser); | |
47 #endif | |
48 other->setAllocator(fAllocator); | 39 other->setAllocator(fAllocator); |
49 other->setSampleSize(fSampleSize); | 40 other->setSampleSize(fSampleSize); |
50 other->setPreserveSrcDepth(fPreserveSrcDepth); | 41 other->setPreserveSrcDepth(fPreserveSrcDepth); |
51 other->setDitherImage(fDitherImage); | 42 other->setDitherImage(fDitherImage); |
52 other->setSkipWritingZeroes(fSkipWritingZeroes); | 43 other->setSkipWritingZeroes(fSkipWritingZeroes); |
53 other->setPreferQualityOverSpeed(fPreferQualityOverSpeed); | 44 other->setPreferQualityOverSpeed(fPreferQualityOverSpeed); |
54 other->setRequireUnpremultipliedColors(fRequireUnpremultipliedColors); | 45 other->setRequireUnpremultipliedColors(fRequireUnpremultipliedColors); |
55 } | 46 } |
56 | 47 |
57 SkImageDecoder::Format SkImageDecoder::getFormat() const { | 48 SkImageDecoder::Format SkImageDecoder::getFormat() const { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 SkDEBUGFAIL("Invalid format type!"); | 81 SkDEBUGFAIL("Invalid format type!"); |
91 } | 82 } |
92 return "Unknown Format"; | 83 return "Unknown Format"; |
93 } | 84 } |
94 | 85 |
95 SkImageDecoder::Peeker* SkImageDecoder::setPeeker(Peeker* peeker) { | 86 SkImageDecoder::Peeker* SkImageDecoder::setPeeker(Peeker* peeker) { |
96 SkRefCnt_SafeAssign(fPeeker, peeker); | 87 SkRefCnt_SafeAssign(fPeeker, peeker); |
97 return peeker; | 88 return peeker; |
98 } | 89 } |
99 | 90 |
100 #ifdef SK_SUPPORT_LEGACY_IMAGEDECODER_CHOOSER | |
101 SkImageDecoder::Chooser* SkImageDecoder::setChooser(Chooser* chooser) { | |
102 SkRefCnt_SafeAssign(fChooser, chooser); | |
103 return chooser; | |
104 } | |
105 #endif | |
106 | |
107 SkBitmap::Allocator* SkImageDecoder::setAllocator(SkBitmap::Allocator* alloc) { | 91 SkBitmap::Allocator* SkImageDecoder::setAllocator(SkBitmap::Allocator* alloc) { |
108 SkRefCnt_SafeAssign(fAllocator, alloc); | 92 SkRefCnt_SafeAssign(fAllocator, alloc); |
109 return alloc; | 93 return alloc; |
110 } | 94 } |
111 | 95 |
112 void SkImageDecoder::setSampleSize(int size) { | 96 void SkImageDecoder::setSampleSize(int size) { |
113 if (size < 1) { | 97 if (size < 1) { |
114 size = 1; | 98 size = 1; |
115 } | 99 } |
116 fSampleSize = size; | 100 fSampleSize = size; |
117 } | 101 } |
118 | 102 |
119 #ifdef SK_SUPPORT_LEGACY_IMAGEDECODER_CHOOSER | |
120 // TODO: change Chooser virtual to take colorType, so we can stop calling SkColo
rTypeToBitmapConfig | |
121 // | |
122 bool SkImageDecoder::chooseFromOneChoice(SkColorType colorType, int width, int h
eight) const { | |
123 Chooser* chooser = fChooser; | |
124 | |
125 if (NULL == chooser) { // no chooser, we just say YES to decoding :) | |
126 return true; | |
127 } | |
128 chooser->begin(1); | |
129 chooser->inspect(0, SkColorTypeToBitmapConfig(colorType), width, height); | |
130 return chooser->choose() == 0; | |
131 } | |
132 #endif | |
133 | |
134 bool SkImageDecoder::allocPixelRef(SkBitmap* bitmap, | 103 bool SkImageDecoder::allocPixelRef(SkBitmap* bitmap, |
135 SkColorTable* ctable) const { | 104 SkColorTable* ctable) const { |
136 return bitmap->tryAllocPixels(fAllocator, ctable); | 105 return bitmap->tryAllocPixels(fAllocator, ctable); |
137 } | 106 } |
138 | 107 |
139 /////////////////////////////////////////////////////////////////////////////// | 108 /////////////////////////////////////////////////////////////////////////////// |
140 | 109 |
141 SkColorType SkImageDecoder::getPrefColorType(SrcDepth srcDepth, bool srcHasAlpha
) const { | 110 SkColorType SkImageDecoder::getPrefColorType(SrcDepth srcDepth, bool srcHasAlpha
) const { |
142 SkColorType ct = fDefaultPref; | 111 SkColorType ct = fDefaultPref; |
143 if (fPreserveSrcDepth) { | 112 if (fPreserveSrcDepth) { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 return success; | 256 return success; |
288 } | 257 } |
289 | 258 |
290 bool SkImageDecoder::decodeYUV8Planes(SkStream* stream, SkISize componentSizes[3
], void* planes[3], | 259 bool SkImageDecoder::decodeYUV8Planes(SkStream* stream, SkISize componentSizes[3
], void* planes[3], |
291 size_t rowBytes[3], SkYUVColorSpace* color
Space) { | 260 size_t rowBytes[3], SkYUVColorSpace* color
Space) { |
292 // we reset this to false before calling onDecodeYUV8Planes | 261 // we reset this to false before calling onDecodeYUV8Planes |
293 fShouldCancelDecode = false; | 262 fShouldCancelDecode = false; |
294 | 263 |
295 return this->onDecodeYUV8Planes(stream, componentSizes, planes, rowBytes, co
lorSpace); | 264 return this->onDecodeYUV8Planes(stream, componentSizes, planes, rowBytes, co
lorSpace); |
296 } | 265 } |
OLD | NEW |