0N/A/*
2362N/A * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A
0N/A
0N/A#include "vis_proto.h"
0N/A#include "mlib_image.h"
0N/A#include "mlib_ImageColormap.h"
0N/A#include "mlib_ImageAffine.h"
0N/A#include "mlib_v_ImageFilters.h"
0N/A
0N/A/***************************************************************/
0N/A#define MLIB_LIMIT 512
0N/A#define MLIB_SHIFT 16
0N/A
0N/A/***************************************************************/
0N/A#undef DECLAREVAR
0N/A#define DECLAREVAR() \
0N/A DECLAREVAR0(); \
0N/A mlib_s32 *warp_tbl = param -> warp_tbl; \
0N/A mlib_s32 xSrc, ySrc; \
0N/A mlib_s32 srcYStride = param -> srcYStride; \
0N/A mlib_s32 filter = param -> filter; \
0N/A mlib_s32 max_xsize = param -> max_xsize; \
0N/A MLIB_TYPE *srcIndexPtr; \
0N/A MLIB_TYPE *dstIndexPtr; \
0N/A mlib_d64 *dstPixelPtr; \
0N/A mlib_s32 i
0N/A
0N/A/***************************************************************/
0N/A#define DECLAREVAR_U8() \
0N/A mlib_s32 filterposx, filterposy; \
0N/A mlib_d64 sum0, sum1, sum2, sum3; \
0N/A mlib_f32 hi_row00, hi_row10, hi_row20, hi_row30; \
0N/A mlib_f32 hi_row01, hi_row11, hi_row21, hi_row31; \
0N/A mlib_f32 lo_row00, lo_row10, lo_row20, lo_row30; \
0N/A mlib_f32 lo_row01, lo_row11, lo_row21, lo_row31; \
0N/A mlib_d64 xFilter0, xFilter1, xFilter2, xFilter3, yFilter; \
0N/A mlib_d64 v00, v10, v20, v30; \
0N/A mlib_d64 v01, v11, v21, v31; \
0N/A mlib_d64 v02, v12, v22, v32; \
0N/A mlib_d64 v03, v13, v23, v33; \
0N/A mlib_d64 d0, d1, d2, d3; \
0N/A mlib_d64 d00, d10, d20, d30; \
0N/A mlib_d64 d01, d11, d21, d31; \
0N/A mlib_s32 cols; \
0N/A mlib_d64 res, *xPtr
0N/A
0N/A/***************************************************************/
0N/A#define DECLAREVAR_S16() \
0N/A mlib_s32 filterposx, filterposy; \
0N/A mlib_d64 sum0, sum1, sum2, sum3; \
0N/A mlib_d64 row00, row10, row20, row30; \
0N/A mlib_d64 row01, row11, row21, row31; \
0N/A mlib_d64 row02, row12, row22, row32; \
0N/A mlib_d64 row03, row13, row23, row33; \
0N/A mlib_d64 xFilter0, xFilter1, xFilter2, xFilter3; \
0N/A mlib_d64 yFilter0, yFilter1, yFilter2, yFilter3; \
0N/A mlib_d64 v00, v01, v02, v03, v10, v11, v12, v13; \
0N/A mlib_d64 v20, v21, v22, v23, v30, v31, v32, v33; \
0N/A mlib_d64 u00, u01, u10, u11, u20, u21, u30, u31; \
0N/A mlib_d64 d0, d1, d2, d3; \
0N/A mlib_d64 *yPtr, *xPtr; \
0N/A mlib_s32 cols; \
0N/A mlib_d64 res; \
0N/A mlib_f32 f_x01000100 = vis_to_float(0x01000100)
0N/A
0N/A/***************************************************************/
0N/A#undef CLIP
0N/A#define CLIP() \
0N/A dstData += dstYStride; \
0N/A xLeft = leftEdges[j]; \
0N/A xRight = rightEdges[j]; \
0N/A X = xStarts[j]; \
0N/A Y = yStarts[j]; \
0N/A PREPARE_DELTAS \
0N/A if (xLeft > xRight) \
0N/A continue; \
0N/A dstIndexPtr = (MLIB_TYPE *)dstData + xLeft; \
0N/A dstPixelPtr = dstRowPtr
0N/A
0N/A/***************************************************************/
0N/A#define FADD_4BC_U8() \
0N/A d0 = vis_fpadd16(d00, d10); \
0N/A d1 = vis_fpadd16(d20, d30); \
0N/A d0 = vis_fpadd16(d0, d1); \
0N/A d2 = vis_fpadd16(d01, d11); \
0N/A d3 = vis_fpadd16(d21, d31); \
0N/A d2 = vis_fpadd16(d2, d3); \
0N/A res = vis_fpack16_pair(d0, d2)
0N/A
0N/A/***************************************************************/
0N/A#define LOAD_BC_U8_4CH_1PIXEL(mlib_filters_u8, mlib_filters_u8_4) \
0N/A filterposy = (Y >> FILTER_SHIFT) & FILTER_MASK; \
0N/A yFilter = *((mlib_d64 *) ((mlib_u8 *)mlib_filters_u8 + filterposy)); \
0N/A filterposx = (X >> FILTER_SHIFT) & FILTER_MASK; \
0N/A xPtr = ((mlib_d64 *)((mlib_u8 *)mlib_filters_u8_4+4*filterposx)); \
0N/A xFilter0 = xPtr[0]; \
0N/A xFilter1 = xPtr[1]; \
0N/A xFilter2 = xPtr[2]; \
0N/A xFilter3 = xPtr[3]; \
0N/A X += dX; \
0N/A Y += dY; \
0N/A hi_row00 = flut[srcIndexPtr[0]]; \
0N/A lo_row00 = flut[srcIndexPtr[1]]; \
0N/A hi_row01 = flut[srcIndexPtr[2]]; \
0N/A lo_row01 = flut[srcIndexPtr[3]]; \
0N/A srcIndexPtr += srcYStride; \
0N/A hi_row10 = flut[srcIndexPtr[0]]; \
0N/A lo_row10 = flut[srcIndexPtr[1]]; \
0N/A hi_row11 = flut[srcIndexPtr[2]]; \
0N/A lo_row11 = flut[srcIndexPtr[3]]; \
0N/A srcIndexPtr += srcYStride; \
0N/A hi_row20 = flut[srcIndexPtr[0]]; \
0N/A lo_row20 = flut[srcIndexPtr[1]]; \
0N/A hi_row21 = flut[srcIndexPtr[2]]; \
0N/A lo_row21 = flut[srcIndexPtr[3]]; \
0N/A srcIndexPtr += srcYStride; \
0N/A hi_row30 = flut[srcIndexPtr[0]]; \
0N/A lo_row30 = flut[srcIndexPtr[1]]; \
0N/A hi_row31 = flut[srcIndexPtr[2]]; \
0N/A lo_row31 = flut[srcIndexPtr[3]]
0N/A
0N/A/***************************************************************/
0N/A#define NEXT_PIXEL_4BC() \
0N/A xSrc = (X >> MLIB_SHIFT)-1; \
0N/A ySrc = (Y >> MLIB_SHIFT)-1; \
0N/A srcIndexPtr = (MLIB_TYPE *)lineAddr[ySrc] + xSrc
0N/A
0N/A/***************************************************************/
0N/A#define RESULT_4BC_U8_1PIXEL(ind) \
0N/A v00 = vis_fmul8x16au(hi_row00, vis_read_hi(yFilter)); \
0N/A v01 = vis_fmul8x16au(lo_row00, vis_read_hi(yFilter)); \
0N/A v02 = vis_fmul8x16au(hi_row01, vis_read_hi(yFilter)); \
0N/A v03 = vis_fmul8x16au(lo_row01, vis_read_hi(yFilter)); \
0N/A v10 = vis_fmul8x16al(hi_row10, vis_read_hi(yFilter)); \
0N/A v11 = vis_fmul8x16al(lo_row10, vis_read_hi(yFilter)); \
0N/A sum0 = vis_fpadd16(v00, v10); \
0N/A v12 = vis_fmul8x16al(hi_row11, vis_read_hi(yFilter)); \
0N/A sum1 = vis_fpadd16(v01, v11); \
0N/A v13 = vis_fmul8x16al(lo_row11, vis_read_hi(yFilter)); \
0N/A sum2 = vis_fpadd16(v02, v12); \
0N/A v20 = vis_fmul8x16au(hi_row20, vis_read_lo(yFilter)); \
0N/A sum3 = vis_fpadd16(v03, v13); \
0N/A v21 = vis_fmul8x16au(lo_row20, vis_read_lo(yFilter)); \
0N/A sum0 = vis_fpadd16(sum0, v20); \
0N/A v22 = vis_fmul8x16au(hi_row21, vis_read_lo(yFilter)); \
0N/A sum1 = vis_fpadd16(sum1, v21); \
0N/A v23 = vis_fmul8x16au(lo_row21, vis_read_lo(yFilter)); \
0N/A sum2 = vis_fpadd16(sum2, v22); \
0N/A v30 = vis_fmul8x16al(hi_row30, vis_read_lo(yFilter)); \
0N/A sum3 = vis_fpadd16(sum3, v23); \
0N/A v31 = vis_fmul8x16al(lo_row30, vis_read_lo(yFilter)); \
0N/A sum0 = vis_fpadd16(sum0, v30); \
0N/A v32 = vis_fmul8x16al(hi_row31, vis_read_lo(yFilter)); \
0N/A sum1 = vis_fpadd16(sum1, v31); \
0N/A v33 = vis_fmul8x16al(lo_row31, vis_read_lo(yFilter)); \
0N/A sum2 = vis_fpadd16(sum2, v32); \
0N/A v00 = vis_fmul8sux16(sum0, xFilter0); \
0N/A sum3 = vis_fpadd16(sum3, v33); \
0N/A v01 = vis_fmul8ulx16(sum0, xFilter0); \
0N/A v10 = vis_fmul8sux16(sum1, xFilter1); \
0N/A d0##ind = vis_fpadd16(v00, v01); \
0N/A v11 = vis_fmul8ulx16(sum1, xFilter1); \
0N/A v20 = vis_fmul8sux16(sum2, xFilter2); \
0N/A d1##ind = vis_fpadd16(v10, v11); \
0N/A v21 = vis_fmul8ulx16(sum2, xFilter2); \
0N/A v30 = vis_fmul8sux16(sum3, xFilter3); \
0N/A d2##ind = vis_fpadd16(v20, v21); \
0N/A v31 = vis_fmul8ulx16(sum3, xFilter3); \
0N/A d3##ind = vis_fpadd16(v30, v31)
0N/A
0N/A/***************************************************************/
0N/A#define BC_U8_4CH(ind, mlib_filters_u8, mlib_filters_u8_4) \
0N/A v00 = vis_fmul8x16au(hi_row00, vis_read_hi(yFilter)); \
0N/A v01 = vis_fmul8x16au(lo_row00, vis_read_hi(yFilter)); \
0N/A v02 = vis_fmul8x16au(hi_row01, vis_read_hi(yFilter)); \
0N/A v03 = vis_fmul8x16au(lo_row01, vis_read_hi(yFilter)); \
0N/A hi_row00 = flut[srcIndexPtr[0]]; \
0N/A filterposy = (Y >> FILTER_SHIFT); \
0N/A v10 = vis_fmul8x16al(hi_row10, vis_read_hi(yFilter)); \
0N/A lo_row00 = flut[srcIndexPtr[1]]; \
0N/A v11 = vis_fmul8x16al(lo_row10, vis_read_hi(yFilter)); \
0N/A sum0 = vis_fpadd16(v00, v10); \
0N/A hi_row01 = flut[srcIndexPtr[2]]; \
0N/A v12 = vis_fmul8x16al(hi_row11, vis_read_hi(yFilter)); \
0N/A lo_row01 = flut[srcIndexPtr[3]]; \
0N/A filterposx = (X >> FILTER_SHIFT); \
0N/A v13 = vis_fmul8x16al(lo_row11, vis_read_hi(yFilter)); \
0N/A srcIndexPtr += srcYStride; \
0N/A hi_row10 = flut[srcIndexPtr[0]]; \
0N/A v20 = vis_fmul8x16au(hi_row20, vis_read_lo(yFilter)); \
0N/A sum1 = vis_fpadd16(v01, v11); \
0N/A lo_row10 = flut[srcIndexPtr[1]]; \
0N/A X += dX; \
0N/A hi_row11 = flut[srcIndexPtr[2]]; \
0N/A v21 = vis_fmul8x16au(lo_row20, vis_read_lo(yFilter)); \
0N/A sum2 = vis_fpadd16(v02, v12); \
0N/A lo_row11 = flut[srcIndexPtr[3]]; \
0N/A v22 = vis_fmul8x16au(hi_row21, vis_read_lo(yFilter)); \
0N/A srcIndexPtr += srcYStride; \
0N/A hi_row20 = flut[srcIndexPtr[0]]; \
0N/A v23 = vis_fmul8x16au(lo_row21, vis_read_lo(yFilter)); \
0N/A sum3 = vis_fpadd16(v03, v13); \
0N/A Y += dY; \
0N/A xSrc = (X >> MLIB_SHIFT)-1; \
0N/A v30 = vis_fmul8x16al(hi_row30, vis_read_lo(yFilter)); \
0N/A sum0 = vis_fpadd16(sum0, v20); \
0N/A lo_row20 = flut[srcIndexPtr[1]]; \
0N/A ySrc = (Y >> MLIB_SHIFT)-1; \
0N/A hi_row21 = flut[srcIndexPtr[2]]; \
0N/A v31 = vis_fmul8x16al(lo_row30, vis_read_lo(yFilter)); \
0N/A sum1 = vis_fpadd16(sum1, v21); \
0N/A filterposy &= FILTER_MASK; \
0N/A lo_row21 = flut[srcIndexPtr[3]]; \
0N/A v32 = vis_fmul8x16al(hi_row31, vis_read_lo(yFilter)); \
0N/A srcIndexPtr += srcYStride; \
0N/A filterposx &= FILTER_MASK; \
0N/A v33 = vis_fmul8x16al(lo_row31, vis_read_lo(yFilter)); \
0N/A sum2 = vis_fpadd16(sum2, v22); \
0N/A hi_row30 = flut[srcIndexPtr[0]]; \
0N/A sum3 = vis_fpadd16(sum3, v23); \
0N/A sum0 = vis_fpadd16(sum0, v30); \
0N/A lo_row30 = flut[srcIndexPtr[1]]; \
0N/A sum1 = vis_fpadd16(sum1, v31); \
0N/A v00 = vis_fmul8sux16(sum0, xFilter0); \
0N/A hi_row31 = flut[srcIndexPtr[2]]; \
0N/A sum2 = vis_fpadd16(sum2, v32); \
0N/A v01 = vis_fmul8ulx16(sum0, xFilter0); \
0N/A sum3 = vis_fpadd16(sum3, v33); \
0N/A lo_row31 = flut[srcIndexPtr[3]]; \
0N/A v10 = vis_fmul8sux16(sum1, xFilter1); \
0N/A d0##ind = vis_fpadd16(v00, v01); \
0N/A yFilter = *((mlib_d64 *)((mlib_u8 *)mlib_filters_u8 + filterposy)); \
0N/A v11 = vis_fmul8ulx16(sum1, xFilter1); \
0N/A xPtr = ((mlib_d64 *)((mlib_u8 *)mlib_filters_u8_4+4*filterposx)); \
0N/A xFilter0 = xPtr[0]; \
0N/A v20 = vis_fmul8sux16(sum2, xFilter2); \
0N/A d1##ind = vis_fpadd16(v10, v11); \
0N/A xFilter1 = xPtr[1]; \
0N/A v21 = vis_fmul8ulx16(sum2, xFilter2); \
0N/A xFilter2 = xPtr[2]; \
0N/A v30 = vis_fmul8sux16(sum3, xFilter3); \
0N/A d2##ind = vis_fpadd16(v20, v21); \
0N/A xFilter3 = xPtr[3]; \
0N/A v31 = vis_fmul8ulx16(sum3, xFilter3); \
0N/A srcIndexPtr = (MLIB_TYPE *)lineAddr[ySrc] + xSrc; \
0N/A d3##ind = vis_fpadd16(v30, v31)
0N/A
0N/A/***************************************************************/
0N/A#define LOAD_BC_S16_4CH_1PIXEL(mlib_filters_s16_4) \
0N/A row00 = flut[srcIndexPtr[0]]; \
0N/A row01 = flut[srcIndexPtr[1]]; \
0N/A row02 = flut[srcIndexPtr[2]]; \
0N/A row03 = flut[srcIndexPtr[3]]; \
0N/A srcIndexPtr += srcYStride; \
0N/A row10 = flut[srcIndexPtr[0]]; \
0N/A row11 = flut[srcIndexPtr[1]]; \
0N/A row12 = flut[srcIndexPtr[2]]; \
0N/A row13 = flut[srcIndexPtr[3]]; \
0N/A srcIndexPtr += srcYStride; \
0N/A row20 = flut[srcIndexPtr[0]]; \
0N/A row21 = flut[srcIndexPtr[1]]; \
0N/A row22 = flut[srcIndexPtr[2]]; \
0N/A row23 = flut[srcIndexPtr[3]]; \
0N/A srcIndexPtr += srcYStride; \
0N/A row30 = flut[srcIndexPtr[0]]; \
0N/A row31 = flut[srcIndexPtr[1]]; \
0N/A row32 = flut[srcIndexPtr[2]]; \
0N/A row33 = flut[srcIndexPtr[3]]; \
0N/A filterposy = (Y >> FILTER_SHIFT) & FILTER_MASK; \
0N/A yPtr = ((mlib_d64 *) ((mlib_u8 *)mlib_filters_s16_4 + filterposy*4)); \
0N/A yFilter0 = yPtr[0]; \
0N/A yFilter1 = yPtr[1]; \
0N/A yFilter2 = yPtr[2]; \
0N/A yFilter3 = yPtr[3]; \
0N/A filterposx = (X >> FILTER_SHIFT) & FILTER_MASK; \
0N/A xPtr = ((mlib_d64 *)((mlib_u8 *)mlib_filters_s16_4 + filterposx*4)); \
0N/A xFilter0 = xPtr[0]; \
0N/A xFilter1 = xPtr[1]; \
0N/A xFilter2 = xPtr[2]; \
0N/A xFilter3 = xPtr[3]; \
0N/A X += dX; \
0N/A Y += dY
0N/A
0N/A/***************************************************************/
0N/A#define RESULT_4BC_S16_1PIXEL() \
0N/A u00 = vis_fmul8sux16(row00, yFilter0); \
0N/A u01 = vis_fmul8ulx16(row00, yFilter0); \
0N/A u10 = vis_fmul8sux16(row01, yFilter0); \
0N/A u11 = vis_fmul8ulx16(row01, yFilter0); \
0N/A v00 = vis_fpadd16(u00, u01); \
0N/A u20 = vis_fmul8sux16(row02, yFilter0); \
0N/A v01 = vis_fpadd16(u10, u11); \
0N/A u21 = vis_fmul8ulx16(row02, yFilter0); \
0N/A u30 = vis_fmul8sux16(row03, yFilter0); \
0N/A u31 = vis_fmul8ulx16(row03, yFilter0); \
0N/A v02 = vis_fpadd16(u20, u21); \
0N/A u00 = vis_fmul8sux16(row10, yFilter1); \
0N/A u01 = vis_fmul8ulx16(row10, yFilter1); \
0N/A v03 = vis_fpadd16(u30, u31); \
0N/A u10 = vis_fmul8sux16(row11, yFilter1); \
0N/A u11 = vis_fmul8ulx16(row11, yFilter1); \
0N/A v10 = vis_fpadd16(u00, u01); \
0N/A u20 = vis_fmul8sux16(row12, yFilter1); \
0N/A v11 = vis_fpadd16(u10, u11); \
0N/A u21 = vis_fmul8ulx16(row12, yFilter1); \
0N/A u30 = vis_fmul8sux16(row13, yFilter1); \
0N/A u31 = vis_fmul8ulx16(row13, yFilter1); \
0N/A u00 = vis_fmul8sux16(row20, yFilter2); \
0N/A v12 = vis_fpadd16(u20, u21); \
0N/A u01 = vis_fmul8ulx16(row20, yFilter2); \
0N/A v13 = vis_fpadd16(u30, u31); \
0N/A u10 = vis_fmul8sux16(row21, yFilter2); \
0N/A u11 = vis_fmul8ulx16(row21, yFilter2); \
0N/A v20 = vis_fpadd16(u00, u01); \
0N/A u20 = vis_fmul8sux16(row22, yFilter2); \
0N/A sum0 = vis_fpadd16(v00, v10); \
0N/A u21 = vis_fmul8ulx16(row22, yFilter2); \
0N/A u30 = vis_fmul8sux16(row23, yFilter2); \
0N/A u31 = vis_fmul8ulx16(row23, yFilter2); \
0N/A u00 = vis_fmul8sux16(row30, yFilter3); \
0N/A u01 = vis_fmul8ulx16(row30, yFilter3); \
0N/A v21 = vis_fpadd16(u10, u11); \
0N/A sum1 = vis_fpadd16(v01, v11); \
0N/A u10 = vis_fmul8sux16(row31, yFilter3); \
0N/A sum2 = vis_fpadd16(v02, v12); \
0N/A sum3 = vis_fpadd16(v03, v13); \
0N/A v22 = vis_fpadd16(u20, u21); \
0N/A u11 = vis_fmul8ulx16(row31, yFilter3); \
0N/A sum0 = vis_fpadd16(sum0, v20); \
0N/A u20 = vis_fmul8sux16(row32, yFilter3); \
0N/A u21 = vis_fmul8ulx16(row32, yFilter3); \
0N/A v23 = vis_fpadd16(u30, u31); \
0N/A v30 = vis_fpadd16(u00, u01); \
0N/A sum1 = vis_fpadd16(sum1, v21); \
0N/A u30 = vis_fmul8sux16(row33, yFilter3); \
0N/A u31 = vis_fmul8ulx16(row33, yFilter3); \
0N/A v31 = vis_fpadd16(u10, u11); \
0N/A sum2 = vis_fpadd16(sum2, v22); \
0N/A sum3 = vis_fpadd16(sum3, v23); \
0N/A v32 = vis_fpadd16(u20, u21); \
0N/A sum0 = vis_fpadd16(sum0, v30); \
0N/A v33 = vis_fpadd16(u30, u31); \
0N/A v00 = vis_fmul8sux16(sum0, xFilter0); \
0N/A sum1 = vis_fpadd16(sum1, v31); \
0N/A sum2 = vis_fpadd16(sum2, v32); \
0N/A v01 = vis_fmul8ulx16(sum0, xFilter0); \
0N/A v10 = vis_fmul8sux16(sum1, xFilter1); \
0N/A sum3 = vis_fpadd16(sum3, v33); \
0N/A v11 = vis_fmul8ulx16(sum1, xFilter1); \
0N/A d0 = vis_fpadd16(v00, v01); \
0N/A v20 = vis_fmul8sux16(sum2, xFilter2); \
0N/A v21 = vis_fmul8ulx16(sum2, xFilter2); \
0N/A d1 = vis_fpadd16(v10, v11); \
0N/A v30 = vis_fmul8sux16(sum3, xFilter3); \
0N/A v31 = vis_fmul8ulx16(sum3, xFilter3); \
0N/A d2 = vis_fpadd16(v20, v21); \
0N/A d3 = vis_fpadd16(v30, v31); \
0N/A d0 = vis_fpadd16(d0, d1); \
0N/A d2 = vis_fpadd16(d2, d3); \
0N/A d0 = vis_fpadd16(d0, d2); \
0N/A d2 = vis_fmuld8sux16(f_x01000100, vis_read_hi(d0)); \
0N/A d3 = vis_fmuld8sux16(f_x01000100, vis_read_lo(d0)); \
0N/A res = vis_fpackfix_pair(d2, d3)
0N/A
0N/A/***************************************************************/
0N/A#define BC_S16_4CH(mlib_filters_s16_4) \
0N/A u00 = vis_fmul8sux16(row00, yFilter0); \
0N/A u01 = vis_fmul8ulx16(row00, yFilter0); \
0N/A u10 = vis_fmul8sux16(row01, yFilter0); \
0N/A u11 = vis_fmul8ulx16(row01, yFilter0); \
0N/A v00 = vis_fpadd16(u00, u01); \
0N/A u20 = vis_fmul8sux16(row02, yFilter0); \
0N/A v01 = vis_fpadd16(u10, u11); \
0N/A u21 = vis_fmul8ulx16(row02, yFilter0); \
0N/A u30 = vis_fmul8sux16(row03, yFilter0); \
0N/A u31 = vis_fmul8ulx16(row03, yFilter0); \
0N/A v02 = vis_fpadd16(u20, u21); \
0N/A row00 = flut[srcIndexPtr[0]]; \
0N/A u00 = vis_fmul8sux16(row10, yFilter1); \
0N/A u01 = vis_fmul8ulx16(row10, yFilter1); \
0N/A filterposy = (Y >> FILTER_SHIFT); \
0N/A v03 = vis_fpadd16(u30, u31); \
0N/A row01 = flut[srcIndexPtr[1]]; \
0N/A u10 = vis_fmul8sux16(row11, yFilter1); \
0N/A u11 = vis_fmul8ulx16(row11, yFilter1); \
0N/A v10 = vis_fpadd16(u00, u01); \
0N/A row02 = flut[srcIndexPtr[2]]; \
0N/A u20 = vis_fmul8sux16(row12, yFilter1); \
0N/A v11 = vis_fpadd16(u10, u11); \
0N/A u21 = vis_fmul8ulx16(row12, yFilter1); \
0N/A u30 = vis_fmul8sux16(row13, yFilter1); \
0N/A row03 = flut[srcIndexPtr[3]]; \
0N/A u31 = vis_fmul8ulx16(row13, yFilter1); \
0N/A u00 = vis_fmul8sux16(row20, yFilter2); \
0N/A filterposx = (X >> FILTER_SHIFT); \
0N/A srcIndexPtr += srcYStride; \
0N/A v12 = vis_fpadd16(u20, u21); \
0N/A u01 = vis_fmul8ulx16(row20, yFilter2); \
0N/A v13 = vis_fpadd16(u30, u31); \
0N/A row10 = flut[srcIndexPtr[0]]; \
0N/A u10 = vis_fmul8sux16(row21, yFilter2); \
0N/A X += dX; \
0N/A u11 = vis_fmul8ulx16(row21, yFilter2); \
0N/A v20 = vis_fpadd16(u00, u01); \
0N/A row11 = flut[srcIndexPtr[1]]; \
0N/A u20 = vis_fmul8sux16(row22, yFilter2); \
0N/A sum0 = vis_fpadd16(v00, v10); \
0N/A u21 = vis_fmul8ulx16(row22, yFilter2); \
0N/A row12 = flut[srcIndexPtr[2]]; \
0N/A u30 = vis_fmul8sux16(row23, yFilter2); \
0N/A u31 = vis_fmul8ulx16(row23, yFilter2); \
0N/A row13 = flut[srcIndexPtr[3]]; \
0N/A u00 = vis_fmul8sux16(row30, yFilter3); \
0N/A srcIndexPtr += srcYStride; \
0N/A u01 = vis_fmul8ulx16(row30, yFilter3); \
0N/A v21 = vis_fpadd16(u10, u11); \
0N/A Y += dY; \
0N/A xSrc = (X >> MLIB_SHIFT)-1; \
0N/A sum1 = vis_fpadd16(v01, v11); \
0N/A row20 = flut[srcIndexPtr[0]]; \
0N/A u10 = vis_fmul8sux16(row31, yFilter3); \
0N/A sum2 = vis_fpadd16(v02, v12); \
0N/A sum3 = vis_fpadd16(v03, v13); \
0N/A ySrc = (Y >> MLIB_SHIFT)-1; \
0N/A row21 = flut[srcIndexPtr[1]]; \
0N/A v22 = vis_fpadd16(u20, u21); \
0N/A u11 = vis_fmul8ulx16(row31, yFilter3); \
0N/A sum0 = vis_fpadd16(sum0, v20); \
0N/A u20 = vis_fmul8sux16(row32, yFilter3); \
0N/A row22 = flut[srcIndexPtr[2]]; \
0N/A u21 = vis_fmul8ulx16(row32, yFilter3); \
0N/A v23 = vis_fpadd16(u30, u31); \
0N/A v30 = vis_fpadd16(u00, u01); \
0N/A filterposy &= FILTER_MASK; \
0N/A sum1 = vis_fpadd16(sum1, v21); \
0N/A u30 = vis_fmul8sux16(row33, yFilter3); \
0N/A row23 = flut[srcIndexPtr[3]]; \
0N/A u31 = vis_fmul8ulx16(row33, yFilter3); \
0N/A srcIndexPtr += srcYStride; \
0N/A filterposx &= FILTER_MASK; \
0N/A v31 = vis_fpadd16(u10, u11); \
0N/A row30 = flut[srcIndexPtr[0]]; \
0N/A sum2 = vis_fpadd16(sum2, v22); \
0N/A sum3 = vis_fpadd16(sum3, v23); \
0N/A row31 = flut[srcIndexPtr[1]]; \
0N/A v32 = vis_fpadd16(u20, u21); \
0N/A sum0 = vis_fpadd16(sum0, v30); \
0N/A row32 = flut[srcIndexPtr[2]]; \
0N/A v33 = vis_fpadd16(u30, u31); \
0N/A row33 = flut[srcIndexPtr[3]]; \
0N/A v00 = vis_fmul8sux16(sum0, xFilter0); \
0N/A yPtr = ((mlib_d64 *) ((mlib_u8 *)mlib_filters_s16_4 + filterposy*4)); \
0N/A sum1 = vis_fpadd16(sum1, v31); \
0N/A yFilter0 = yPtr[0]; \
0N/A sum2 = vis_fpadd16(sum2, v32); \
0N/A v01 = vis_fmul8ulx16(sum0, xFilter0); \
0N/A yFilter1 = yPtr[1]; \
0N/A v10 = vis_fmul8sux16(sum1, xFilter1); \
0N/A sum3 = vis_fpadd16(sum3, v33); \
0N/A yFilter2 = yPtr[2]; \
0N/A v11 = vis_fmul8ulx16(sum1, xFilter1); \
0N/A d0 = vis_fpadd16(v00, v01); \
0N/A yFilter3 = yPtr[3]; \
0N/A xPtr = ((mlib_d64 *)((mlib_u8 *)mlib_filters_s16_4 + filterposx*4)); \
0N/A v20 = vis_fmul8sux16(sum2, xFilter2); \
0N/A xFilter0 = xPtr[0]; \
0N/A v21 = vis_fmul8ulx16(sum2, xFilter2); \
0N/A d1 = vis_fpadd16(v10, v11); \
0N/A xFilter1 = xPtr[1]; \
0N/A v30 = vis_fmul8sux16(sum3, xFilter3); \
0N/A v31 = vis_fmul8ulx16(sum3, xFilter3); \
0N/A d2 = vis_fpadd16(v20, v21); \
0N/A xFilter2 = xPtr[2]; \
0N/A d3 = vis_fpadd16(v30, v31); \
0N/A xFilter3 = xPtr[3]; \
0N/A srcIndexPtr = (MLIB_TYPE *)lineAddr[ySrc] + xSrc
0N/A
0N/A/***************************************************************/
0N/A#define FADD_4BC_S16() \
0N/A d0 = vis_fpadd16(d0, d1); \
0N/A d2 = vis_fpadd16(d2, d3); \
0N/A d0 = vis_fpadd16(d0, d2); \
0N/A d2 = vis_fmuld8sux16(f_x01000100, vis_read_hi(d0)); \
0N/A d3 = vis_fmuld8sux16(f_x01000100, vis_read_lo(d0)); \
0N/A res = vis_fpackfix_pair(d2, d3)
0N/A
0N/A/***************************************************************/
0N/A#undef MLIB_TYPE
0N/A#define MLIB_TYPE mlib_u8
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 5
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 8) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_U8_U8_3CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_U8();
0N/A mlib_f32 *flut = (mlib_f32 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT/2];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_u8, *mlib_filters_table_u8_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc_4;
0N/A } else {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc2;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc2_4;
0N/A }
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * ((max_xsize + 1) >> 1));
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A vis_write_gsr(3 << 3);
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A
0N/A i = 0;
0N/A
0N/A if (i <= cols - 6) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i <= cols-8; i += 2) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 6;
0N/A }
0N/A
0N/A if (i <= cols-4) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A if (i <= cols-2) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 2;
0N/A }
0N/A
0N/A if (i < cols) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A d0 = vis_fpadd16(d00, d10);
0N/A d1 = vis_fpadd16(d20, d30);
0N/A d0 = vis_fpadd16(d0, d1);
0N/A res = vis_fpack16_pair(d0, d0);
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_U8_U8_3_in_4((mlib_u8 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 4
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 9) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_U8_S16_3CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_S16();
0N/A mlib_d64 *flut = (mlib_d64 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_s16_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc_4;
0N/A } else {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc2_4;
0N/A }
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * max_xsize);
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A vis_write_gsr(10 << 3);
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A i = 0;
0N/A
0N/A if (i <= cols - 4) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A FADD_4BC_S16();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A
0N/A for (; i < cols-4; i++) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i < cols; i++) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_S16_U8_3_in_4((mlib_s16 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 5
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 8) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_U8_U8_4CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_U8();
0N/A mlib_f32 *flut = (mlib_f32 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT/2];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_u8, *mlib_filters_table_u8_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc_4;
0N/A } else {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc2;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc2_4;
0N/A }
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * ((max_xsize + 1) >> 1));
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A vis_write_gsr(3 << 3);
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A
0N/A i = 0;
0N/A
0N/A if (i <= cols - 6) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i <= cols-8; i += 2) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 6;
0N/A }
0N/A
0N/A if (i <= cols-4) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A if (i <= cols-2) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 2;
0N/A }
0N/A
0N/A if (i < cols) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A d0 = vis_fpadd16(d00, d10);
0N/A d1 = vis_fpadd16(d20, d30);
0N/A d0 = vis_fpadd16(d0, d1);
0N/A res = vis_fpack16_pair(d0, d0);
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_U8_U8_4((mlib_u8 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 4
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 9) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_U8_S16_4CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_S16();
0N/A mlib_d64 *flut = (mlib_d64 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_s16_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc_4;
0N/A } else {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc2_4;
0N/A }
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * max_xsize);
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A vis_write_gsr(10 << 3);
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A i = 0;
0N/A
0N/A if (i <= cols - 4) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A FADD_4BC_S16();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A
0N/A for (; i < cols-4; i++) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i < cols; i++) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_S16_U8_4((mlib_s16 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/
0N/A#undef MLIB_TYPE
0N/A#define MLIB_TYPE mlib_s16
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 5
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 8) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_S16_U8_3CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_U8();
0N/A mlib_f32 *flut = (mlib_f32 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT/2];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_u8, *mlib_filters_table_u8_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc_4;
0N/A } else {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc2;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc2_4;
0N/A }
0N/A
0N/A srcYStride >>= 1;
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * ((max_xsize + 1) >> 1));
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A vis_write_gsr(3 << 3);
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A
0N/A i = 0;
0N/A
0N/A if (i <= cols - 6) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i <= cols-8; i += 2) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 6;
0N/A }
0N/A
0N/A if (i <= cols-4) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A if (i <= cols-2) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 2;
0N/A }
0N/A
0N/A if (i < cols) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A d0 = vis_fpadd16(d00, d10);
0N/A d1 = vis_fpadd16(d20, d30);
0N/A d0 = vis_fpadd16(d0, d1);
0N/A res = vis_fpack16_pair(d0, d0);
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_U8_S16_3_in_4((mlib_u8 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 4
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 9) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_S16_S16_3CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_S16();
0N/A mlib_d64 *flut = (mlib_d64 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_s16_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc_4;
0N/A } else {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc2_4;
0N/A }
0N/A
0N/A srcYStride >>= 1;
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * max_xsize);
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A vis_write_gsr(10 << 3);
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A i = 0;
0N/A
0N/A if (i <= cols - 4) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A FADD_4BC_S16();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A
0N/A for (; i < cols-4; i++) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i < cols; i++) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_S16_S16_3_in_4((mlib_s16 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 5
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 8) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_S16_U8_4CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_U8();
0N/A mlib_f32 *flut = (mlib_f32 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT/2];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_u8, *mlib_filters_table_u8_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc_4;
0N/A } else {
0N/A mlib_filters_table_u8 = mlib_filters_u8_bc2;
0N/A mlib_filters_table_u8_4 = mlib_filters_u8_bc2_4;
0N/A }
0N/A
0N/A srcYStride >>= 1;
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * ((max_xsize + 1) >> 1));
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A vis_write_gsr(3 << 3);
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A
0N/A i = 0;
0N/A
0N/A if (i <= cols - 6) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i <= cols-8; i += 2) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 6;
0N/A }
0N/A
0N/A if (i <= cols-4) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_U8_4CH(0, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A BC_U8_4CH(1, mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A FADD_4BC_U8();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A if (i <= cols-2) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(1);
0N/A FADD_4BC_U8();
0N/A
0N/A *dstPixelPtr++ = res;
0N/A i += 2;
0N/A }
0N/A
0N/A if (i < cols) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_U8_4CH_1PIXEL(mlib_filters_table_u8, mlib_filters_table_u8_4);
0N/A RESULT_4BC_U8_1PIXEL(0);
0N/A
0N/A d0 = vis_fpadd16(d00, d10);
0N/A d1 = vis_fpadd16(d20, d30);
0N/A d0 = vis_fpadd16(d0, d1);
0N/A res = vis_fpack16_pair(d0, d0);
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_U8_S16_4((mlib_u8 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/
0N/A#undef FILTER_SHIFT
0N/A#define FILTER_SHIFT 4
0N/A#undef FILTER_MASK
0N/A#define FILTER_MASK (((1 << 9) - 1) << 3)
0N/A
0N/A/***************************************************************/
0N/Amlib_status mlib_ImageAffineIndex_S16_S16_4CH_BC(mlib_affine_param *param,
0N/A const void *colormap)
0N/A{
0N/A DECLAREVAR();
0N/A DECLAREVAR_S16();
0N/A mlib_d64 *flut = (mlib_d64 *)mlib_ImageGetLutNormalTable(colormap) -
0N/A mlib_ImageGetLutOffset(colormap);
0N/A mlib_d64 dstRowData[MLIB_LIMIT];
0N/A mlib_d64 *dstRowPtr = dstRowData;
0N/A const mlib_s16 *mlib_filters_table_s16_4;
0N/A
0N/A if (filter == MLIB_BICUBIC) {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc_4;
0N/A } else {
0N/A mlib_filters_table_s16_4 = mlib_filters_s16_bc2_4;
0N/A }
0N/A
0N/A srcYStride >>= 1;
0N/A
0N/A if (max_xsize > MLIB_LIMIT) {
0N/A dstRowPtr = mlib_malloc(sizeof(mlib_d64) * max_xsize);
0N/A
0N/A if (dstRowPtr == NULL) return MLIB_FAILURE;
0N/A }
0N/A
0N/A for (j = yStart; j <= yFinish; j++) {
0N/A
0N/A CLIP();
0N/A
0N/A vis_write_gsr(10 << 3);
0N/A
0N/A cols = xRight - xLeft + 1;
0N/A i = 0;
0N/A
0N/A if (i <= cols - 4) {
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A
0N/A NEXT_PIXEL_4BC();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A FADD_4BC_S16();
0N/A
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A
0N/A#pragma pipeloop(0)
0N/A
0N/A for (; i < cols-4; i++) {
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A BC_S16_4CH(mlib_filters_table_s16_4);
0N/A }
0N/A
0N/A *dstPixelPtr++ = res;
0N/A
0N/A FADD_4BC_S16();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A i += 4;
0N/A }
0N/A
0N/A#pragma pipeloop(0)
0N/A for (; i < cols; i++) {
0N/A NEXT_PIXEL_4BC();
0N/A LOAD_BC_S16_4CH_1PIXEL(mlib_filters_table_s16_4);
0N/A RESULT_4BC_S16_1PIXEL();
0N/A *dstPixelPtr++ = res;
0N/A }
0N/A
0N/A mlib_ImageColorTrue2IndexLine_S16_S16_4((mlib_s16 *)dstRowPtr,
0N/A dstIndexPtr,
0N/A xRight - xLeft + 1,
0N/A colormap);
0N/A }
0N/A
0N/A if (dstRowPtr != dstRowData) mlib_free(dstRowPtr);
0N/A
0N/A return MLIB_SUCCESS;
0N/A}
0N/A
0N/A/***************************************************************/