< prev index next >

src/java.desktop/share/native/libmlib_image/mlib_c_ImageAffine_BC.c

Print this page
rev 59383 : [mq]: final

*** 1,7 **** /* ! * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 69,600 **** #define FUN_NAME(CHAN) mlib_ImageAffine_u8_##CHAN##_bc #define FILTER_BITS 8 /***************************************************************/ ! #ifdef __sparc /* for SPARC, using floating-point multiplies is faster */ ! ! #undef FILTER_ELEM_BITS ! #define FILTER_ELEM_BITS 4 ! ! #ifdef MLIB_USE_FTOI_CLAMPING ! ! #define SAT8(DST) \ ! DST = ((mlib_s32)(val0 - sat) >> 24) ^ 0x80 ! ! #else ! ! #define SAT8(DST) \ ! val0 -= sat; \ ! if (val0 >= MLIB_S32_MAX) \ ! DST = MLIB_U8_MAX; \ ! else if (val0 <= MLIB_S32_MIN) \ ! DST = MLIB_U8_MIN; \ ! else \ ! DST = ((mlib_s32)val0 >> 24) ^ 0x80 ! ! #endif /* MLIB_USE_FTOI_CLAMPING */ ! ! /***************************************************************/ ! mlib_status FUN_NAME(1ch)(mlib_affine_param *param) ! { ! DECLAREVAR_BC(); ! DTYPE *dstLineEnd; ! mlib_d64 sat = (mlib_d64) 0x7F800000; ! const mlib_f32 *mlib_filters_table; ! ! if (filter == MLIB_BICUBIC) { ! mlib_filters_table = mlib_filters_u8f_bc; ! } ! else { ! mlib_filters_table = mlib_filters_u8f_bc2; ! } ! ! for (j = yStart; j <= yFinish; j++) { ! mlib_d64 xf0, xf1, xf2, xf3; ! mlib_d64 yf0, yf1, yf2, yf3; ! mlib_d64 c0, c1, c2, c3, val0; ! mlib_s32 filterpos; ! mlib_f32 *fptr; ! mlib_u8 s0, s1, s2, s3; ! ! CLIP(1); ! dstLineEnd = (DTYPE *) dstData + xRight; ! ! filterpos = (X >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! filterpos = (Y >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! xSrc = (X >> MLIB_SHIFT) - 1; ! ySrc = (Y >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + xSrc; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[1]; ! s2 = srcPixelPtr[2]; ! s3 = srcPixelPtr[3]; ! ! #ifdef __SUNPRO_C ! #pragma pipeloop(0) ! #endif /* __SUNPRO_C */ ! for (; dstPixelPtr <= (dstLineEnd - 1); dstPixelPtr++) { ! X += dX; ! Y += dY; ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[1]] * xf1 + ! mlib_U82D64[srcPixelPtr[2]] * xf2 + mlib_U82D64[srcPixelPtr[3]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[1]] * xf1 + ! mlib_U82D64[srcPixelPtr[2]] * xf2 + mlib_U82D64[srcPixelPtr[3]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[1]] * xf1 + ! mlib_U82D64[srcPixelPtr[2]] * xf2 + mlib_U82D64[srcPixelPtr[3]] * xf3); ! ! filterpos = (X >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! filterpos = (Y >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! SAT8(dstPixelPtr[0]); ! ! xSrc = (X >> MLIB_SHIFT) - 1; ! ySrc = (Y >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + xSrc; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[1]; ! s2 = srcPixelPtr[2]; ! s3 = srcPixelPtr[3]; ! } ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[1]] * xf1 + ! mlib_U82D64[srcPixelPtr[2]] * xf2 + mlib_U82D64[srcPixelPtr[3]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[1]] * xf1 + ! mlib_U82D64[srcPixelPtr[2]] * xf2 + mlib_U82D64[srcPixelPtr[3]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[1]] * xf1 + ! mlib_U82D64[srcPixelPtr[2]] * xf2 + mlib_U82D64[srcPixelPtr[3]] * xf3); ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! SAT8(dstPixelPtr[0]); ! } ! ! return MLIB_SUCCESS; ! } ! ! /***************************************************************/ ! mlib_status FUN_NAME(2ch)(mlib_affine_param *param) ! { ! DECLAREVAR_BC(); ! DTYPE *dstLineEnd; ! mlib_d64 sat = (mlib_d64) 0x7F800000; ! const mlib_f32 *mlib_filters_table; ! ! if (filter == MLIB_BICUBIC) { ! mlib_filters_table = mlib_filters_u8f_bc; ! } ! else { ! mlib_filters_table = mlib_filters_u8f_bc2; ! } ! ! for (j = yStart; j <= yFinish; j++) { ! mlib_d64 xf0, xf1, xf2, xf3; ! mlib_d64 yf0, yf1, yf2, yf3; ! mlib_d64 c0, c1, c2, c3, val0; ! mlib_s32 filterpos, k; ! mlib_f32 *fptr; ! mlib_u8 s0, s1, s2, s3; ! ! CLIP(2); ! dstLineEnd = (DTYPE *) dstData + 2 * xRight; ! ! for (k = 0; k < 2; k++) { ! mlib_s32 X1 = X; ! mlib_s32 Y1 = Y; ! DTYPE *dPtr = dstPixelPtr + k; ! ! filterpos = (X1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! filterpos = (Y1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! xSrc = (X1 >> MLIB_SHIFT) - 1; ! ySrc = (Y1 >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + 2 * xSrc + k; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[2]; ! s2 = srcPixelPtr[4]; ! s3 = srcPixelPtr[6]; ! ! #ifdef __SUNPRO_C ! #pragma pipeloop(0) ! #endif /* __SUNPRO_C */ ! for (; dPtr <= (dstLineEnd - 1); dPtr += 2) { ! X1 += dX; ! Y1 += dY; ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[2]] * xf1 + ! mlib_U82D64[srcPixelPtr[4]] * xf2 + mlib_U82D64[srcPixelPtr[6]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[2]] * xf1 + ! mlib_U82D64[srcPixelPtr[4]] * xf2 + mlib_U82D64[srcPixelPtr[6]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[2]] * xf1 + ! mlib_U82D64[srcPixelPtr[4]] * xf2 + mlib_U82D64[srcPixelPtr[6]] * xf3); ! ! filterpos = (X1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! filterpos = (Y1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! SAT8(dPtr[0]); ! ! xSrc = (X1 >> MLIB_SHIFT) - 1; ! ySrc = (Y1 >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + 2 * xSrc + k; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[2]; ! s2 = srcPixelPtr[4]; ! s3 = srcPixelPtr[6]; ! } ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[2]] * xf1 + ! mlib_U82D64[srcPixelPtr[4]] * xf2 + mlib_U82D64[srcPixelPtr[6]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[2]] * xf1 + ! mlib_U82D64[srcPixelPtr[4]] * xf2 + mlib_U82D64[srcPixelPtr[6]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[2]] * xf1 + ! mlib_U82D64[srcPixelPtr[4]] * xf2 + mlib_U82D64[srcPixelPtr[6]] * xf3); ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! SAT8(dPtr[0]); ! } ! } ! ! return MLIB_SUCCESS; ! } ! ! /***************************************************************/ ! mlib_status FUN_NAME(3ch)(mlib_affine_param *param) ! { ! DECLAREVAR_BC(); ! DTYPE *dstLineEnd; ! mlib_d64 sat = (mlib_d64) 0x7F800000; ! const mlib_f32 *mlib_filters_table; ! ! if (filter == MLIB_BICUBIC) { ! mlib_filters_table = mlib_filters_u8f_bc; ! } ! else { ! mlib_filters_table = mlib_filters_u8f_bc2; ! } ! ! for (j = yStart; j <= yFinish; j++) { ! mlib_d64 xf0, xf1, xf2, xf3; ! mlib_d64 yf0, yf1, yf2, yf3; ! mlib_d64 c0, c1, c2, c3, val0; ! mlib_s32 filterpos, k; ! mlib_f32 *fptr; ! mlib_u8 s0, s1, s2, s3; ! ! CLIP(3); ! dstLineEnd = (DTYPE *) dstData + 3 * xRight; ! ! for (k = 0; k < 3; k++) { ! mlib_s32 X1 = X; ! mlib_s32 Y1 = Y; ! DTYPE *dPtr = dstPixelPtr + k; ! ! filterpos = (X1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! filterpos = (Y1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! xSrc = (X1 >> MLIB_SHIFT) - 1; ! ySrc = (Y1 >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + 3 * xSrc + k; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[3]; ! s2 = srcPixelPtr[6]; ! s3 = srcPixelPtr[9]; ! ! #ifdef __SUNPRO_C ! #pragma pipeloop(0) ! #endif /* __SUNPRO_C */ ! for (; dPtr <= (dstLineEnd - 1); dPtr += 3) { ! X1 += dX; ! Y1 += dY; ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[3]] * xf1 + ! mlib_U82D64[srcPixelPtr[6]] * xf2 + mlib_U82D64[srcPixelPtr[9]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[3]] * xf1 + ! mlib_U82D64[srcPixelPtr[6]] * xf2 + mlib_U82D64[srcPixelPtr[9]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[3]] * xf1 + ! mlib_U82D64[srcPixelPtr[6]] * xf2 + mlib_U82D64[srcPixelPtr[9]] * xf3); ! ! filterpos = (X1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! filterpos = (Y1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! SAT8(dPtr[0]); ! ! xSrc = (X1 >> MLIB_SHIFT) - 1; ! ySrc = (Y1 >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + 3 * xSrc + k; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[3]; ! s2 = srcPixelPtr[6]; ! s3 = srcPixelPtr[9]; ! } ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[3]] * xf1 + ! mlib_U82D64[srcPixelPtr[6]] * xf2 + mlib_U82D64[srcPixelPtr[9]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[3]] * xf1 + ! mlib_U82D64[srcPixelPtr[6]] * xf2 + mlib_U82D64[srcPixelPtr[9]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[3]] * xf1 + ! mlib_U82D64[srcPixelPtr[6]] * xf2 + mlib_U82D64[srcPixelPtr[9]] * xf3); ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! SAT8(dPtr[0]); ! } ! } ! ! return MLIB_SUCCESS; ! } ! ! /***************************************************************/ ! mlib_status FUN_NAME(4ch)(mlib_affine_param *param) ! { ! DECLAREVAR_BC(); ! DTYPE *dstLineEnd; ! mlib_d64 sat = (mlib_d64) 0x7F800000; ! const mlib_f32 *mlib_filters_table; ! ! if (filter == MLIB_BICUBIC) { ! mlib_filters_table = mlib_filters_u8f_bc; ! } ! else { ! mlib_filters_table = mlib_filters_u8f_bc2; ! } ! ! for (j = yStart; j <= yFinish; j++) { ! mlib_d64 xf0, xf1, xf2, xf3; ! mlib_d64 yf0, yf1, yf2, yf3; ! mlib_d64 c0, c1, c2, c3, val0; ! mlib_s32 filterpos, k; ! mlib_f32 *fptr; ! mlib_u8 s0, s1, s2, s3; ! ! CLIP(4); ! dstLineEnd = (DTYPE *) dstData + 4 * xRight; ! ! for (k = 0; k < 4; k++) { ! mlib_s32 X1 = X; ! mlib_s32 Y1 = Y; ! DTYPE *dPtr = dstPixelPtr + k; ! ! filterpos = (X1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! filterpos = (Y1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! xSrc = (X1 >> MLIB_SHIFT) - 1; ! ySrc = (Y1 >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + 4 * xSrc + k; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[4]; ! s2 = srcPixelPtr[8]; ! s3 = srcPixelPtr[12]; ! ! #ifdef __SUNPRO_C ! #pragma pipeloop(0) ! #endif /* __SUNPRO_C */ ! for (; dPtr <= (dstLineEnd - 1); dPtr += 4) { ! X1 += dX; ! Y1 += dY; ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[4]] * xf1 + ! mlib_U82D64[srcPixelPtr[8]] * xf2 + mlib_U82D64[srcPixelPtr[12]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[4]] * xf1 + ! mlib_U82D64[srcPixelPtr[8]] * xf2 + mlib_U82D64[srcPixelPtr[12]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[4]] * xf1 + ! mlib_U82D64[srcPixelPtr[8]] * xf2 + mlib_U82D64[srcPixelPtr[12]] * xf3); ! ! filterpos = (X1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! xf0 = fptr[0]; ! xf1 = fptr[1]; ! xf2 = fptr[2]; ! xf3 = fptr[3]; ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! filterpos = (Y1 >> FILTER_SHIFT) & FILTER_MASK; ! fptr = (mlib_f32 *) ((mlib_u8 *) mlib_filters_table + filterpos); ! ! yf0 = fptr[0]; ! yf1 = fptr[1]; ! yf2 = fptr[2]; ! yf3 = fptr[3]; ! ! SAT8(dPtr[0]); ! ! xSrc = (X1 >> MLIB_SHIFT) - 1; ! ySrc = (Y1 >> MLIB_SHIFT) - 1; ! ! srcPixelPtr = ((DTYPE **) lineAddr)[ySrc] + 4 * xSrc + k; ! s0 = srcPixelPtr[0]; ! s1 = srcPixelPtr[4]; ! s2 = srcPixelPtr[8]; ! s3 = srcPixelPtr[12]; ! } ! ! c0 = (mlib_U82D64[s0] * xf0 + mlib_U82D64[s1] * xf1 + ! mlib_U82D64[s2] * xf2 + mlib_U82D64[s3] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c1 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[4]] * xf1 + ! mlib_U82D64[srcPixelPtr[8]] * xf2 + mlib_U82D64[srcPixelPtr[12]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c2 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[4]] * xf1 + ! mlib_U82D64[srcPixelPtr[8]] * xf2 + mlib_U82D64[srcPixelPtr[12]] * xf3); ! srcPixelPtr = (DTYPE *) ((mlib_addr) srcPixelPtr + srcYStride); ! c3 = (mlib_U82D64[srcPixelPtr[0]] * xf0 + mlib_U82D64[srcPixelPtr[4]] * xf1 + ! mlib_U82D64[srcPixelPtr[8]] * xf2 + mlib_U82D64[srcPixelPtr[12]] * xf3); ! ! val0 = (c0 * yf0 + c1 * yf1 + c2 * yf2 + c3 * yf3); ! ! SAT8(dPtr[0]); ! } ! } ! ! return MLIB_SUCCESS; ! } ! ! #else /* for x86, using integer multiplies is faster */ #define SHIFT_X 12 #define ROUND_X 0 /* (1 << (SHIFT_X - 1)) */ #define SHIFT_Y (14 + 14 - SHIFT_X) --- 69,79 ---- #define FUN_NAME(CHAN) mlib_ImageAffine_u8_##CHAN##_bc #define FILTER_BITS 8 /***************************************************************/ ! /* for x86, using integer multiplies is faster */ #define SHIFT_X 12 #define ROUND_X 0 /* (1 << (SHIFT_X - 1)) */ #define SHIFT_Y (14 + 14 - SHIFT_X)
*** 668,680 **** s0 = srcPixelPtr[0]; s1 = srcPixelPtr[1]; s2 = srcPixelPtr[2]; s3 = srcPixelPtr[3]; - #ifdef __SUNPRO_C - #pragma pipeloop(0) - #endif /* __SUNPRO_C */ for (; dstPixelPtr <= (dstLineEnd - 1); dstPixelPtr++) { X += dX; Y += dY; c0 = (s0 * xf0 + s1 * xf1 + s2 * xf2 + s3 * xf3 + ROUND_X) >> SHIFT_X; --- 147,156 ----
*** 790,802 **** s0 = srcPixelPtr[0]; s1 = srcPixelPtr[2]; s2 = srcPixelPtr[4]; s3 = srcPixelPtr[6]; - #ifdef __SUNPRO_C - #pragma pipeloop(0) - #endif /* __SUNPRO_C */ for (; dPtr <= (dstLineEnd - 1); dPtr += 2) { X1 += dX; Y1 += dY; c0 = (s0 * xf0 + s1 * xf1 + s2 * xf2 + s3 * xf3 + ROUND_X) >> SHIFT_X; --- 266,275 ----
*** 913,925 **** s0 = srcPixelPtr[0]; s1 = srcPixelPtr[3]; s2 = srcPixelPtr[6]; s3 = srcPixelPtr[9]; - #ifdef __SUNPRO_C - #pragma pipeloop(0) - #endif /* __SUNPRO_C */ for (; dPtr <= (dstLineEnd - 1); dPtr += 3) { X1 += dX; Y1 += dY; c0 = (s0 * xf0 + s1 * xf1 + s2 * xf2 + s3 * xf3 + ROUND_X) >> SHIFT_X; --- 386,395 ----
*** 1036,1048 **** s0 = srcPixelPtr[0]; s1 = srcPixelPtr[4]; s2 = srcPixelPtr[8]; s3 = srcPixelPtr[12]; - #ifdef __SUNPRO_C - #pragma pipeloop(0) - #endif /* __SUNPRO_C */ for (; dPtr <= (dstLineEnd - 1); dPtr += 4) { X1 += dX; Y1 += dY; c0 = (s0 * xf0 + s1 * xf1 + s2 * xf2 + s3 * xf3 + ROUND_X) >> SHIFT_X; --- 506,515 ----
*** 1104,1111 **** } return MLIB_SUCCESS; } - #endif /* __sparc ( for SPARC, using floating-point multiplies is faster ) */ - /***************************************************************/ --- 571,576 ----
< prev index next >