12 template <
class Pixel>
18 template <
class Pixel>
23 for (
unsigned srcY = srcStartY, dstY = dstStartY;
24 dstY < dstEndY; srcY += 1, dstY += 3) {
26 for (
int i = 0; i < 3; ++i) {
32 template <
class Pixel>
37 for (
unsigned srcY = srcStartY, dstY = dstStartY;
38 dstY < dstEndY; srcY += 2, dstY += 3) {
41 Pixel color01 = pixelOps.template blend<1, 1>(color0, color1);
48 template <
typename Pixel>
50 unsigned srcStartY,
unsigned ,
unsigned srcWidth,
57 for (
unsigned dstY = dstStartY; dstY < dstEndY; dstY += 3, ++srcStartY) {
60 scale(srcLine, dstLine0, dstWidth);
64 scale(srcLine, dstLine1, dstWidth);
66 copy(dstLine0, dstLine1, dstWidth);
71 scale(srcLine, dstLine2, dstWidth);
73 copy(dstLine0, dstLine2, dstWidth);
82 template <
typename Pixel>
83 static void doScaleDV(FrameSource& src,
84 unsigned srcStartY,
unsigned ,
unsigned srcWidth,
85 ScalerOutput<Pixel>& dst,
unsigned dstStartY,
unsigned dstEndY,
86 PixelOperations<Pixel> ops, PolyLineScaler<Pixel>& scale)
88 BlendLines<Pixel> blend(ops);
89 unsigned dstWidth = dst.getWidth();
90 for (
unsigned srcY = srcStartY, dstY = dstStartY; dstY < dstEndY;
91 srcY += 2, dstY += 3) {
92 const Pixel* srcLine0 = src.getLinePtr<
Pixel>(srcY + 0, srcWidth);
93 Pixel* dstLine0 = dst.acquireLine(dstY + 0);
94 scale(srcLine0, dstLine0, dstWidth);
96 const Pixel* srcLine1 = src.getLinePtr<
Pixel>(srcY + 1, srcWidth);
97 Pixel* dstLine2 = dst.acquireLine(dstY + 2);
98 scale(srcLine1, dstLine2, dstWidth);
100 Pixel* dstLine1 = dst.acquireLine(dstY + 1);
101 blend(dstLine0, dstLine2, dstLine1, dstWidth);
103 dst.releaseLine(dstY + 0, dstLine0);
104 dst.releaseLine(dstY + 1, dstLine1);
105 dst.releaseLine(dstY + 2, dstLine2);
109 template <
class Pixel>
111 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
115 doScale1<Pixel>(src, srcStartY, srcEndY, srcWidth,
116 dst, dstStartY, dstEndY, op);
119 template <
class Pixel>
121 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
125 doScaleDV<Pixel>(src, srcStartY, srcEndY, srcWidth,
126 dst, dstStartY, dstEndY, pixelOps, op);
129 template <
class Pixel>
131 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
135 doScale1<Pixel>(src, srcStartY, srcEndY, srcWidth,
136 dst, dstStartY, dstEndY, op);
139 template <
class Pixel>
141 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
145 doScaleDV<Pixel>(src, srcStartY, srcEndY, srcWidth,
146 dst, dstStartY, dstEndY, pixelOps, op);
149 template <
class Pixel>
151 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
155 doScale1<Pixel>(src, srcStartY, srcEndY, srcWidth,
156 dst, dstStartY, dstEndY, op);
159 template <
class Pixel>
161 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
165 doScaleDV<Pixel>(src, srcStartY, srcEndY, srcWidth,
166 dst, dstStartY, dstEndY, pixelOps, op);
169 template <
class Pixel>
171 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
175 doScale1<Pixel>(src, srcStartY, srcEndY, srcWidth,
176 dst, dstStartY, dstEndY, op);
179 template <
class Pixel>
181 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
185 doScaleDV<Pixel>(src, srcStartY, srcEndY, srcWidth,
186 dst, dstStartY, dstEndY, pixelOps, op);
189 template <
class Pixel>
191 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
195 doScale1<Pixel>(src, srcStartY, srcEndY, srcWidth,
196 dst, dstStartY, dstEndY, op);
199 template <
class Pixel>
201 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
205 doScaleDV<Pixel>(src, srcStartY, srcEndY, srcWidth,
206 dst, dstStartY, dstEndY, pixelOps, op);
209 template <
class Pixel>
211 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
215 doScale1<Pixel>(src, srcStartY, srcEndY, srcWidth,
216 dst, dstStartY, dstEndY, op);
219 template <
class Pixel>
221 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
225 doScaleDV<Pixel>(src, srcStartY, srcEndY, srcWidth,
226 dst, dstStartY, dstEndY, pixelOps, op);
229 template <
class Pixel>
231 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
237 scaleBlank1to3(src, srcStartY, srcEndY,
238 dst, dstStartY, dstEndY);
241 scale2x1to9x3(src, srcStartY, srcEndY, srcWidth,
242 dst, dstStartY, dstEndY);
245 scale1x1to3x3(src, srcStartY, srcEndY, srcWidth,
246 dst, dstStartY, dstEndY);
249 scale4x1to9x3(src, srcStartY, srcEndY, srcWidth,
250 dst, dstStartY, dstEndY);
253 scale2x1to3x3(src, srcStartY, srcEndY, srcWidth,
254 dst, dstStartY, dstEndY);
257 scale8x1to9x3(src, srcStartY, srcEndY, srcWidth,
258 dst, dstStartY, dstEndY);
261 scale4x1to3x3(src, srcStartY, srcEndY, srcWidth,
262 dst, dstStartY, dstEndY);
271 scaleBlank2to3(src, srcStartY, srcEndY,
272 dst, dstStartY, dstEndY);
275 scale2x2to9x3(src, srcStartY, srcEndY, srcWidth,
276 dst, dstStartY, dstEndY);
279 scale1x2to3x3(src, srcStartY, srcEndY, srcWidth,
280 dst, dstStartY, dstEndY);
283 scale4x2to9x3(src, srcStartY, srcEndY, srcWidth,
284 dst, dstStartY, dstEndY);
287 scale2x2to3x3(src, srcStartY, srcEndY, srcWidth,
288 dst, dstStartY, dstEndY);
291 scale8x2to9x3(src, srcStartY, srcEndY, srcWidth,
292 dst, dstStartY, dstEndY);
295 scale4x2to3x3(src, srcStartY, srcEndY, srcWidth,
296 dst, dstStartY, dstEndY);
304 template <
class Pixel>
306 unsigned srcStartY,
unsigned srcEndY,
unsigned srcWidth,
311 dst, *superImpose, pixelOps);
312 dispatchScale(src, srcStartY, srcEndY, srcWidth,
313 dst2, dstStartY, dstEndY);
315 dispatchScale(src, srcStartY, srcEndY, srcWidth,
316 dst, dstStartY, dstEndY);