Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: src/codec/SkSwizzler.h

Issue 1321433002: Add subsetting to SkScaledCodec (Closed) Base URL: https://skia.googlesource.com/skia.git@gif-scan
Patch Set: Rebase - it compiles but I'm sure everything is broken Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/codec/SkScaledCodec.cpp ('k') | src/codec/SkSwizzler.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 ZeroInitialized Whether 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 * @param srcInfo is the info of the source. Used to calculate the width sa mplesize.
128 * Width sampling is supported by the swizzler, by skipping pixels when
129 * swizzling the row. Height sampling is not supported by t he swizzler,
130 * but is implemented in SkScaledCodec.
131 * Sampling in Y can be done by a client with a scanline de coder,
132 * but sampling in X allows the swizzler to skip swizzling pixels and
133 * reading from and writing to memory.
134 * @param subsetLeft the left offset on the src for each row swizzle.
135 * @param subsetWidth the width of each swizzle in destination pixels.
127 * @return A new SkSwizzler or nullptr on failure. 136 * @return A new SkSwizzler or nullptr on failure.
128 */ 137 */
129 static SkSwizzler* CreateSwizzler(SrcConfig, const SkPMColor* ctable, 138 static SkSwizzler* CreateSwizzler(SrcConfig, const SkPMColor* ctable,
130 const SkImageInfo& dstInfo, SkCodec::ZeroI nitialized); 139 const SkImageInfo& dstInfo, SkCodec::ZeroI nitialized,
140 int subsetLeft, int subsetWidth);
131 141
132 /** 142 /**
133 * Swizzle a line. Generally this will be called height times, once 143 * Swizzle a line. Generally this will be called height times, once
134 * for each row of source. 144 * for each row of source.
135 * By allowing the caller to pass in the dst pointer, we give the caller 145 * 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 146 * 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 147 * store the rows in order. This also improves usability for scaled and
138 * subset decodes. 148 * subset decodes.
139 * @param dst Where we write the output. 149 * @param dst Where we write the output.
140 * @param src The next row of the source data. 150 * @param src The next row of the source data.
(...skipping 16 matching lines...) Expand all
157 * @param offset The offset before the first pixel to sample. 167 * @param offset The offset before the first pixel to sample.
158 Is in bytes or bits based on what deltaSrc is in. 168 Is in bytes or bits based on what deltaSrc is in.
159 */ 169 */
160 typedef ResultAlpha (*RowProc)(void* SK_RESTRICT dstRow, 170 typedef ResultAlpha (*RowProc)(void* SK_RESTRICT dstRow,
161 const uint8_t* SK_RESTRICT src, 171 const uint8_t* SK_RESTRICT src,
162 int dstWidth, int bpp, int deltaSrc, int offs et, 172 int dstWidth, int bpp, int deltaSrc, int offs et,
163 const SkPMColor ctable[]); 173 const SkPMColor ctable[]);
164 174
165 const RowProc fRowProc; 175 const RowProc fRowProc;
166 const SkPMColor* fColorTable; // Unowned pointer 176 const SkPMColor* fColorTable; // Unowned pointer
167 const int fDeltaSrc; // if bitsPerPixel % 8 == 0 177 const int fSrcOffset; // Offset of the src in pixels, allows for partial
168 // deltaSrc is bytesPerPixel 178 // scanline decodes.
169 // else 179 int fX0; // Start coordinate for the src, may b e different than
170 // deltaSrc is bitsPerPixel 180 // fSrcOffset if we are sampling.
171 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.
172 int fDstWidth; // Width of dst, which may differ with sampling. 182 int fDstWidth; // Width of dst, which may differ with sampling.
173 int fX0; // first X coord to sample
174 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
175 188
176 SkSwizzler(RowProc proc, const SkPMColor* ctable, int deltaSrc, int srcWidth ); 189 SkSwizzler(RowProc proc, const SkPMColor* ctable, int srcOffset, int srcWidt h, int bpp);
177 190
178 int onSetSampleX(int) override; 191 int onSetSampleX(int) override;
179 192
180 int onGetScaledWidth() override { 193 int onGetScaledWidth() override {
181 return fDstWidth; 194 return fDstWidth;
182 } 195 }
183 }; 196 };
184 #endif // SkSwizzler_DEFINED 197 #endif // SkSwizzler_DEFINED
OLDNEW
« no previous file with comments | « src/codec/SkScaledCodec.cpp ('k') | src/codec/SkSwizzler.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698