11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkUtils.h" 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if DSTSIZE==32 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #define DSTTYPE SkPMColor 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#elif DSTSIZE==16 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #define DSTTYPE uint16_t 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #error "need DSTSIZE to be 32 or 16" 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if (DSTSIZE == 32) 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #define BITMAPPROC_MEMSET(ptr, value, n) sk_memset32(ptr, value, n) 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#elif (DSTSIZE == 16) 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #define BITMAPPROC_MEMSET(ptr, value, n) sk_memset16(ptr, value, n) 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #error "unsupported DSTSIZE" 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 26030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reedvoid MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s, 27030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed const uint32_t* SK_RESTRICT xy, 28030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed int count, DSTTYPE* SK_RESTRICT colors) { 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(count > 0 && colors != NULL); 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(s.fDoFilter == false); 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDEBUGCODE(CHECKSTATE(s);) 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project PREAMBLE(s); 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int i, rb = s.fBitmap->rowBytes(); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint32_t XY; 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SRCTYPE src; 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (i = (count >> 1); i > 0; --i) { 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project XY = *xy++; 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() && 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project (XY & 0xFFFF) < (unsigned)s.fBitmap->width()); 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *colors++ = RETURNDST(src); 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project XY = *xy++; 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() && 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project (XY & 0xFFFF) < (unsigned)s.fBitmap->width()); 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *colors++ = RETURNDST(src); 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (count & 1) { 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project XY = *xy++; 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() && 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project (XY & 0xFFFF) < (unsigned)s.fBitmap->width()); 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *colors++ = RETURNDST(src); 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project POSTAMBLE(s); 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 68030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reedvoid MAKENAME(_nofilter_DX)(const SkBitmapProcState& s, 69030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed const uint32_t* SK_RESTRICT xy, 70030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed int count, DSTTYPE* SK_RESTRICT colors) { 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(count > 0 && colors != NULL); 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(s.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(s.fDoFilter == false); 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDEBUGCODE(CHECKSTATE(s);) 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project PREAMBLE(s); 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SRCTYPE* SK_RESTRICT srcAddr = (const SRCTYPE*)s.fBitmap->getPixels(); 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // buffer is y32, x16, x16, x16, x16, x16 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // bump srcAddr to the proper row, since we're told Y never changes 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT((unsigned)xy[0] < (unsigned)s.fBitmap->height()); 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project srcAddr = (const SRCTYPE*)((const char*)srcAddr + 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project xy[0] * s.fBitmap->rowBytes()); 8646402f8ee247238d734cdd90b8770caa46862a06Mike Reed xy += 1; 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SRCTYPE src; 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (1 == s.fBitmap->width()) { 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src = srcAddr[0]; 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DSTTYPE dstValue = RETURNDST(src); 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project BITMAPPROC_MEMSET(colors, dstValue, count); 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else { 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int i; 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (i = (count >> 2); i > 0; --i) { 9746402f8ee247238d734cdd90b8770caa46862a06Mike Reed uint32_t xx0 = *xy++; 9846402f8ee247238d734cdd90b8770caa46862a06Mike Reed uint32_t xx1 = *xy++; 9946402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRCTYPE x0 = srcAddr[UNPACK_PRIMARY_SHORT(xx0)]; 10046402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRCTYPE x1 = srcAddr[UNPACK_SECONDARY_SHORT(xx0)]; 10146402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRCTYPE x2 = srcAddr[UNPACK_PRIMARY_SHORT(xx1)]; 10246402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRCTYPE x3 = srcAddr[UNPACK_SECONDARY_SHORT(xx1)]; 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 10446402f8ee247238d734cdd90b8770caa46862a06Mike Reed *colors++ = RETURNDST(x0); 10546402f8ee247238d734cdd90b8770caa46862a06Mike Reed *colors++ = RETURNDST(x1); 10646402f8ee247238d734cdd90b8770caa46862a06Mike Reed *colors++ = RETURNDST(x2); 10746402f8ee247238d734cdd90b8770caa46862a06Mike Reed *colors++ = RETURNDST(x3); 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 10946402f8ee247238d734cdd90b8770caa46862a06Mike Reed const uint16_t* SK_RESTRICT xx = (const uint16_t*)(xy); 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (i = (count & 3); i > 0; --i) { 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(*xx < (unsigned)s.fBitmap->width()); 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src = srcAddr[*xx++]; *colors++ = RETURNDST(src); 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project POSTAMBLE(s); 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 123030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reedvoid MAKENAME(_filter_DX)(const SkBitmapProcState& s, 124030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed const uint32_t* SK_RESTRICT xy, 125030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed int count, DSTTYPE* SK_RESTRICT colors) { 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(count > 0 && colors != NULL); 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(s.fDoFilter); 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDEBUGCODE(CHECKSTATE(s);) 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project PREAMBLE(s); 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned rb = s.fBitmap->rowBytes(); 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned subY; 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SRCTYPE* SK_RESTRICT row0; 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SRCTYPE* SK_RESTRICT row1; 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // setup row ptrs and update proc_table 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint32_t XY = *xy++; 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned y0 = XY >> 14; 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project row0 = (const SRCTYPE*)(srcAddr + (y0 >> 4) * rb); 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project row1 = (const SRCTYPE*)(srcAddr + (XY & 0x3FFF) * rb); 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project subY = y0 & 0xF; 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project do { 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint32_t XX = *xy++; // x0:14 | 4 | x1:14 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned x0 = XX >> 14; 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned x1 = XX & 0x3FFF; 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned subX = x0 & 0xF; 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project x0 >>= 4; 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 15546402f8ee247238d734cdd90b8770caa46862a06Mike Reed FILTER_PROC(subX, subY, 15646402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row0[x0]), 15746402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row0[x1]), 15846402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row1[x0]), 15946402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row1[x1]), 16046402f8ee247238d734cdd90b8770caa46862a06Mike Reed colors); 16146402f8ee247238d734cdd90b8770caa46862a06Mike Reed colors += 1; 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } while (--count != 0); 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project POSTAMBLE(s); 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 169030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reedvoid MAKENAME(_filter_DXDY)(const SkBitmapProcState& s, 170030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed const uint32_t* SK_RESTRICT xy, 171030ffe05175291b1d91ec6808e1a32e862ee90cdMike Reed int count, DSTTYPE* SK_RESTRICT colors) { 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(count > 0 && colors != NULL); 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(s.fDoFilter); 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDEBUGCODE(CHECKSTATE(s);) 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project PREAMBLE(s); 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int rb = s.fBitmap->rowBytes(); 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project do { 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint32_t data = *xy++; 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned y0 = data >> 14; 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned y1 = data & 0x3FFF; 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned subY = y0 & 0xF; 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project y0 >>= 4; 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project data = *xy++; 1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned x0 = data >> 14; 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned x1 = data & 0x3FFF; 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned subX = x0 & 0xF; 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project x0 >>= 4; 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SRCTYPE* SK_RESTRICT row0 = (const SRCTYPE*)(srcAddr + y0 * rb); 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SRCTYPE* SK_RESTRICT row1 = (const SRCTYPE*)(srcAddr + y1 * rb); 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 19846402f8ee247238d734cdd90b8770caa46862a06Mike Reed FILTER_PROC(subX, subY, 19946402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row0[x0]), 20046402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row0[x1]), 20146402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row1[x0]), 20246402f8ee247238d734cdd90b8770caa46862a06Mike Reed SRC_TO_FILTER(row1[x1]), 20346402f8ee247238d734cdd90b8770caa46862a06Mike Reed colors); 20446402f8ee247238d734cdd90b8770caa46862a06Mike Reed colors += 1; 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } while (--count != 0); 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project POSTAMBLE(s); 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef MAKENAME 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef DSTSIZE 2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef DSTTYPE 2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef SRCTYPE 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CHECKSTATE 2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef RETURNDST 2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef SRC_TO_FILTER 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef FILTER_TO_DST 2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #undef PREAMBLE 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE 2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #undef POSTAMBLE 2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef FILTER_PROC_TYPE 2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_TABLE 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_ROW 2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_ROW_PROC 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_PROC 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef BITMAPPROC_MEMSET 234