rlm@1: #include "../Port.h" rlm@1: rlm@1: extern u32 RGB_LOW_BITS_MASK; rlm@1: rlm@1: void Scanlines(u8 *srcPtr, u32 srcPitch, u8 *, rlm@1: u8 *dstPtr, u32 dstPitch, int width, int height) rlm@1: { rlm@1: u8 *nextLine, *finish; rlm@1: rlm@1: nextLine = dstPtr + dstPitch; rlm@1: rlm@1: do rlm@1: { rlm@1: u32 *bP = (u32 *) srcPtr; rlm@1: u32 *dP = (u32 *) dstPtr; rlm@1: u32 *nL = (u32 *) nextLine; rlm@1: u32 currentPixel; rlm@1: u32 nextPixel; rlm@1: rlm@1: finish = (u8 *) bP + ((width + 2) << 1); rlm@1: nextPixel = *bP++; rlm@1: rlm@1: do rlm@1: { rlm@1: currentPixel = nextPixel; rlm@1: nextPixel = *bP++; rlm@1: u32 colorA, colorB; rlm@1: rlm@1: #ifdef WORDS_BIGENDIAN rlm@1: colorA = currentPixel >> 16; rlm@1: colorB = currentPixel & 0xffff; rlm@1: #else rlm@1: colorA = currentPixel & 0xffff; rlm@1: colorB = currentPixel >> 16; rlm@1: #endif rlm@1: rlm@1: *(dP) = colorA | colorA << 16; rlm@1: *(nL) = 0; rlm@1: rlm@1: #ifdef WORDS_BIGENDIAN rlm@1: colorA = nextPixel >> 16; rlm@1: #else rlm@1: colorA = nextPixel & 0xffff; rlm@1: #endif rlm@1: rlm@1: *(dP + 1) = colorB | (colorB << 16); rlm@1: *(nL + 1) = 0; rlm@1: rlm@1: dP += 2; rlm@1: nL += 2; rlm@1: } rlm@1: while ((u8 *) bP < finish); rlm@1: rlm@1: srcPtr += srcPitch; rlm@1: dstPtr += dstPitch << 1; rlm@1: nextLine += dstPitch << 1; rlm@1: } rlm@1: while (--height); rlm@1: } rlm@1: rlm@1: void Scanlines32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, rlm@1: u8 *dstPtr, u32 dstPitch, int width, int height) rlm@1: { rlm@1: u8 *nextLine, *finish; rlm@1: rlm@1: nextLine = dstPtr + dstPitch; rlm@1: rlm@1: do rlm@1: { rlm@1: u32 *bP = (u32 *) srcPtr; rlm@1: u32 *dP = (u32 *) dstPtr; rlm@1: u32 *nL = (u32 *) nextLine; rlm@1: u32 currentPixel; rlm@1: u32 nextPixel; rlm@1: rlm@1: finish = (u8 *) bP + ((width + 1) << 2); rlm@1: nextPixel = *bP++; rlm@1: rlm@1: do rlm@1: { rlm@1: currentPixel = nextPixel; rlm@1: nextPixel = *bP++; rlm@1: rlm@1: u32 colorA, colorB; rlm@1: rlm@1: colorA = currentPixel; rlm@1: colorB = nextPixel; rlm@1: rlm@1: *(dP) = colorA; rlm@1: *(dP + 1) = colorA; rlm@1: *(nL) = 0; rlm@1: *(nL + 1) = 0; rlm@1: rlm@1: *(dP + 2) = colorB; rlm@1: *(dP + 3) = colorB; rlm@1: *(nL + 2) = 0; rlm@1: *(nL + 3) = 0; rlm@1: rlm@1: nextPixel = *bP++; rlm@1: rlm@1: dP += 4; rlm@1: nL += 4; rlm@1: } rlm@1: while ((u8 *) bP < finish); rlm@1: rlm@1: srcPtr += srcPitch; rlm@1: dstPtr += dstPitch << 1; rlm@1: nextLine += dstPitch << 1; rlm@1: } rlm@1: while (--height); rlm@1: } rlm@1: rlm@1: void ScanlinesTV(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, rlm@1: u8 *dstPtr, u32 dstPitch, int width, int height) rlm@1: { rlm@1: u8 *nextLine, *finish; rlm@1: u32 colorMask = ~(RGB_LOW_BITS_MASK | (RGB_LOW_BITS_MASK << 16)); rlm@1: rlm@1: nextLine = dstPtr + dstPitch; rlm@1: rlm@1: do rlm@1: { rlm@1: u32 *bP = (u32 *) srcPtr; rlm@1: u32 *dP = (u32 *) dstPtr; rlm@1: u32 *nL = (u32 *) nextLine; rlm@1: u32 currentPixel; rlm@1: u32 nextPixel; rlm@1: rlm@1: finish = (u8 *) bP + ((width + 2) << 1); rlm@1: nextPixel = *bP++; rlm@1: rlm@1: do rlm@1: { rlm@1: currentPixel = nextPixel; rlm@1: nextPixel = *bP++; rlm@1: rlm@1: u32 colorA, colorB; rlm@1: rlm@1: #ifdef WORDS_BIGENDIAN rlm@1: colorA = currentPixel >> 16; rlm@1: colorB = currentPixel & 0xFFFF; rlm@1: #else rlm@1: colorA = currentPixel & 0xFFFF; rlm@1: colorB = currentPixel >> 16; rlm@1: #endif rlm@1: rlm@1: *(dP) = colorA = colorA | ((((colorA & colorMask) >> 1) + rlm@1: ((colorB & colorMask) >> 1))) << 16; rlm@1: colorA = ((colorA & colorMask) >> 1); rlm@1: colorA += ((colorA & colorMask) >> 1); rlm@1: *(nL) = colorA; rlm@1: rlm@1: colorA = nextPixel & 0xFFFF; rlm@1: rlm@1: *(dP + 1) = colorB = colorB | ((((colorA & colorMask) >> 1) + rlm@1: ((colorB & colorMask) >> 1))) << 16; rlm@1: colorB = ((colorB & colorMask) >> 1); rlm@1: colorB += ((colorB & colorMask) >> 1); rlm@1: rlm@1: *(nL + 1) = colorB; rlm@1: rlm@1: dP += 2; rlm@1: nL += 2; rlm@1: } rlm@1: while ((u8 *) bP < finish); rlm@1: rlm@1: srcPtr += srcPitch; rlm@1: dstPtr += dstPitch << 1; rlm@1: nextLine += dstPitch << 1; rlm@1: } rlm@1: while (--height); rlm@1: } rlm@1: rlm@1: void ScanlinesTV32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, rlm@1: u8 *dstPtr, u32 dstPitch, int width, int height) rlm@1: { rlm@1: u8 *nextLine, *finish; rlm@1: u32 colorMask = ~RGB_LOW_BITS_MASK; rlm@1: rlm@1: nextLine = dstPtr + dstPitch; rlm@1: rlm@1: do rlm@1: { rlm@1: u32 *bP = (u32 *) srcPtr; rlm@1: u32 *dP = (u32 *) dstPtr; rlm@1: u32 *nL = (u32 *) nextLine; rlm@1: u32 currentPixel; rlm@1: u32 nextPixel; rlm@1: rlm@1: finish = (u8 *) bP + ((width + 1) << 2); rlm@1: nextPixel = *bP++; rlm@1: rlm@1: do rlm@1: { rlm@1: currentPixel = nextPixel; rlm@1: nextPixel = *bP++; rlm@1: rlm@1: u32 colorA, colorB, temp; rlm@1: rlm@1: colorA = currentPixel; rlm@1: colorB = nextPixel; rlm@1: rlm@1: *(dP) = colorA; rlm@1: *(dP + 1) = temp = ((colorA & colorMask) >> 1) + rlm@1: ((colorB & colorMask) >> 1); rlm@1: temp = ((temp & colorMask) >> 1); rlm@1: temp += ((temp & colorMask) >> 1); rlm@1: colorA = ((colorA & colorMask) >> 1); rlm@1: colorA += ((colorA & colorMask) >> 1); rlm@1: rlm@1: *(nL) = colorA; rlm@1: *(nL + 1) = temp; rlm@1: rlm@1: dP += 2; rlm@1: nL += 2; rlm@1: } rlm@1: while ((u8 *) bP < finish); rlm@1: rlm@1: srcPtr += srcPitch; rlm@1: dstPtr += dstPitch << 1; rlm@1: nextLine += dstPitch << 1; rlm@1: } rlm@1: while (--height); rlm@1: } rlm@1: