OLD | NEW |
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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 /** | 51 /** |
52 * Return a size that approximately supports the desired scale factor. | 52 * Return a size that approximately supports the desired scale factor. |
53 * The codec may not be able to scale efficiently to the exact scale | 53 * The codec may not be able to scale efficiently to the exact scale |
54 * factor requested, so return a size that approximates that scale. | 54 * factor requested, so return a size that approximates that scale. |
55 */ | 55 */ |
56 SkISize getScaledDimensions(float desiredScale) const { | 56 SkISize getScaledDimensions(float desiredScale) const { |
57 return this->onGetScaledDimensions(desiredScale); | 57 return this->onGetScaledDimensions(desiredScale); |
58 } | 58 } |
59 | 59 |
60 /** | 60 /** |
| 61 * Return (via desiredSubset) a subset which can decoded from this codec, |
| 62 * or false if this codec cannot decode subsets or anything similar to |
| 63 * desiredSubset. |
| 64 * |
| 65 * @param desiredSubset In/out parameter. As input, a desired subset of |
| 66 * the original bounds (as specified by getInfo). If true is returned, |
| 67 * desiredSubset may have been modified to a subset which is |
| 68 * supported. Although a particular change may have been made to |
| 69 * desiredSubset to create something supported, it is possible other |
| 70 * changes could result in a valid subset. |
| 71 * If false is returned, desiredSubset's value is undefined. |
| 72 * @return true if this codec supports decoding desiredSubset (as |
| 73 * returned, potentially modified) |
| 74 */ |
| 75 bool getValidSubset(SkIRect* desiredSubset) const { |
| 76 return this->onGetValidSubset(desiredSubset); |
| 77 } |
| 78 |
| 79 /** |
61 * Format of the encoded data. | 80 * Format of the encoded data. |
62 */ | 81 */ |
63 SkEncodedFormat getEncodedFormat() const { return this->onGetEncodedFormat()
; } | 82 SkEncodedFormat getEncodedFormat() const { return this->onGetEncodedFormat()
; } |
64 | 83 |
65 /** | 84 /** |
66 * Used to describe the result of a call to getPixels(). | 85 * Used to describe the result of a call to getPixels(). |
67 * | 86 * |
68 * Result is the union of possible results from subclasses. | 87 * Result is the union of possible results from subclasses. |
69 */ | 88 */ |
70 enum Result { | 89 enum Result { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 * This is the default. It will be used if no Options struct is used. | 140 * This is the default. It will be used if no Options struct is used. |
122 */ | 141 */ |
123 kNo_ZeroInitialized, | 142 kNo_ZeroInitialized, |
124 }; | 143 }; |
125 | 144 |
126 /** | 145 /** |
127 * Additional options to pass to getPixels. | 146 * Additional options to pass to getPixels. |
128 */ | 147 */ |
129 struct Options { | 148 struct Options { |
130 Options() | 149 Options() |
131 : fZeroInitialized(kNo_ZeroInitialized) {} | 150 : fZeroInitialized(kNo_ZeroInitialized) |
| 151 , fSubset(NULL) |
| 152 {} |
132 | 153 |
133 ZeroInitialized fZeroInitialized; | 154 ZeroInitialized fZeroInitialized; |
| 155 /** |
| 156 * If not NULL, represents a subset of the original image to decode. |
| 157 * |
| 158 * Must be within the bounds returned by getInfo(). |
| 159 * |
| 160 * If the EncodedFormat is kWEBP_SkEncodedFormat (the only one which |
| 161 * currently supports subsets), the top and left values must be even. |
| 162 */ |
| 163 SkIRect* fSubset; |
134 }; | 164 }; |
135 | 165 |
136 /** | 166 /** |
137 * Decode into the given pixels, a block of memory of size at | 167 * Decode into the given pixels, a block of memory of size at |
138 * least (info.fHeight - 1) * rowBytes + (info.fWidth * | 168 * least (info.fHeight - 1) * rowBytes + (info.fWidth * |
139 * bytesPerPixel) | 169 * bytesPerPixel) |
140 * | 170 * |
141 * Repeated calls to this function should give the same results, | 171 * Repeated calls to this function should give the same results, |
142 * allowing the PixelRef to be immutable. | 172 * allowing the PixelRef to be immutable. |
143 * | 173 * |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 // By default, scaling is not supported. | 251 // By default, scaling is not supported. |
222 return this->getInfo().dimensions(); | 252 return this->getInfo().dimensions(); |
223 } | 253 } |
224 | 254 |
225 virtual SkEncodedFormat onGetEncodedFormat() const = 0; | 255 virtual SkEncodedFormat onGetEncodedFormat() const = 0; |
226 | 256 |
227 virtual Result onGetPixels(const SkImageInfo& info, | 257 virtual Result onGetPixels(const SkImageInfo& info, |
228 void* pixels, size_t rowBytes, const Options&, | 258 void* pixels, size_t rowBytes, const Options&, |
229 SkPMColor ctable[], int* ctableCount) = 0; | 259 SkPMColor ctable[], int* ctableCount) = 0; |
230 | 260 |
| 261 virtual bool onGetValidSubset(SkIRect* /* desiredSubset */) const { |
| 262 // By default, subsets are not supported. |
| 263 return false; |
| 264 } |
| 265 |
231 /** | 266 /** |
232 * Override if your codec supports scanline decoding. | 267 * Override if your codec supports scanline decoding. |
233 * | 268 * |
234 * @param dstInfo Info of the destination. If the dimensions do not match | 269 * @param dstInfo Info of the destination. If the dimensions do not match |
235 * those of getInfo, this implies a scale. | 270 * those of getInfo, this implies a scale. |
236 * @param options Contains decoding options, including if memory is zero | 271 * @param options Contains decoding options, including if memory is zero |
237 * initialized. | 272 * initialized. |
238 * @param ctable A pointer to a color table. When dstInfo.colorType() is | 273 * @param ctable A pointer to a color table. When dstInfo.colorType() is |
239 * kIndex8, this should be non-NULL and have enough storage for 256 | 274 * kIndex8, this should be non-NULL and have enough storage for 256 |
240 * colors. The color table will be populated after decoding the palett
e. | 275 * colors. The color table will be populated after decoding the palett
e. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 SkStream* stream() { | 316 SkStream* stream() { |
282 return fStream.get(); | 317 return fStream.get(); |
283 } | 318 } |
284 | 319 |
285 private: | 320 private: |
286 const SkImageInfo fInfo; | 321 const SkImageInfo fInfo; |
287 SkAutoTDelete<SkStream> fStream; | 322 SkAutoTDelete<SkStream> fStream; |
288 bool fNeedsRewind; | 323 bool fNeedsRewind; |
289 }; | 324 }; |
290 #endif // SkCodec_DEFINED | 325 #endif // SkCodec_DEFINED |
OLD | NEW |