1/* 2 * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26#if !defined(JAVA2D_NO_MLIB) || defined(MLIB_ADD_SUFF) 27 28#include <vis_proto.h> 29#include "java2d_Mlib.h" 30#include "vis_AlphaMacros.h" 31 32/***************************************************************/ 33 34const mlib_u8 vis_sat_sh3_tbl[128 + 256 + 128] = { 35 0, 0, 0, 0, 0, 0, 0, 0, 36 0, 0, 0, 0, 0, 0, 0, 0, 37 0, 0, 0, 0, 0, 0, 0, 0, 38 0, 0, 0, 0, 0, 0, 0, 0, 39 0, 0, 0, 0, 0, 0, 0, 0, 40 0, 0, 0, 0, 0, 0, 0, 0, 41 0, 0, 0, 0, 0, 0, 0, 0, 42 0, 0, 0, 0, 0, 0, 0, 0, 43 0, 0, 0, 0, 0, 0, 0, 0, 44 0, 0, 0, 0, 0, 0, 0, 0, 45 0, 0, 0, 0, 0, 0, 0, 0, 46 0, 0, 0, 0, 0, 0, 0, 0, 47 0, 0, 0, 0, 0, 0, 0, 0, 48 0, 0, 0, 0, 0, 0, 0, 0, 49 0, 0, 0, 0, 0, 0, 0, 0, 50 0, 0, 0, 0, 0, 0, 0, 0, 51 0, 0, 0, 0, 0, 0, 0, 0, 52 1, 1, 1, 1, 1, 1, 1, 1, 53 2, 2, 2, 2, 2, 2, 2, 2, 54 3, 3, 3, 3, 3, 3, 3, 3, 55 4, 4, 4, 4, 4, 4, 4, 4, 56 5, 5, 5, 5, 5, 5, 5, 5, 57 6, 6, 6, 6, 6, 6, 6, 6, 58 7, 7, 7, 7, 7, 7, 7, 7, 59 8, 8, 8, 8, 8, 8, 8, 8, 60 9, 9, 9, 9, 9, 9, 9, 9, 61 10, 10, 10, 10, 10, 10, 10, 10, 62 11, 11, 11, 11, 11, 11, 11, 11, 63 12, 12, 12, 12, 12, 12, 12, 12, 64 13, 13, 13, 13, 13, 13, 13, 13, 65 14, 14, 14, 14, 14, 14, 14, 14, 66 15, 15, 15, 15, 15, 15, 15, 15, 67 16, 16, 16, 16, 16, 16, 16, 16, 68 17, 17, 17, 17, 17, 17, 17, 17, 69 18, 18, 18, 18, 18, 18, 18, 18, 70 19, 19, 19, 19, 19, 19, 19, 19, 71 20, 20, 20, 20, 20, 20, 20, 20, 72 21, 21, 21, 21, 21, 21, 21, 21, 73 22, 22, 22, 22, 22, 22, 22, 22, 74 23, 23, 23, 23, 23, 23, 23, 23, 75 24, 24, 24, 24, 24, 24, 24, 24, 76 25, 25, 25, 25, 25, 25, 25, 25, 77 26, 26, 26, 26, 26, 26, 26, 26, 78 27, 27, 27, 27, 27, 27, 27, 27, 79 28, 28, 28, 28, 28, 28, 28, 28, 80 29, 29, 29, 29, 29, 29, 29, 29, 81 30, 30, 30, 30, 30, 30, 30, 30, 82 31, 31, 31, 31, 31, 31, 31, 31, 83 31, 31, 31, 31, 31, 31, 31, 31, 84 31, 31, 31, 31, 31, 31, 31, 31, 85 31, 31, 31, 31, 31, 31, 31, 31, 86 31, 31, 31, 31, 31, 31, 31, 31, 87 31, 31, 31, 31, 31, 31, 31, 31, 88 31, 31, 31, 31, 31, 31, 31, 31, 89 31, 31, 31, 31, 31, 31, 31, 31, 90 31, 31, 31, 31, 31, 31, 31, 31, 91 31, 31, 31, 31, 31, 31, 31, 31, 92 31, 31, 31, 31, 31, 31, 31, 31, 93 31, 31, 31, 31, 31, 31, 31, 31, 94 31, 31, 31, 31, 31, 31, 31, 31, 95 31, 31, 31, 31, 31, 31, 31, 31, 96 31, 31, 31, 31, 31, 31, 31, 31, 97 31, 31, 31, 31, 31, 31, 31, 31, 98 31, 31, 31, 31, 31, 31, 31, 31, 99}; 100 101/***************************************************************/ 102 103#define CHECK_LUT 104 105/***************************************************************/ 106 107#define FUNC_CONVERT(FUNC, SRC_T) \ 108void ADD_SUFF(SRC_T##ToByteIndexed##FUNC)(BLIT_PARAMS) \ 109{ \ 110 const mlib_u8 *p_tbl = vis_sat_sh3_tbl + 128; \ 111 mlib_s32 DstWriteXDither, DstWriteYDither; \ 112 mlib_s8 *DstWritererr, *DstWritegerr, *DstWriteberr; \ 113 mlib_u8 *DstWriteInvLut; \ 114 mlib_s32 srcScan = pSrcInfo->scanStride; \ 115 mlib_s32 dstScan = pDstInfo->scanStride; \ 116 mlib_s32 r, g, b; \ 117 mlib_s32 i, j; \ 118 CHECK_LUT \ 119 \ 120 DstWriteYDither = (pDstInfo->bounds.y1 & 7) << 3; \ 121 DstWriteInvLut = pDstInfo->invColorTable; \ 122 \ 123 for (j = 0; j < height; j++) { \ 124 mlib_u8 *pSrc = srcBase; \ 125 mlib_u8 *pDst = dstBase; \ 126 \ 127 DstWritererr = pDstInfo->redErrTable + DstWriteYDither; \ 128 DstWritegerr = pDstInfo->grnErrTable + DstWriteYDither; \ 129 DstWriteberr = pDstInfo->bluErrTable + DstWriteYDither; \ 130 \ 131 DstWriteXDither = pDstInfo->bounds.x1 & 7; \ 132 \ 133 for (i = 0; i < width; i++) { \ 134 GET_RGB_##SRC_T(i) \ 135 { \ 136 r = p_tbl[r + DstWritererr[DstWriteXDither]]; \ 137 g = p_tbl[g + DstWritegerr[DstWriteXDither]]; \ 138 b = p_tbl[b + DstWriteberr[DstWriteXDither]]; \ 139 \ 140 pDst[i] = DstWriteInvLut[(r << 10) + (g << 5) + b]; \ 141 } \ 142 \ 143 DstWriteXDither = (DstWriteXDither + 1) & 7; \ 144 } \ 145 \ 146 PTR_ADD(dstBase, dstScan); \ 147 PTR_ADD(srcBase, srcScan); \ 148 \ 149 DstWriteYDither = (DstWriteYDither + (1 << 3)) & (7 << 3); \ 150 } \ 151} 152 153/***************************************************************/ 154 155#define FUNC_SCALE_CONVERT(FUNC, SRC_T) \ 156void ADD_SUFF(SRC_T##ToByteIndexed##FUNC)(SCALE_PARAMS) \ 157{ \ 158 const mlib_u8 *p_tbl = vis_sat_sh3_tbl + 128; \ 159 mlib_s32 DstWriteXDither, DstWriteYDither; \ 160 mlib_s8 *DstWritererr, *DstWritegerr, *DstWriteberr; \ 161 mlib_u8 *DstWriteInvLut; \ 162 mlib_s32 srcScan = pSrcInfo->scanStride; \ 163 mlib_s32 dstScan = pDstInfo->scanStride; \ 164 mlib_s32 r, g, b; \ 165 mlib_s32 i, j; \ 166 CHECK_LUT \ 167 \ 168 DstWriteYDither = (pDstInfo->bounds.y1 & 7) << 3; \ 169 DstWriteInvLut = pDstInfo->invColorTable; \ 170 \ 171 for (j = 0; j < height; j++) { \ 172 mlib_u8 *pSrc = srcBase; \ 173 mlib_u8 *pDst = dstBase; \ 174 mlib_s32 tmpsxloc = sxloc; \ 175 \ 176 PTR_ADD(pSrc, (syloc >> shift) * srcScan); \ 177 \ 178 DstWritererr = pDstInfo->redErrTable + DstWriteYDither; \ 179 DstWritegerr = pDstInfo->grnErrTable + DstWriteYDither; \ 180 DstWriteberr = pDstInfo->bluErrTable + DstWriteYDither; \ 181 \ 182 DstWriteXDither = pDstInfo->bounds.x1 & 7; \ 183 \ 184 for (i = 0; i < width; i++) { \ 185 mlib_s32 ii = tmpsxloc >> shift; \ 186 GET_RGB_##SRC_T(ii) \ 187 { \ 188 r = p_tbl[r + DstWritererr[DstWriteXDither]]; \ 189 g = p_tbl[g + DstWritegerr[DstWriteXDither]]; \ 190 b = p_tbl[b + DstWriteberr[DstWriteXDither]]; \ 191 \ 192 pDst[i] = DstWriteInvLut[(r << 10) + (g << 5) + b]; \ 193 } \ 194 \ 195 DstWriteXDither = (DstWriteXDither + 1) & 7; \ 196 tmpsxloc += sxinc; \ 197 } \ 198 \ 199 PTR_ADD(dstBase, dstScan); \ 200 syloc += syinc; \ 201 \ 202 DstWriteYDither = (DstWriteYDither + (1 << 3)) & (7 << 3); \ 203 } \ 204} 205 206/***************************************************************/ 207 208#define GET_PIX_IntArgbBm(i) \ 209 mlib_s32 pixel = *(mlib_s32*)(pSrc + 4*i); \ 210 if (pixel >> 24) 211 212#define GET_PIX_ByteIndexedBm(i) \ 213 mlib_s32 pixel = SrcReadLut[pSrc[i]]; \ 214 if (pixel < 0) 215 216#define FUNC_BGCOPY(SRC_T) \ 217void ADD_SUFF(SRC_T##ToByteIndexedXparBgCopy)(BCOPY_PARAMS) \ 218{ \ 219 const mlib_u8 *p_tbl = vis_sat_sh3_tbl + 128; \ 220 mlib_s32 DstWriteXDither, DstWriteYDither; \ 221 mlib_s8 *DstWritererr, *DstWritegerr, *DstWriteberr; \ 222 mlib_u8 *DstWriteInvLut; \ 223 mlib_s32 srcScan = pSrcInfo->scanStride; \ 224 mlib_s32 dstScan = pDstInfo->scanStride; \ 225 mlib_s32 r, g, b; \ 226 mlib_s32 i, j; \ 227 jint *SrcReadLut = pSrcInfo->lutBase; \ 228 \ 229 DstWriteYDither = (pDstInfo->bounds.y1 & 7) << 3; \ 230 DstWriteInvLut = pDstInfo->invColorTable; \ 231 \ 232 for (j = 0; j < height; j++) { \ 233 mlib_u8 *pSrc = srcBase; \ 234 mlib_u8 *pDst = dstBase; \ 235 \ 236 DstWritererr = pDstInfo->redErrTable + DstWriteYDither; \ 237 DstWritegerr = pDstInfo->grnErrTable + DstWriteYDither; \ 238 DstWriteberr = pDstInfo->bluErrTable + DstWriteYDither; \ 239 \ 240 DstWriteXDither = pDstInfo->bounds.x1 & 7; \ 241 \ 242 for (i = 0; i < width; i++) { \ 243 GET_PIX_##SRC_T(i) \ 244 { \ 245 b = (pixel) & 0xff; \ 246 g = (pixel >> 8) & 0xff; \ 247 r = (pixel >> 16) & 0xff; \ 248 \ 249 r = p_tbl[r + DstWritererr[DstWriteXDither]]; \ 250 g = p_tbl[g + DstWritegerr[DstWriteXDither]]; \ 251 b = p_tbl[b + DstWriteberr[DstWriteXDither]]; \ 252 \ 253 pDst[i] = DstWriteInvLut[(r << 10) + (g << 5) + b]; \ 254 } else { \ 255 pDst[i] = bgpixel; \ 256 } \ 257 \ 258 DstWriteXDither = (DstWriteXDither + 1) & 7; \ 259 } \ 260 \ 261 PTR_ADD(dstBase, dstScan); \ 262 PTR_ADD(srcBase, srcScan); \ 263 \ 264 DstWriteYDither = (DstWriteYDither + (1 << 3)) & (7 << 3); \ 265 } \ 266} 267 268FUNC_BGCOPY(ByteIndexedBm) 269FUNC_BGCOPY(IntArgbBm) 270 271/***************************************************************/ 272 273#define GET_RGB_IntArgb(i) \ 274 mlib_u32 pixel = *(mlib_u32*)(pSrc + 4*i); \ 275 b = (pixel) & 0xff; \ 276 g = (pixel >> 8) & 0xff; \ 277 r = (pixel >> 16) & 0xff; 278 279#define GET_RGB_ThreeByteBgr(i) \ 280 b = pSrc[3*i]; \ 281 g = pSrc[3*i + 1]; \ 282 r = pSrc[3*i + 2]; 283 284#define GET_RGB_ByteGray(i) \ 285 r = g = b = pSrc[i]; 286 287#define GET_RGB_Index12Gray(i) \ 288 r = SrcReadLut[((mlib_u16*)pSrc)[i] & 0xfff]; \ 289 r &= 0xff; \ 290 g = b = r; 291 292#define GET_RGB_ByteIndexed(i) \ 293 mlib_u32 pixel = SrcReadLut[pSrc[i]]; \ 294 b = (pixel) & 0xff; \ 295 g = (pixel >> 8) & 0xff; \ 296 r = (pixel >> 16) & 0xff; 297 298#define GET_RGB_IntArgbBm(i) \ 299 mlib_s32 pixel = *(mlib_s32*)(pSrc + 4*i); \ 300 b = (pixel) & 0xff; \ 301 g = (pixel >> 8) & 0xff; \ 302 r = (pixel >> 16) & 0xff; \ 303 if (pixel >> 24) 304 305#define GET_RGB_ByteIndexedBm(i) \ 306 mlib_s32 pixel = SrcReadLut[pSrc[i]]; \ 307 b = (pixel) & 0xff; \ 308 g = (pixel >> 8) & 0xff; \ 309 r = (pixel >> 16) & 0xff; \ 310 if (pixel < 0) 311 312/***************************************************************/ 313 314FUNC_CONVERT(Convert, IntArgb) 315FUNC_CONVERT(Convert, ThreeByteBgr) 316FUNC_CONVERT(Convert, ByteGray) 317FUNC_CONVERT(XparOver, IntArgbBm) 318FUNC_SCALE_CONVERT(ScaleConvert, IntArgb) 319FUNC_SCALE_CONVERT(ScaleConvert, ThreeByteBgr) 320FUNC_SCALE_CONVERT(ScaleConvert, ByteGray) 321FUNC_SCALE_CONVERT(ScaleXparOver, IntArgbBm) 322 323/***************************************************************/ 324 325#undef CHECK_LUT 326#define CHECK_LUT \ 327 jint *SrcReadLut = pSrcInfo->lutBase; 328 329FUNC_CONVERT(Convert, Index12Gray) 330FUNC_SCALE_CONVERT(ScaleConvert, Index12Gray) 331 332FUNC_CONVERT(XparOver, ByteIndexedBm) 333FUNC_SCALE_CONVERT(ScaleXparOver, ByteIndexedBm) 334 335/***************************************************************/ 336 337#undef CHECK_LUT 338#define CHECK_LUT \ 339 jint *SrcReadLut = pSrcInfo->lutBase; \ 340 jint *DstReadLut = pDstInfo->lutBase; \ 341 if (checkSameLut(SrcReadLut, DstReadLut, pSrcInfo, pDstInfo)) { \ 342 ADD_SUFF(AnyByteIsomorphicCopy)(BLIT_CALL_PARAMS); \ 343 return; \ 344 } 345 346FUNC_CONVERT(Convert, ByteIndexed) 347 348#undef CHECK_LUT 349#define CHECK_LUT \ 350 jint *SrcReadLut = pSrcInfo->lutBase; \ 351 jint *DstReadLut = pDstInfo->lutBase; \ 352 if (checkSameLut(SrcReadLut, DstReadLut, pSrcInfo, pDstInfo)) { \ 353 ADD_SUFF(AnyByteIsomorphicScaleCopy)(SCALE_CALL_PARAMS); \ 354 return; \ 355 } 356 357FUNC_SCALE_CONVERT(ScaleConvert, ByteIndexed) 358 359/***************************************************************/ 360 361void ADD_SUFF(IntArgbToByteIndexedXorBlit)(BLIT_PARAMS) 362{ 363 mlib_u8 *DstWriteInvLut; 364 mlib_s32 srcScan = pSrcInfo->scanStride; 365 mlib_s32 dstScan = pDstInfo->scanStride; 366 mlib_s32 xorpixel = pCompInfo->details.xorPixel; 367 mlib_s32 alphamask = pCompInfo->alphaMask; 368 mlib_s32 i, j; 369 370 DstWriteInvLut = pDstInfo->invColorTable; 371 372 for (j = 0; j < height; j++) { 373 mlib_s32 *pSrc = srcBase; 374 mlib_u8 *pDst = dstBase; 375 376 for (i = 0; i < width; i++) { 377 mlib_s32 spix = pSrc[i]; 378 mlib_s32 dpix; 379 if (spix < 0) { 380 dpix = DstWriteInvLut[((spix >> 9) & 0x7C00) + 381 ((spix >> 6) & 0x03E0) + 382 ((spix >> 3) & 0x001F)]; 383 pDst[i] ^= (dpix ^ xorpixel) &~ alphamask; 384 } 385 } 386 387 PTR_ADD(dstBase, dstScan); 388 PTR_ADD(srcBase, srcScan); 389 } 390} 391 392/***************************************************************/ 393 394#define MASK_FILL(rr, pathA, dstA, dstARGB) \ 395{ \ 396 mlib_d64 t0, t1; \ 397 mlib_s32 srcF, dstF, srcA; \ 398 \ 399 srcF = ((dstA & SrcOpAnd) ^ SrcOpXor) + SrcOpAdd; \ 400 \ 401 srcF = MUL8_INT(srcF, pathA); \ 402 dstF = MUL8_INT(dstFbase, pathA) + (0xff - pathA); \ 403 \ 404 srcA = MUL8_INT(cnstA, srcF); \ 405 dstA = MUL8_INT(dstF, dstA); \ 406 \ 407 t0 = MUL8_VIS(cnstARGB0, srcF); \ 408 t1 = MUL8_VIS(dstARGB, dstA); \ 409 rr = vis_fpadd16(t0, t1); \ 410 \ 411 dstA += srcA; \ 412 DIV_ALPHA(rr, dstA); \ 413} 414 415/***************************************************************/ 416 417void ADD_SUFF(ByteIndexedAlphaMaskFill)(void *dstBase, 418 jubyte *pMask, 419 jint maskOff, 420 jint maskScan, 421 jint width, 422 jint height, 423 jint fgColor, 424 SurfaceDataRasInfo *pDstInfo, 425 NativePrimitive *pPrim, 426 CompositeInfo *pCompInfo) 427{ 428 const mlib_u8 *mul8_tbl = (void*)mul8table; 429 const mlib_u8 *p_tbl = vis_sat_sh3_tbl + 128; 430 mlib_s32 DstWriteXDither, DstWriteYDither; 431 mlib_s8 *DstWritererr, *DstWritegerr, *DstWriteberr; 432 mlib_u8 *DstWriteInvLut; 433 mlib_s32 r, g, b; 434 mlib_f32 *DstReadLut = (void*)(pDstInfo->lutBase); 435 mlib_s32 cnstA, cnstR, cnstG, cnstB; 436 mlib_s32 dstScan = pDstInfo->scanStride; 437 mlib_f32 cnstARGB0; 438 mlib_s32 SrcOpAnd, SrcOpXor, SrcOpAdd; 439 mlib_s32 DstOpAnd, DstOpXor, DstOpAdd; 440 mlib_s32 dstFbase; 441 mlib_s32 j; 442 443 cnstA = (fgColor >> 24) & 0xff; 444 cnstR = (fgColor >> 16) & 0xff; 445 cnstG = (fgColor >> 8) & 0xff; 446 cnstB = (fgColor ) & 0xff; 447 448 if (cnstA != 0xff) { 449 cnstR = mul8table[cnstA][cnstR]; 450 cnstG = mul8table[cnstA][cnstG]; 451 cnstB = mul8table[cnstA][cnstB]; 452 } 453 454 cnstARGB0 = F32_FROM_U8x4(cnstA, cnstR, cnstG, cnstB); 455 456 SrcOpAnd = (AlphaRules[pCompInfo->rule].srcOps).andval; 457 SrcOpXor = (AlphaRules[pCompInfo->rule].srcOps).xorval; 458 SrcOpAdd = (AlphaRules[pCompInfo->rule].srcOps).addval; 459 SrcOpAdd -= SrcOpXor; 460 461 DstOpAnd = (AlphaRules[pCompInfo->rule].dstOps).andval; 462 DstOpXor = (AlphaRules[pCompInfo->rule].dstOps).xorval; 463 DstOpAdd = (AlphaRules[pCompInfo->rule].dstOps).addval; 464 DstOpAdd -= DstOpXor; 465 466 dstFbase = (((cnstA) & DstOpAnd) ^ DstOpXor) + DstOpAdd; 467 468 vis_write_gsr(7 << 3); 469 470 if (pMask != NULL) { 471 DstWriteYDither = (pDstInfo->bounds.y1 & 7) << 3; 472 DstWriteInvLut = pDstInfo->invColorTable; 473 474 pMask += maskOff; 475 476 if (dstScan == width && maskScan == width) { 477 width *= height; 478 height = 1; 479 } 480 481 for (j = 0; j < height; j++) { 482 mlib_u8 *pDst = dstBase; 483 mlib_s32 i; 484 mlib_s32 pathA0, dstA0, dst_val, pixel; 485 mlib_d64 res0; 486 mlib_f32 dstARGB0; 487 488 DstWritererr = pDstInfo->redErrTable + DstWriteYDither; 489 DstWritegerr = pDstInfo->grnErrTable + DstWriteYDither; 490 DstWriteberr = pDstInfo->bluErrTable + DstWriteYDither; 491 492 DstWriteXDither = pDstInfo->bounds.x1 & 7; 493 494#pragma pipeloop(0) 495 for (i = 0; i < width; i++) { 496 dst_val = pDst[i]; 497 pathA0 = pMask[i]; 498 dstA0 = *(mlib_u8*)(DstReadLut + dst_val); 499 dstARGB0 = DstReadLut[dst_val]; 500 MASK_FILL(res0, pathA0, dstA0, dstARGB0); 501 dstARGB0 = vis_fpack16(res0); 502 503 pixel = *(mlib_s32*)&dstARGB0; 504 b = (pixel) & 0xff; 505 g = (pixel >> 8) & 0xff; 506 r = (pixel >> 16) & 0xff; 507 r = p_tbl[r + DstWritererr[DstWriteXDither]]; 508 g = p_tbl[g + DstWritegerr[DstWriteXDither]]; 509 b = p_tbl[b + DstWriteberr[DstWriteXDither]]; 510 pDst[i] = DstWriteInvLut[(r << 10) + (g << 5) + b]; 511 512 DstWriteXDither = (DstWriteXDither + 1) & 7; 513 } 514 515 PTR_ADD(dstBase, dstScan); 516 PTR_ADD(pMask, maskScan); 517 DstWriteYDither = (DstWriteYDither + (1 << 3)) & (7 << 3); 518 } 519 }/* else { 520 if (dstScan == 4*width) { 521 width *= height; 522 height = 1; 523 } 524 525 for (j = 0; j < height; j++) { 526 IntArgbAlphaMaskFill_A1_line(dstBase, pMask, width, 527 cnstARGB0, 528 log_val, mul8_cnstA, mul8_dstF, 529 (void*)mul8table); 530 531 PTR_ADD(dstBase, dstScan); 532 } 533 }*/ 534} 535 536/***************************************************************/ 537 538#endif 539