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 SkSwizzler_DEFINED | 8 #ifndef SkSwizzler_DEFINED |
9 #define SkSwizzler_DEFINED | 9 #define SkSwizzler_DEFINED |
10 | 10 |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 * colorOrIndex. | 156 * colorOrIndex. |
157 | 157 |
158 * A non-nullptr colorTable means colorOrIndex is treated as a uint8_t index
into | 158 * A non-nullptr colorTable means colorOrIndex is treated as a uint8_t index
into |
159 * the colorTable. i.e. each 4-byte pixel will be set to | 159 * the colorTable. i.e. each 4-byte pixel will be set to |
160 * colorTable[(uint8_t) colorOrIndex]. | 160 * colorTable[(uint8_t) colorOrIndex]. |
161 * | 161 * |
162 * If dstInfo.colorType() is kGray, colorOrIndex is always treated as an 8-b
it color. | 162 * If dstInfo.colorType() is kGray, colorOrIndex is always treated as an 8-b
it color. |
163 * | 163 * |
164 * Other SkColorTypes are not supported. | 164 * Other SkColorTypes are not supported. |
165 * | 165 * |
| 166 * @param zeroInit |
| 167 * Indicates whether memory is already zero initialized. |
| 168 * |
166 */ | 169 */ |
167 static void Fill(void* dstStartRow, const SkImageInfo& dstInfo, size_t dstRo
wBytes, | 170 static void Fill(void* dstStartRow, const SkImageInfo& dstInfo, size_t dstRo
wBytes, |
168 uint32_t numRows, uint32_t colorOrIndex, const SkPMColor* colorTable
); | 171 uint32_t numRows, uint32_t colorOrIndex, const SkPMColor* colorTable
, |
| 172 SkCodec::ZeroInitialized zeroInit); |
169 | 173 |
170 /** | 174 /** |
171 * Swizzle a line. Generally this will be called height times, once | 175 * Swizzle a line. Generally this will be called height times, once |
172 * for each row of source. | 176 * for each row of source. |
173 * By allowing the caller to pass in the dst pointer, we give the caller | 177 * By allowing the caller to pass in the dst pointer, we give the caller |
174 * flexibility to use the swizzler even when the encoded data does not | 178 * flexibility to use the swizzler even when the encoded data does not |
175 * store the rows in order. This also improves usability for scaled and | 179 * store the rows in order. This also improves usability for scaled and |
176 * subset decodes. | 180 * subset decodes. |
177 * @param dst Where we write the output. | 181 * @param dst Where we write the output. |
178 * @param src The next row of the source data. | 182 * @param src The next row of the source data. |
179 * @return A result code describing if the row was fully opaque, fully | 183 * @return A result code describing if the row was fully opaque, fully |
180 * transparent, or neither | 184 * transparent, or neither |
181 */ | 185 */ |
182 ResultAlpha swizzle(void* dst, const uint8_t* SK_RESTRICT src); | 186 ResultAlpha swizzle(void* dst, const uint8_t* SK_RESTRICT src); |
183 | 187 |
184 private: | 188 private: |
185 | 189 |
186 /** | 190 /** |
187 * Method for converting raw data to Skia pixels. | 191 * Method for converting raw data to Skia pixels. |
188 * @param dstRow Row in which to write the resulting pixels. | 192 * @param dstRow Row in which to write the resulting pixels. |
189 * @param src Row of src data, in format specified by SrcConfig | 193 * @param src Row of src data, in format specified by SrcConfig |
190 * @param dstWidth Width in pixels of the destination | 194 * @param dstWidth Width in pixels of the destination |
191 * @param deltaSrc if bitsPerPixel % 8 == 0, deltaSrc is bytesPerPixel | 195 * @param bpp if bitsPerPixel % 8 == 0, deltaSrc is bytesPerPixel |
192 * else, deltaSrc is bitsPerPixel | 196 * else, deltaSrc is bitsPerPixel |
| 197 * @param deltaSrc bpp * sampleX |
193 * @param ctable Colors (used for kIndex source). | 198 * @param ctable Colors (used for kIndex source). |
194 * @param offset The offset before the first pixel to sample. | 199 * @param offset The offset before the first pixel to sample. |
195 Is in bytes or bits based on what deltaSrc is in. | 200 Is in bytes or bits based on what deltaSrc is in. |
196 */ | 201 */ |
197 typedef ResultAlpha (*RowProc)(void* SK_RESTRICT dstRow, | 202 typedef ResultAlpha (*RowProc)(void* SK_RESTRICT dstRow, |
198 const uint8_t* SK_RESTRICT src, | 203 const uint8_t* SK_RESTRICT src, |
199 int dstWidth, int deltaSrc, int offset, | 204 int dstWidth, int bpp, int deltaSrc, int offs
et, |
200 const SkPMColor ctable[]); | 205 const SkPMColor ctable[]); |
201 | 206 |
202 const RowProc fRowProc; | 207 const RowProc fRowProc; |
203 const SkPMColor* fColorTable; // Unowned pointer | 208 const SkPMColor* fColorTable; // Unowned pointer |
204 const int fDeltaSrc; // if bitsPerPixel % 8 == 0 | 209 const int fDeltaSrc; // if bitsPerPixel % 8 == 0 |
205 // deltaSrc is bytesPerPixel | 210 // deltaSrc is bytesPerPixel |
206 // else | 211 // else |
207 // deltaSrc is bitsPerPixel | 212 // deltaSrc is bitsPerPixel |
208 const SkImageInfo fDstInfo; | 213 const SkImageInfo fDstInfo; |
209 int fCurrY; | 214 int fCurrY; |
210 const int fX0; // first X coord to sample | 215 const int fX0; // first X coord to sample |
211 const int fSampleX; // step between X samples | 216 const int fSampleX; // step between X samples |
212 | 217 |
213 SkSwizzler(RowProc proc, const SkPMColor* ctable, int deltaSrc, const SkImag
eInfo& info, | 218 SkSwizzler(RowProc proc, const SkPMColor* ctable, int deltaSrc, const SkImag
eInfo& info, |
214 int sampleX); | 219 int sampleX); |
215 }; | 220 }; |
216 #endif // SkSwizzler_DEFINED | 221 #endif // SkSwizzler_DEFINED |
OLD | NEW |