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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 SkASSERT(SkIsAlign8(BitsPerPixel(sc))); | 114 SkASSERT(SkIsAlign8(BitsPerPixel(sc))); |
115 return BitsPerPixel(sc) >> 3; | 115 return BitsPerPixel(sc) >> 3; |
116 } | 116 } |
117 | 117 |
118 /** | 118 /** |
119 * Create a new SkSwizzler. | 119 * Create a new SkSwizzler. |
120 * @param SrcConfig Description of the format of the source. | 120 * @param SrcConfig Description of the format of the source. |
121 * @param ctable Unowned pointer to an array of up to 256 colors for an | 121 * @param ctable Unowned pointer to an array of up to 256 colors for an |
122 * index source. | 122 * index source. |
123 * @param dstInfo Describes the destination. | 123 * @param dstInfo Describes the destination. |
124 * @param ZeroInitialized Whether dst is zero-initialized. The | 124 * @param options Indicates if dst is zero-initialized. The |
125 * implementation may choose to skip writing zeroes | 125 * implementation may choose to skip writing zeroes |
126 * if set to kYes_ZeroInitialized. | 126 * if set to kYes_ZeroInitialized. |
| 127 * Contains subset information. |
127 * @return A new SkSwizzler or nullptr on failure. | 128 * @return A new SkSwizzler or nullptr on failure. |
128 */ | 129 */ |
129 static SkSwizzler* CreateSwizzler(SrcConfig, const SkPMColor* ctable, | 130 static SkSwizzler* CreateSwizzler(SrcConfig, const SkPMColor* ctable, |
130 const SkImageInfo& dstInfo, SkCodec::ZeroI
nitialized); | 131 const SkImageInfo& dstInfo, const SkCodec:
:Options&); |
131 | 132 |
132 /** | 133 /** |
133 * Swizzle a line. Generally this will be called height times, once | 134 * Swizzle a line. Generally this will be called height times, once |
134 * for each row of source. | 135 * for each row of source. |
135 * By allowing the caller to pass in the dst pointer, we give the caller | 136 * By allowing the caller to pass in the dst pointer, we give the caller |
136 * flexibility to use the swizzler even when the encoded data does not | 137 * flexibility to use the swizzler even when the encoded data does not |
137 * store the rows in order. This also improves usability for scaled and | 138 * store the rows in order. This also improves usability for scaled and |
138 * subset decodes. | 139 * subset decodes. |
139 * @param dst Where we write the output. | 140 * @param dst Where we write the output. |
140 * @param src The next row of the source data. | 141 * @param src The next row of the source data. |
(...skipping 25 matching lines...) Expand all Loading... |
166 * @param offset The offset before the first pixel to sample. | 167 * @param offset The offset before the first pixel to sample. |
167 Is in bytes or bits based on what deltaSrc is in. | 168 Is in bytes or bits based on what deltaSrc is in. |
168 */ | 169 */ |
169 typedef ResultAlpha (*RowProc)(void* SK_RESTRICT dstRow, | 170 typedef ResultAlpha (*RowProc)(void* SK_RESTRICT dstRow, |
170 const uint8_t* SK_RESTRICT src, | 171 const uint8_t* SK_RESTRICT src, |
171 int dstWidth, int bpp, int deltaSrc, int offs
et, | 172 int dstWidth, int bpp, int deltaSrc, int offs
et, |
172 const SkPMColor ctable[]); | 173 const SkPMColor ctable[]); |
173 | 174 |
174 const RowProc fRowProc; | 175 const RowProc fRowProc; |
175 const SkPMColor* fColorTable; // Unowned pointer | 176 const SkPMColor* fColorTable; // Unowned pointer |
176 const int fDeltaSrc; // if bitsPerPixel % 8 == 0 | 177 const int fSrcOffset; // Offset of the src in pixels, allows
for partial |
177 // deltaSrc is bytesPerPixel | 178 // scanline decodes. |
178 // else | 179 int fX0; // Start coordinate for the src, may b
e different than |
179 // deltaSrc is bitsPerPixel | 180 // fSrcOffset if we are sampling. |
180 const int fSrcWidth; // Width of the source - i.e. before a
ny sampling. | 181 const int fSrcWidth; // Width of the source - i.e. before a
ny sampling. |
181 int fDstWidth; // Width of dst, which may differ with
sampling. | 182 int fDstWidth; // Width of dst, which may differ with
sampling. |
182 int fX0; // first X coord to sample | |
183 int fSampleX; // step between X samples | 183 int fSampleX; // step between X samples |
| 184 const int fBPP; // if bitsPerPixel % 8 == 0 |
| 185 // fBPP is bytesPerPixel |
| 186 // else |
| 187 // fBPP is bitsPerPixel |
184 | 188 |
185 SkSwizzler(RowProc proc, const SkPMColor* ctable, int deltaSrc, int srcWidth
); | 189 SkSwizzler(RowProc proc, const SkPMColor* ctable, int srcOffset, int srcWidt
h, int bpp); |
186 | 190 |
187 int onSetSampleX(int) override; | 191 int onSetSampleX(int) override; |
188 | 192 |
189 }; | 193 }; |
190 #endif // SkSwizzler_DEFINED | 194 #endif // SkSwizzler_DEFINED |
OLD | NEW |