4 static inline s16 GetResult1( u32 A, u32 B, u32 C, u32 D, u32 E )
10 if (A == C) x += 1; else if (B == C) y += 1;
11 if (A == D) x += 1; else if (B == D) y += 1;
18 static inline s16 GetResult2( u32 A, u32 B, u32 C, u32 D, u32 E)
24 if (A == C) x += 1; else if (B == C) y += 1;
25 if (A == D) x += 1; else if (B == D) y += 1;
33 static inline s16 GetResult( u32 A, u32 B, u32 C, u32 D )
39 if (A == C) x += 1; else if (B == C) y += 1;
40 if (A == D) x += 1; else if (B == D) y += 1;
47 static inline u16 INTERPOLATE4444( u16 A, u16 B)
50 return ((A & 0xEEEE) >> 1) +
51 (((B & 0xEEEE) >> 1) |
57 static inline u16 INTERPOLATE5551( u16 A, u16 B)
60 return ((A & 0xF7BC) >> 1) +
61 (((B & 0xF7BC) >> 1) |
67 static inline u32 INTERPOLATE8888( u32 A, u32 B)
70 return ((A & 0xFEFEFEFE) >> 1) +
71 (((B & 0xFEFEFEFE) >> 1) |
72 (A & B & 0x01010101));
77 static inline u16 Q_INTERPOLATE4444( u16 A, u16 B, u16 C, u16 D)
79 u16 x = ((A & 0xCCCC) >> 2) +
83 u16 y = (((A & 0x3333) +
86 (D & 0x3333)) >> 2) & 0x3333;
90 static inline u16 Q_INTERPOLATE5551( u16 A, u16 B, u16 C, u16 D)
92 u16 x = ((A & 0xE738) >> 2) +
96 u16 y = (((A & 0x18C6) +
99 (D & 0x18C6)) >> 2) & 0x18C6;
100 u16 z = ((A & 0x0001) +
103 (D & 0x0001)) > 2 ? 1 : 0;
107 static inline u32 Q_INTERPOLATE8888( u32 A, u32 B, u32 C, u32 D)
109 u32 x = ((A & 0xFCFCFCFC) >> 2) +
110 ((B & 0xFCFCFCFC) >> 2) +
111 ((C & 0xFCFCFCFC) >> 2) +
112 ((D & 0xFCFCFCFC) >> 2);
113 u32 y = (((A & 0x03030303) +
116 (D & 0x03030303)) >> 2) & 0x03030303;
120 void _2xSaI4444( u16 *srcPtr, u16 *destPtr, u16 width, u16 height, s32 clampS, s32 clampT )
122 u16 destWidth = width << 1;
123 //u16 destHeight = height << 1;
125 u32 colorA, colorB, colorC, colorD,
126 colorE, colorF, colorG, colorH,
127 colorI, colorJ, colorK, colorL,
128 colorM, colorN, colorO, colorP;
129 u32 product, product1, product2;
131 s16 row0, row1, row2, row3;
132 s16 col0, col1, col2, col3;
134 for (u16 y = 0; y < height; y++)
139 row0 = clampT ? 0 : (height - 1) * width;
150 row3 = clampT ? width : -y * width;
154 row2 = clampT ? 0 : -y * width;
155 row3 = clampT ? 0 : (1 - y) * width;
158 for (u16 x = 0; x < width; x++)
163 col0 = clampS ? 0 : width - 1;
174 col3 = clampS ? 1 : -x;
178 col2 = clampS ? 0 : -x;
179 col3 = clampS ? 0 : 1 - x;
182 //---------------------------------------
183 // Map of the pixels: I|E F|J
187 colorI = *(srcPtr + col0 + row0);
188 colorE = *(srcPtr + col1 + row0);
189 colorF = *(srcPtr + col2 + row0);
190 colorJ = *(srcPtr + col3 + row0);
192 colorG = *(srcPtr + col0 + row1);
193 colorA = *(srcPtr + col1 + row1);
194 colorB = *(srcPtr + col2 + row1);
195 colorK = *(srcPtr + col3 + row1);
197 colorH = *(srcPtr + col0 + row2);
198 colorC = *(srcPtr + col1 + row2);
199 colorD = *(srcPtr + col2 + row2);
200 colorL = *(srcPtr + col3 + row2);
202 colorM = *(srcPtr + col0 + row3);
203 colorN = *(srcPtr + col1 + row3);
204 colorO = *(srcPtr + col2 + row3);
205 colorP = *(srcPtr + col3 + row3);
207 if ((colorA == colorD) && (colorB != colorC))
209 if ( ((colorA == colorE) && (colorB == colorL)) ||
210 ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ)) )
213 product = INTERPOLATE4444(colorA, colorB);
215 if (((colorA == colorG) && (colorC == colorO)) ||
216 ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM)) )
219 product1 = INTERPOLATE4444(colorA, colorC);
223 else if ((colorB == colorC) && (colorA != colorD))
225 if (((colorB == colorF) && (colorA == colorH)) ||
226 ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI)) )
229 product = INTERPOLATE4444(colorA, colorB);
231 if (((colorC == colorH) && (colorA == colorF)) ||
232 ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI)) )
235 product1 = INTERPOLATE4444(colorA, colorC);
238 else if ((colorA == colorD) && (colorB == colorC))
240 if (colorA == colorB)
249 product1 = INTERPOLATE4444(colorA, colorC);
250 product = INTERPOLATE4444(colorA, colorB);
252 r += GetResult1 (colorA, colorB, colorG, colorE, colorI);
253 r += GetResult2 (colorB, colorA, colorK, colorF, colorJ);
254 r += GetResult2 (colorB, colorA, colorH, colorN, colorM);
255 r += GetResult1 (colorA, colorB, colorL, colorO, colorP);
262 product2 = Q_INTERPOLATE4444(colorA, colorB, colorC, colorD);
267 product2 = Q_INTERPOLATE4444(colorA, colorB, colorC, colorD);
269 if ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ))
271 else if ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI))
274 product = INTERPOLATE4444(colorA, colorB);
276 if ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM))
278 else if ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI))
281 product1 = INTERPOLATE4444(colorA, colorC);
285 destPtr[1] = product;
286 destPtr[destWidth] = product1;
287 destPtr[destWidth + 1] = product2;
292 destPtr += destWidth;
296 void _2xSaI5551( u16 *srcPtr, u16 *destPtr, u16 width, u16 height, s32 clampS, s32 clampT )
298 u16 destWidth = width << 1;
299 //u16 destHeight = height << 1;
301 u32 colorA, colorB, colorC, colorD,
302 colorE, colorF, colorG, colorH,
303 colorI, colorJ, colorK, colorL,
304 colorM, colorN, colorO, colorP;
305 u32 product, product1, product2;
307 s16 row0, row1, row2, row3;
308 s16 col0, col1, col2, col3;
310 for (u16 y = 0; y < height; y++)
315 row0 = clampT ? 0 : (height - 1) * width;
326 row3 = clampT ? width : -y * width;
330 row2 = clampT ? 0 : -y * width;
331 row3 = clampT ? 0 : (1 - y) * width;
334 for (u16 x = 0; x < width; x++)
339 col0 = clampS ? 0 : width - 1;
350 col3 = clampS ? 1 : -x;
354 col2 = clampS ? 0 : -x;
355 col3 = clampS ? 0 : 1 - x;
358 //---------------------------------------
359 // Map of the pixels: I|E F|J
363 colorI = *(srcPtr + col0 + row0);
364 colorE = *(srcPtr + col1 + row0);
365 colorF = *(srcPtr + col2 + row0);
366 colorJ = *(srcPtr + col3 + row0);
368 colorG = *(srcPtr + col0 + row1);
369 colorA = *(srcPtr + col1 + row1);
370 colorB = *(srcPtr + col2 + row1);
371 colorK = *(srcPtr + col3 + row1);
373 colorH = *(srcPtr + col0 + row2);
374 colorC = *(srcPtr + col1 + row2);
375 colorD = *(srcPtr + col2 + row2);
376 colorL = *(srcPtr + col3 + row2);
378 colorM = *(srcPtr + col0 + row3);
379 colorN = *(srcPtr + col1 + row3);
380 colorO = *(srcPtr + col2 + row3);
381 colorP = *(srcPtr + col3 + row3);
383 if ((colorA == colorD) && (colorB != colorC))
385 if ( ((colorA == colorE) && (colorB == colorL)) ||
386 ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ)) )
389 product = INTERPOLATE5551(colorA, colorB);
391 if (((colorA == colorG) && (colorC == colorO)) ||
392 ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM)) )
395 product1 = INTERPOLATE5551(colorA, colorC);
399 else if ((colorB == colorC) && (colorA != colorD))
401 if (((colorB == colorF) && (colorA == colorH)) ||
402 ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI)) )
405 product = INTERPOLATE5551(colorA, colorB);
407 if (((colorC == colorH) && (colorA == colorF)) ||
408 ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI)) )
411 product1 = INTERPOLATE5551(colorA, colorC);
414 else if ((colorA == colorD) && (colorB == colorC))
416 if (colorA == colorB)
425 product1 = INTERPOLATE5551(colorA, colorC);
426 product = INTERPOLATE5551(colorA, colorB);
428 r += GetResult1 (colorA, colorB, colorG, colorE, colorI);
429 r += GetResult2 (colorB, colorA, colorK, colorF, colorJ);
430 r += GetResult2 (colorB, colorA, colorH, colorN, colorM);
431 r += GetResult1 (colorA, colorB, colorL, colorO, colorP);
438 product2 = Q_INTERPOLATE5551(colorA, colorB, colorC, colorD);
443 product2 = Q_INTERPOLATE5551(colorA, colorB, colorC, colorD);
445 if ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ))
447 else if ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI))
450 product = INTERPOLATE5551(colorA, colorB);
452 if ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM))
454 else if ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI))
457 product1 = INTERPOLATE5551(colorA, colorC);
461 destPtr[1] = product;
462 destPtr[destWidth] = product1;
463 destPtr[destWidth + 1] = product2;
468 destPtr += destWidth;
472 void _2xSaI8888( u32 *srcPtr, u32 *destPtr, u16 width, u16 height, s32 clampS, s32 clampT )
474 u16 destWidth = width << 1;
475 //u16 destHeight = height << 1;
477 u32 colorA, colorB, colorC, colorD,
478 colorE, colorF, colorG, colorH,
479 colorI, colorJ, colorK, colorL,
480 colorM, colorN, colorO, colorP;
481 u32 product, product1, product2;
483 s16 row0, row1, row2, row3;
484 s16 col0, col1, col2, col3;
486 for (u16 y = 0; y < height; y++)
491 row0 = clampT ? 0 : (height - 1) * width;
502 row3 = clampT ? width : -y * width;
506 row2 = clampT ? 0 : -y * width;
507 row3 = clampT ? 0 : (1 - y) * width;
510 for (u16 x = 0; x < width; x++)
515 col0 = clampS ? 0 : width - 1;
526 col3 = clampS ? 1 : -x;
530 col2 = clampS ? 0 : -x;
531 col3 = clampS ? 0 : 1 - x;
534 //---------------------------------------
535 // Map of the pixels: I|E F|J
539 colorI = *(srcPtr + col0 + row0);
540 colorE = *(srcPtr + col1 + row0);
541 colorF = *(srcPtr + col2 + row0);
542 colorJ = *(srcPtr + col3 + row0);
544 colorG = *(srcPtr + col0 + row1);
545 colorA = *(srcPtr + col1 + row1);
546 colorB = *(srcPtr + col2 + row1);
547 colorK = *(srcPtr + col3 + row1);
549 colorH = *(srcPtr + col0 + row2);
550 colorC = *(srcPtr + col1 + row2);
551 colorD = *(srcPtr + col2 + row2);
552 colorL = *(srcPtr + col3 + row2);
554 colorM = *(srcPtr + col0 + row3);
555 colorN = *(srcPtr + col1 + row3);
556 colorO = *(srcPtr + col2 + row3);
557 colorP = *(srcPtr + col3 + row3);
559 if ((colorA == colorD) && (colorB != colorC))
561 if ( ((colorA == colorE) && (colorB == colorL)) ||
562 ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ)) )
565 product = INTERPOLATE8888(colorA, colorB);
567 if (((colorA == colorG) && (colorC == colorO)) ||
568 ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM)) )
571 product1 = INTERPOLATE8888(colorA, colorC);
575 else if ((colorB == colorC) && (colorA != colorD))
577 if (((colorB == colorF) && (colorA == colorH)) ||
578 ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI)) )
581 product = INTERPOLATE8888(colorA, colorB);
583 if (((colorC == colorH) && (colorA == colorF)) ||
584 ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI)) )
587 product1 = INTERPOLATE8888(colorA, colorC);
590 else if ((colorA == colorD) && (colorB == colorC))
592 if (colorA == colorB)
601 product1 = INTERPOLATE8888(colorA, colorC);
602 product = INTERPOLATE8888(colorA, colorB);
604 r += GetResult1 (colorA, colorB, colorG, colorE, colorI);
605 r += GetResult2 (colorB, colorA, colorK, colorF, colorJ);
606 r += GetResult2 (colorB, colorA, colorH, colorN, colorM);
607 r += GetResult1 (colorA, colorB, colorL, colorO, colorP);
614 product2 = Q_INTERPOLATE8888(colorA, colorB, colorC, colorD);
619 product2 = Q_INTERPOLATE8888(colorA, colorB, colorC, colorD);
621 if ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ))
623 else if ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI))
626 product = INTERPOLATE8888(colorA, colorB);
628 if ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM))
630 else if ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI))
633 product1 = INTERPOLATE8888(colorA, colorC);
637 destPtr[1] = product;
638 destPtr[destWidth] = product1;
639 destPtr[destWidth + 1] = product2;
644 destPtr += destWidth;