SkBitmapProcState_sample.h revision 46402f8ee247238d734cdd90b8770caa46862a06
10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkUtils.h"
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if DSTSIZE==32
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define DSTTYPE SkPMColor
50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#elif DSTSIZE==16
60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define DSTTYPE uint16_t
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #error "need DSTSIZE to be 32 or 16"
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if (DSTSIZE == 32)
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define BITMAPPROC_MEMSET(ptr, value, n) sk_memset32(ptr, value, n)
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#elif (DSTSIZE == 16)
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define BITMAPPROC_MEMSET(ptr, value, n) sk_memset16(ptr, value, n)
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #error "unsupported DSTSIZE"
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic void MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s,
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                     const uint32_t* SK_RESTRICT xy,
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                     int count, DSTTYPE* SK_RESTRICT colors) {
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(count > 0 && colors != NULL);
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(s.fDoFilter == false);
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDEBUGCODE(CHECKSTATE(s);)
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PREAMBLE(s);
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels();
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int i, rb = s.fBitmap->rowBytes();
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    uint32_t XY;
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SRCTYPE src;
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (i = (count >> 1); i > 0; --i) {
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        XY = *xy++;
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() &&
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                 (XY & 0xFFFF) < (unsigned)s.fBitmap->width());
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF];
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        *colors++ = RETURNDST(src);
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        XY = *xy++;
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() &&
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                 (XY & 0xFFFF) < (unsigned)s.fBitmap->width());
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF];
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        *colors++ = RETURNDST(src);
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (count & 1) {
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
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    POSTAMBLE(s);
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic void MAKENAME(_nofilter_DX)(const SkBitmapProcState& s,
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                   const uint32_t* SK_RESTRICT xy,
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                   int count, DSTTYPE* SK_RESTRICT colors) {
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(count > 0 && colors != NULL);
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(s.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask));
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(s.fDoFilter == false);
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDEBUGCODE(CHECKSTATE(s);)
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PREAMBLE(s);
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SRCTYPE* SK_RESTRICT srcAddr = (const SRCTYPE*)s.fBitmap->getPixels();
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // buffer is y32, x16, x16, x16, x16, x16
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // bump srcAddr to the proper row, since we're told Y never changes
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT((unsigned)xy[0] < (unsigned)s.fBitmap->height());
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    srcAddr = (const SRCTYPE*)((const char*)srcAddr +
780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                                xy[0] * s.fBitmap->rowBytes());
7946402f8ee247238d734cdd90b8770caa46862a06Mike Reed    xy += 1;
800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SRCTYPE src;
820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (1 == s.fBitmap->width()) {
840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        src = srcAddr[0];
850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        DSTTYPE dstValue = RETURNDST(src);
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        BITMAPPROC_MEMSET(colors, dstValue, count);
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    } else {
880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        int i;
890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        for (i = (count >> 2); i > 0; --i) {
9046402f8ee247238d734cdd90b8770caa46862a06Mike Reed            uint32_t xx0 = *xy++;
9146402f8ee247238d734cdd90b8770caa46862a06Mike Reed            uint32_t xx1 = *xy++;
9246402f8ee247238d734cdd90b8770caa46862a06Mike Reed            SRCTYPE x0 = srcAddr[UNPACK_PRIMARY_SHORT(xx0)];
9346402f8ee247238d734cdd90b8770caa46862a06Mike Reed            SRCTYPE x1 = srcAddr[UNPACK_SECONDARY_SHORT(xx0)];
9446402f8ee247238d734cdd90b8770caa46862a06Mike Reed            SRCTYPE x2 = srcAddr[UNPACK_PRIMARY_SHORT(xx1)];
9546402f8ee247238d734cdd90b8770caa46862a06Mike Reed            SRCTYPE x3 = srcAddr[UNPACK_SECONDARY_SHORT(xx1)];
960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
9746402f8ee247238d734cdd90b8770caa46862a06Mike Reed            *colors++ = RETURNDST(x0);
9846402f8ee247238d734cdd90b8770caa46862a06Mike Reed            *colors++ = RETURNDST(x1);
9946402f8ee247238d734cdd90b8770caa46862a06Mike Reed            *colors++ = RETURNDST(x2);
10046402f8ee247238d734cdd90b8770caa46862a06Mike Reed            *colors++ = RETURNDST(x3);
1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
10246402f8ee247238d734cdd90b8770caa46862a06Mike Reed        const uint16_t* SK_RESTRICT xx = (const uint16_t*)(xy);
1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        for (i = (count & 3); i > 0; --i) {
1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(*xx < (unsigned)s.fBitmap->width());
1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            src = srcAddr[*xx++]; *colors++ = RETURNDST(src);
1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE
1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    POSTAMBLE(s);
1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic void MAKENAME(_filter_DX)(const SkBitmapProcState& s,
1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                 const uint32_t* SK_RESTRICT xy,
1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                  int count, DSTTYPE* SK_RESTRICT colors) {
1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(count > 0 && colors != NULL);
1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(s.fDoFilter);
1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDEBUGCODE(CHECKSTATE(s);)
1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE
1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PREAMBLE(s);
1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels();
1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    unsigned rb = s.fBitmap->rowBytes();
1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    unsigned subY;
1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SRCTYPE* SK_RESTRICT row0;
1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SRCTYPE* SK_RESTRICT row1;
1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // setup row ptrs and update proc_table
1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        uint32_t XY = *xy++;
1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned y0 = XY >> 14;
1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        row0 = (const SRCTYPE*)(srcAddr + (y0 >> 4) * rb);
1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        row1 = (const SRCTYPE*)(srcAddr + (XY & 0x3FFF) * rb);
1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        subY = y0 & 0xF;
1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    do {
1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        uint32_t XX = *xy++;    // x0:14 | 4 | x1:14
1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned x0 = XX >> 14;
1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned x1 = XX & 0x3FFF;
1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned subX = x0 & 0xF;
1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        x0 >>= 4;
1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
14846402f8ee247238d734cdd90b8770caa46862a06Mike Reed        FILTER_PROC(subX, subY,
14946402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row0[x0]),
15046402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row0[x1]),
15146402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row1[x0]),
15246402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row1[x1]),
15346402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    colors);
15446402f8ee247238d734cdd90b8770caa46862a06Mike Reed        colors += 1;
1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    } while (--count != 0);
1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE
1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    POSTAMBLE(s);
1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic void MAKENAME(_filter_DXDY)(const SkBitmapProcState& s,
1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                   const uint32_t* SK_RESTRICT xy,
1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                   int count, DSTTYPE* SK_RESTRICT colors) {
1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(count > 0 && colors != NULL);
1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(s.fDoFilter);
1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDEBUGCODE(CHECKSTATE(s);)
1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE
1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        PREAMBLE(s);
1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels();
1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int rb = s.fBitmap->rowBytes();
1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    do {
1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        uint32_t data = *xy++;
1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned y0 = data >> 14;
1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned y1 = data & 0x3FFF;
1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned subY = y0 & 0xF;
1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        y0 >>= 4;
1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        data = *xy++;
1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned x0 = data >> 14;
1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned x1 = data & 0x3FFF;
1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        unsigned subX = x0 & 0xF;
1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        x0 >>= 4;
1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const SRCTYPE* SK_RESTRICT row0 = (const SRCTYPE*)(srcAddr + y0 * rb);
1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const SRCTYPE* SK_RESTRICT row1 = (const SRCTYPE*)(srcAddr + y1 * rb);
1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
19146402f8ee247238d734cdd90b8770caa46862a06Mike Reed        FILTER_PROC(subX, subY,
19246402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row0[x0]),
19346402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row0[x1]),
19446402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row1[x0]),
19546402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    SRC_TO_FILTER(row1[x1]),
19646402f8ee247238d734cdd90b8770caa46862a06Mike Reed                    colors);
19746402f8ee247238d734cdd90b8770caa46862a06Mike Reed        colors += 1;
1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    } while (--count != 0);
1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE
2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    POSTAMBLE(s);
2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef MAKENAME
2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef DSTSIZE
2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef DSTTYPE
2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef SRCTYPE
2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CHECKSTATE
2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef RETURNDST
2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef SRC_TO_FILTER
2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef FILTER_TO_DST
2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef PREAMBLE
2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #undef PREAMBLE
2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef POSTAMBLE
2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #undef POSTAMBLE
2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef FILTER_PROC_TYPE
2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_TABLE
2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_ROW
2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_ROW_PROC
2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef GET_FILTER_PROC
2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef BITMAPPROC_MEMSET
227