< prev index next >

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

Print this page
rev 14292 : remove Index

*** 71,81 **** * image according to the bicubic2 interpolation with border pixels extend * of source image. */ #include "mlib_image.h" - #include "mlib_ImageColormap.h" #include "mlib_ImageAffine.h" /***************************************************************/ #define FLT_SHIFT_U8 4 #define FLT_MASK_U8 (((1 << 8) - 1) << 4) --- 71,80 ----
*** 216,316 **** Y += dY; \ dp += channels; \ } /***************************************************************/ - #define LUT(k, ind) plut[channels*sp[ind] + k] - - /***************************************************************/ - #define MLIB_EDGE_INDEX(ITYPE, DTYPE, size) \ - for (j = 0; j < size; j++) { \ - ySrc = ((Y - 32768) >> MLIB_SHIFT); \ - xSrc = ((X - 32768) >> MLIB_SHIFT); \ - \ - t = ((X - 32768) & MLIB_MASK) * scale; \ - u = ((Y - 32768) & MLIB_MASK) * scale; \ - \ - xDelta = (((xSrc + 1 - srcWidth )) >> MLIB_SIGN_SHIFT) & 1; \ - yDelta = (((ySrc + 1 - srcHeight)) >> MLIB_SIGN_SHIFT) & srcStride; \ - \ - xFlag = (xSrc >> (MLIB_SIGN_SHIFT - MLIB_SHIFT)); \ - xSrc = xSrc + (1 & xFlag); \ - xDelta = xDelta &~ xFlag; \ - \ - yFlag = (ySrc >> (MLIB_SIGN_SHIFT - MLIB_SHIFT)); \ - ySrc = ySrc + (1 & yFlag); \ - yDelta = yDelta &~ yFlag; \ - \ - sp = (ITYPE*)lineAddr[ySrc] + xSrc; \ - \ - for (k = 0; k < channels; k++) { \ - a00 = LUT(k, 0); \ - a01 = LUT(k, xDelta); \ - a10 = LUT(k, yDelta); \ - a11 = LUT(k, yDelta + xDelta); \ - pix0 = (a00 * (1 - t) + a01 * t) * (1 - u) + \ - (a10 * (1 - t) + a11 * t) * u; \ - \ - pbuff[k] = (mlib_s32)pix0; \ - } \ - pbuff += channels; \ - \ - X += dX; \ - Y += dY; \ - } - - /***************************************************************/ - #define MLIB_EDGE_INDEX_u8i(ITYPE, Left, Right) { \ - mlib_u8 *pbuff = buff; \ - \ - size = Right - Left; \ - \ - MLIB_EDGE_INDEX(ITYPE, mlib_u8, size); \ - \ - dp = (ITYPE*)data + Left; \ - \ - if (channels == 3) { \ - if (sizeof(ITYPE) == 1) { \ - mlib_ImageColorTrue2IndexLine_U8_U8_3 (buff, (void*)dp, size, colormap); \ - } else { \ - mlib_ImageColorTrue2IndexLine_U8_S16_3(buff, (void*)dp, size, colormap); \ - } \ - } else { \ - if (sizeof(ITYPE) == 1) { \ - mlib_ImageColorTrue2IndexLine_U8_U8_4 (buff, (void*)dp, size, colormap); \ - } else { \ - mlib_ImageColorTrue2IndexLine_U8_S16_4(buff, (void*)dp, size, colormap); \ - } \ - } \ - } - - /***************************************************************/ - #define MLIB_EDGE_INDEX_s16i(ITYPE, Left, Right) { \ - mlib_s16 *pbuff = buff; \ - \ - size = Right - Left; \ - \ - MLIB_EDGE_INDEX(ITYPE, mlib_s16, size); \ - \ - dp = (ITYPE*)data + Left; \ - \ - if (channels == 3) { \ - if (sizeof(ITYPE) == 1) { \ - mlib_ImageColorTrue2IndexLine_S16_U8_3 (buff, (void*)dp, size, colormap); \ - } else { \ - mlib_ImageColorTrue2IndexLine_S16_S16_3(buff, (void*)dp, size, colormap); \ - } \ - } else { \ - if (sizeof(ITYPE) == 1) { \ - mlib_ImageColorTrue2IndexLine_S16_U8_4 (buff, (void*)dp, size, colormap); \ - } else { \ - mlib_ImageColorTrue2IndexLine_S16_S16_4(buff, (void*)dp, size, colormap); \ - } \ - } \ - } - - /***************************************************************/ #define GET_FLT_TBL(X, xf0, xf1, xf2, xf3) \ filterpos = ((X - 32768) >> flt_shift) & flt_mask; \ fptr = (mlib_f32 *) ((mlib_u8 *)flt_tbl + filterpos); \ \ xf0 = fptr[0]; \ --- 215,224 ----
*** 422,472 **** /***************************************************************/ #define MLIB_EDGE_BC2(TYPE, Left, Right) \ MLIB_EDGE_BC_LINE(TYPE, Left, Right, GET_FLT_BC2) /***************************************************************/ - #define MLIB_EDGE_INDEX_BC(ITYPE, DTYPE, size) \ - for (j = 0; j < size; j++) { \ - GET_FLT_TBL(X, xf0, xf1, xf2, xf3); \ - GET_FLT_TBL(Y, yf0, yf1, yf2, yf3); \ - \ - CALC_SRC_POS(X, Y, 1, srcStride); \ - \ - sp = (ITYPE*)lineAddr[ySrc] + xSrc; \ - \ - for (k = 0; k < channels; k++) { \ - c0 = LUT(k, yDelta0 + xDelta0) * xf0 + \ - LUT(k, yDelta0 ) * xf1 + \ - LUT(k, yDelta0 + xDelta1) * xf2 + \ - LUT(k, yDelta0 + xDelta2) * xf3; \ - \ - c1 = LUT(k, xDelta0) * xf0 + \ - LUT(k, 0 ) * xf1 + \ - LUT(k, xDelta1) * xf2 + \ - LUT(k, xDelta2) * xf3; \ - \ - c2 = LUT(k, yDelta1 + xDelta0) * xf0 + \ - LUT(k, yDelta1 ) * xf1 + \ - LUT(k, yDelta1 + xDelta1) * xf2 + \ - LUT(k, yDelta1 + xDelta2) * xf3; \ - \ - c3 = LUT(k, yDelta2 + xDelta0) * xf0 + \ - LUT(k, yDelta2 ) * xf1 + \ - LUT(k, yDelta2 + xDelta1) * xf2 + \ - LUT(k, yDelta2 + xDelta2) * xf3; \ - \ - val0 = c0*yf0 + c1*yf1 + c2*yf2 + c3*yf3; \ - \ - SAT##DTYPE(pbuff[k], val0); \ - } \ - pbuff += channels; \ - \ - X += dX; \ - Y += dY; \ - } - - /***************************************************************/ #define MLIB_PROCESS_EDGES_ZERO(TYPE) { \ TYPE *dp, *dstLineEnd; \ \ for (i = yStartE; i < yStart; i++) { \ xLeftE = leftEdgesE[i]; \ --- 330,339 ----
*** 584,603 **** mlib_s32 srcHeight = mlib_ImageGetHeight(src); \ mlib_s32 srcStride = mlib_ImageGetStride(src) /***************************************************************/ void mlib_ImageAffineEdgeZero(mlib_affine_param *param, ! mlib_affine_param *param_e, ! const void *colormap) { GET_EDGE_PARAMS_ZERO(); mlib_s32 zero = 0; - if (colormap != NULL) { - zero = mlib_ImageGetLutOffset(colormap); - } - switch (type) { case MLIB_BYTE: MLIB_PROCESS_EDGES_ZERO(mlib_u8); break; --- 451,465 ---- mlib_s32 srcHeight = mlib_ImageGetHeight(src); \ mlib_s32 srcStride = mlib_ImageGetStride(src) /***************************************************************/ void mlib_ImageAffineEdgeZero(mlib_affine_param *param, ! mlib_affine_param *param_e) { GET_EDGE_PARAMS_ZERO(); mlib_s32 zero = 0; switch (type) { case MLIB_BYTE: MLIB_PROCESS_EDGES_ZERO(mlib_u8); break;
*** 652,743 **** } } /***************************************************************/ mlib_status mlib_ImageAffineEdgeExtend_BL(mlib_affine_param *param, ! mlib_affine_param *param_e, ! const void *colormap) { GET_EDGE_PARAMS(); mlib_d64 scale = 1.0 / (mlib_d64) MLIB_PREC; mlib_s32 xDelta, yDelta, xFlag, yFlag; mlib_d64 t, u, pix0; mlib_d64 a00, a01, a10, a11; - if (colormap != NULL) { - mlib_s32 max_xsize = param_e->max_xsize; - mlib_type ltype = mlib_ImageGetLutType(colormap); - mlib_d64 *plut = (mlib_d64 *) mlib_ImageGetLutDoubleData(colormap); - void *buff; - - channels = mlib_ImageGetLutChannels(colormap); - plut -= channels * mlib_ImageGetLutOffset(colormap); - - if (max_xsize == 0) { - return MLIB_SUCCESS; - } - - if (ltype == MLIB_BYTE) { - buff = mlib_malloc(channels * max_xsize); - } - else if (ltype == MLIB_SHORT) { - buff = mlib_malloc(channels * max_xsize * sizeof(mlib_s16)); - } else { - /* Unsupported type of lookup table. Report a failure */ - return MLIB_FAILURE; - } - - if (buff == NULL) - return MLIB_FAILURE; - - switch (ltype) { - case MLIB_BYTE: - switch (type) { - case MLIB_BYTE: - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_u8i, mlib_u8); - break; - - case MLIB_SHORT: - srcStride >>= 1; - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_u8i, mlib_s16); - break; - default: - /* Incompatible image type. Ignore it for now. */ - break; - } - - break; - - case MLIB_SHORT: - switch (type) { - case MLIB_BYTE: - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_s16i, mlib_u8); - break; - - case MLIB_SHORT: - srcStride >>= 1; - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_s16i, mlib_s16); - break; - default: - /* Incompatible image type. Ignore it for now. */ - break; - } - - break; - default: - /* Unsupported type of lookup table. - * Can not be here due to check on line 685, - * so just ignore it. - */ - break; - } - - mlib_free(buff); - - return MLIB_SUCCESS; - } - switch (type) { case MLIB_BYTE: MLIB_PROCESS_EDGES(MLIB_EDGE_BL, mlib_u8); break; --- 514,531 ---- } } /***************************************************************/ mlib_status mlib_ImageAffineEdgeExtend_BL(mlib_affine_param *param, ! mlib_affine_param *param_e) { GET_EDGE_PARAMS(); mlib_d64 scale = 1.0 / (mlib_d64) MLIB_PREC; mlib_s32 xDelta, yDelta, xFlag, yFlag; mlib_d64 t, u, pix0; mlib_d64 a00, a01, a10, a11; switch (type) { case MLIB_BYTE: MLIB_PROCESS_EDGES(MLIB_EDGE_BL, mlib_u8); break;
*** 773,808 **** return MLIB_SUCCESS; } /***************************************************************/ - #undef MLIB_EDGE_INDEX - #define MLIB_EDGE_INDEX MLIB_EDGE_INDEX_BC - mlib_status mlib_ImageAffineEdgeExtend_BC(mlib_affine_param *param, ! mlib_affine_param *param_e, ! const void *colormap) { GET_EDGE_PARAMS(); mlib_d64 scale = 1.0 / (mlib_d64) MLIB_PREC; mlib_s32 xFlag, yFlag; mlib_d64 dx, dx_2, dx2, dx3_2, dx3_3; mlib_d64 xf0, xf1, xf2, xf3; mlib_d64 yf0, yf1, yf2, yf3; mlib_d64 c0, c1, c2, c3, val0; - mlib_type ltype; mlib_filter filter = param->filter; mlib_f32 *fptr; mlib_f32 const *flt_tbl; mlib_s32 filterpos, flt_shift, flt_mask; mlib_s32 xDelta0, xDelta1, xDelta2; mlib_s32 yDelta0, yDelta1, yDelta2; mlib_d64 sat; ! ltype = (colormap != NULL) ? mlib_ImageGetLutType(colormap) : type; ! ! if (ltype == MLIB_BYTE) { flt_shift = FLT_SHIFT_U8; flt_mask = FLT_MASK_U8; flt_tbl = (filter == MLIB_BICUBIC) ? mlib_filters_u8f_bc : mlib_filters_u8f_bc2; sat = (mlib_d64) 0x7F800000; /* saturation for U8 */ } --- 561,589 ---- return MLIB_SUCCESS; } /***************************************************************/ mlib_status mlib_ImageAffineEdgeExtend_BC(mlib_affine_param *param, ! mlib_affine_param *param_e) { GET_EDGE_PARAMS(); mlib_d64 scale = 1.0 / (mlib_d64) MLIB_PREC; mlib_s32 xFlag, yFlag; mlib_d64 dx, dx_2, dx2, dx3_2, dx3_3; mlib_d64 xf0, xf1, xf2, xf3; mlib_d64 yf0, yf1, yf2, yf3; mlib_d64 c0, c1, c2, c3, val0; mlib_filter filter = param->filter; mlib_f32 *fptr; mlib_f32 const *flt_tbl; mlib_s32 filterpos, flt_shift, flt_mask; mlib_s32 xDelta0, xDelta1, xDelta2; mlib_s32 yDelta0, yDelta1, yDelta2; mlib_d64 sat; ! if (type == MLIB_BYTE) { flt_shift = FLT_SHIFT_U8; flt_mask = FLT_MASK_U8; flt_tbl = (filter == MLIB_BICUBIC) ? mlib_filters_u8f_bc : mlib_filters_u8f_bc2; sat = (mlib_d64) 0x7F800000; /* saturation for U8 */ }
*** 811,892 **** flt_mask = FLT_MASK_S16; flt_tbl = (filter == MLIB_BICUBIC) ? mlib_filters_s16f_bc : mlib_filters_s16f_bc2; sat = (mlib_d64) 0x7FFF8000; /* saturation for U16 */ } - if (colormap != NULL) { - mlib_s32 max_xsize = param_e->max_xsize; - mlib_d64 *plut = (mlib_d64 *) mlib_ImageGetLutDoubleData(colormap); - void *buff; - - channels = mlib_ImageGetLutChannels(colormap); - plut -= channels * mlib_ImageGetLutOffset(colormap); - - if (max_xsize == 0) { - return MLIB_SUCCESS; - } - - if (ltype == MLIB_BYTE) { - buff = mlib_malloc(channels * max_xsize); - } - else if (ltype == MLIB_SHORT) { - buff = mlib_malloc(channels * max_xsize * sizeof(mlib_s16)); - } else { - /* Unsupported type of lookup table. */ - return MLIB_FAILURE; - } - - if (buff == NULL) - return MLIB_FAILURE; - - switch (ltype) { - case MLIB_BYTE: - switch (type) { - case MLIB_BYTE: - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_u8i, mlib_u8); - break; - - case MLIB_SHORT: - srcStride >>= 1; - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_u8i, mlib_s16); - break; - default: - /* Ignore incomatible image type. */ - break; - } - - break; - - case MLIB_SHORT: - switch (type) { - case MLIB_BYTE: - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_s16i, mlib_u8); - break; - - case MLIB_SHORT: - srcStride >>= 1; - MLIB_PROCESS_EDGES(MLIB_EDGE_INDEX_s16i, mlib_s16); - break; - default: - /* Ignore incomatible image type. */ - break; - } - - break; - - default: - /* Unsupported type of lookup table. - * Can not be here due to check on line 836, - * so just ignore it. - */ - break; - } - - mlib_free(buff); - - return MLIB_SUCCESS; - } switch (type) { case MLIB_BYTE: MLIB_PROCESS_EDGES(MLIB_EDGE_BC_TBL, mlib_u8); break; --- 592,601 ----
< prev index next >