11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2007 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkScaledBitmapSampler.h" 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBitmap.h" 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkColorPriv.h" 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDither.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// 8888 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_Gray_D8888(void* SK_RESTRICT dstRow, 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 19e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPackARGB32(0xFF, src[0], src[0], src[0]); 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBx_D8888(void* SK_RESTRICT dstRow, 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 30e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPackARGB32(0xFF, src[0], src[1], src[2]); 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBA_D8888(void* SK_RESTRICT dstRow, 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 41e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned alphaMask = 0xFF; 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned alpha = src[3]; 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPreMultiplyARGB(alpha, src[0], src[1], src[2]); 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project alphaMask &= alpha; 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return alphaMask != 0xFF; 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// 565 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_Gray_D565(void* SK_RESTRICT dstRow, 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 57e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint16_t* SK_RESTRICT dst = (uint16_t*)dstRow; 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPack888ToRGB16(src[0], src[0], src[0]); 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_Gray_D565_D(void* SK_RESTRICT dstRow, 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 68e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int y, const SkPMColor[]) { 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint16_t* SK_RESTRICT dst = (uint16_t*)dstRow; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DITHER_565_SCAN(y); 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkDitherRGBTo565(src[0], src[0], src[0], DITHER_VALUE(x)); 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBx_D565(void* SK_RESTRICT dstRow, 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 80e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint16_t* SK_RESTRICT dst = (uint16_t*)dstRow; 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPack888ToRGB16(src[0], src[1], src[2]); 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 8958693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chenstatic bool Sample_D565_D565(void* SK_RESTRICT dstRow, 9058693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen const uint8_t* SK_RESTRICT src, 9158693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen int width, int deltaSrc, int, const SkPMColor[]) { 9258693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen uint16_t* SK_RESTRICT dst = (uint16_t*)dstRow; 9358693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen uint16_t* SK_RESTRICT castedSrc = (uint16_t*) src; 9458693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen for (int x = 0; x < width; x++) { 9558693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen dst[x] = castedSrc[0]; 9658693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen castedSrc += deltaSrc >> 1; 9758693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen } 9858693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen return false; 9958693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen} 10058693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBx_D565_D(void* SK_RESTRICT dstRow, 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 103e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int y, const SkPMColor[]) { 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint16_t* SK_RESTRICT dst = (uint16_t*)dstRow; 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DITHER_565_SCAN(y); 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkDitherRGBTo565(src[0], src[1], src[2], DITHER_VALUE(x)); 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// 4444 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_Gray_D4444(void* SK_RESTRICT dstRow, 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 117e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor16* SK_RESTRICT dst = (SkPMColor16*)dstRow; 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned gray = src[0] >> 4; 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPackARGB4444(0xF, gray, gray, gray); 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_Gray_D4444_D(void* SK_RESTRICT dstRow, 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 129e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int y, const SkPMColor[]) { 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor16* SK_RESTRICT dst = (SkPMColor16*)dstRow; 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DITHER_4444_SCAN(y); 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkDitherARGB32To4444(0xFF, src[0], src[0], src[0], 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DITHER_VALUE(x)); 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBx_D4444(void* SK_RESTRICT dstRow, 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 142e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor16* SK_RESTRICT dst = (SkPMColor16*)dstRow; 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPackARGB4444(0xF, src[0] >> 4, src[1] >> 4, src[2] >> 4); 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBx_D4444_D(void* SK_RESTRICT dstRow, 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 153e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int y, const SkPMColor[]) { 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor16* dst = (SkPMColor16*)dstRow; 1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DITHER_4444_SCAN(y); 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkDitherARGB32To4444(0xFF, src[0], src[1], src[2], 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DITHER_VALUE(x)); 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBA_D4444(void* SK_RESTRICT dstRow, 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 167e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor16* SK_RESTRICT dst = (SkPMColor16*)dstRow; 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned alphaMask = 0xFF; 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned alpha = src[3]; 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor c = SkPreMultiplyARGB(alpha, src[0], src[1], src[2]); 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkPixel32ToPixel4444(c); 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project alphaMask &= alpha; 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return alphaMask != 0xFF; 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_RGBA_D4444_D(void* SK_RESTRICT dstRow, 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 183e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int y, const SkPMColor[]) { 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor16* SK_RESTRICT dst = (SkPMColor16*)dstRow; 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned alphaMask = 0xFF; 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DITHER_4444_SCAN(y); 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned alpha = src[3]; 1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor c = SkPreMultiplyARGB(alpha, src[0], src[1], src[2]); 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = SkDitherARGB32To4444(c, DITHER_VALUE(x)); 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project alphaMask &= alpha; 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return alphaMask != 0xFF; 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// Index 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2003026a9ec59b285412941d278a570e382088f8adaMike Reed#define A32_MASK_IN_PLACE (SkPMColor)(SK_A32_MASK << SK_A32_SHIFT) 201e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 202e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reedstatic bool Sample_Index_D8888(void* SK_RESTRICT dstRow, 203e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed const uint8_t* SK_RESTRICT src, 204e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor ctable[]) { 205e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 206e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; 207e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor cc = A32_MASK_IN_PLACE; 208e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed for (int x = 0; x < width; x++) { 209e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor c = ctable[*src]; 210e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed cc &= c; 211e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed dst[x] = c; 212e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed src += deltaSrc; 213e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed } 214e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed return cc != A32_MASK_IN_PLACE; 215e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed} 216e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 217e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reedstatic bool Sample_Index_D565(void* SK_RESTRICT dstRow, 218e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed const uint8_t* SK_RESTRICT src, 219e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor ctable[]) { 220e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 221e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed uint16_t* SK_RESTRICT dst = (uint16_t*)dstRow; 222e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed for (int x = 0; x < width; x++) { 223e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed dst[x] = SkPixel32ToPixel16(ctable[*src]); 224e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed src += deltaSrc; 225e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed } 226e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed return false; 227e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed} 228e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 229e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reedstatic bool Sample_Index_D565_D(void* SK_RESTRICT dstRow, 230e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed const uint8_t* SK_RESTRICT src, int width, 231e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int deltaSrc, int y, const SkPMColor ctable[]) { 232e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 233e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed uint16_t* SK_RESTRICT dst = (uint16_t*)dstRow; 234e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed DITHER_565_SCAN(y); 235e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 236e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed for (int x = 0; x < width; x++) { 237e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor c = ctable[*src]; 238e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed dst[x] = SkDitherRGBTo565(SkGetPackedR32(c), SkGetPackedG32(c), 239e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkGetPackedB32(c), DITHER_VALUE(x)); 240e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed src += deltaSrc; 241e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed } 242e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed return false; 243e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed} 244e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 245e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reedstatic bool Sample_Index_D4444(void* SK_RESTRICT dstRow, 246e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed const uint8_t* SK_RESTRICT src, int width, 247e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int deltaSrc, int y, const SkPMColor ctable[]) { 248e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 249e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor16* SK_RESTRICT dst = (SkPMColor16*)dstRow; 250e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor cc = A32_MASK_IN_PLACE; 251e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed for (int x = 0; x < width; x++) { 252e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor c = ctable[*src]; 253e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed cc &= c; 254e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed dst[x] = SkPixel32ToPixel4444(c); 255e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed src += deltaSrc; 256e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed } 257e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed return cc != A32_MASK_IN_PLACE; 258e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed} 259e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 260e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reedstatic bool Sample_Index_D4444_D(void* SK_RESTRICT dstRow, 261e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed const uint8_t* SK_RESTRICT src, int width, 262e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int deltaSrc, int y, const SkPMColor ctable[]) { 263e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 264e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor16* SK_RESTRICT dst = (SkPMColor16*)dstRow; 265e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor cc = A32_MASK_IN_PLACE; 266e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed DITHER_4444_SCAN(y); 267e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 268e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed for (int x = 0; x < width; x++) { 269e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed SkPMColor c = ctable[*src]; 270e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed cc &= c; 271e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed dst[x] = SkDitherARGB32To4444(c, DITHER_VALUE(x)); 272e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed src += deltaSrc; 273e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed } 274e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed return cc != A32_MASK_IN_PLACE; 275e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed} 276e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 2770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool Sample_Index_DI(void* SK_RESTRICT dstRow, 2780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t* SK_RESTRICT src, 279e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed int width, int deltaSrc, int, const SkPMColor[]) { 2800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (1 == deltaSrc) { 2810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project memcpy(dstRow, src, width); 2820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else { 2830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint8_t* SK_RESTRICT dst = (uint8_t*)dstRow; 2840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int x = 0; x < width; x++) { 2850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst[x] = src[0]; 2860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project src += deltaSrc; 2870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 2900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 2930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkScaledBitmapSampler.h" 2950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkScaledBitmapSampler::SkScaledBitmapSampler(int width, int height, 2970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int sampleSize) { 2980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (width <= 0 || height <= 0) { 2990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project sk_throw(); 3000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (sampleSize <= 1) { 3030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fScaledWidth = width; 3040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fScaledHeight = height; 3050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fX0 = fY0 = 0; 3060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDX = fDY = 1; 3070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return; 3080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int dx = SkMin32(sampleSize, width); 3110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int dy = SkMin32(sampleSize, height); 3120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fScaledWidth = width / dx; 3140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fScaledHeight = height / dy; 3150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fScaledWidth > 0); 3170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fScaledHeight > 0); 3180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fX0 = dx >> 1; 3200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fY0 = dy >> 1; 3210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fX0 >= 0 && fX0 < width); 3230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fY0 >= 0 && fY0 < height); 3240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDX = dx; 3260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDY = dy; 3270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fDX > 0 && (fX0 + fDX * (fScaledWidth - 1)) < width); 3290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fDY > 0 && (fY0 + fDY * (fScaledHeight - 1)) < height); 3300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fRowProc = NULL; 332e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed fCTable = NULL; 3330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 335e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reedbool SkScaledBitmapSampler::begin(SkBitmap* dst, SrcConfig sc, bool dither, 336e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed const SkPMColor ctable[]) { 3370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static const RowProc gProcs[] = { 3380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // 8888 (no dither distinction) 3390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_Gray_D8888, Sample_Gray_D8888, 3400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_RGBx_D8888, Sample_RGBx_D8888, 3410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_RGBA_D8888, Sample_RGBA_D8888, 342e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed Sample_Index_D8888, Sample_Index_D8888, 34358693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen NULL, NULL, 3440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // 565 (no alpha distinction) 3450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_Gray_D565, Sample_Gray_D565_D, 3460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_RGBx_D565, Sample_RGBx_D565_D, 3470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_RGBx_D565, Sample_RGBx_D565_D, 348e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed Sample_Index_D565, Sample_Index_D565_D, 34958693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen Sample_D565_D565, Sample_D565_D565, 3500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // 4444 3510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_Gray_D4444, Sample_Gray_D4444_D, 3520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_RGBx_D4444, Sample_RGBx_D4444_D, 3530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_RGBA_D4444, Sample_RGBA_D4444_D, 354e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed Sample_Index_D4444, Sample_Index_D4444_D, 35558693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen NULL, NULL, 3560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // Index8 3570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project NULL, NULL, 3580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project NULL, NULL, 3590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project NULL, NULL, 3600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sample_Index_DI, Sample_Index_DI, 36158693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen NULL, NULL, 3620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 3630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 364e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed fCTable = ctable; 365e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed 3660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int index = 0; 3670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (dither) { 3680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project index += 1; 3690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (sc) { 3710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkScaledBitmapSampler::kGray: 3720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fSrcPixelSize = 1; 3730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project index += 0; 3740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 3750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkScaledBitmapSampler::kRGB: 3760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fSrcPixelSize = 3; 3770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project index += 2; 3780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 3790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkScaledBitmapSampler::kRGBX: 3800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fSrcPixelSize = 4; 3810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project index += 2; 3820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 3830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkScaledBitmapSampler::kRGBA: 3840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fSrcPixelSize = 4; 3850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project index += 4; 3860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 3870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkScaledBitmapSampler::kIndex: 3880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fSrcPixelSize = 1; 3890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project index += 6; 3900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 39158693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen case SkScaledBitmapSampler::kRGB_565: 39258693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen fSrcPixelSize = 2; 39358693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen index += 8; 39458693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen break; 3950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 3960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 3970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (dst->config()) { 4000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kARGB_8888_Config: 4010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project index += 0; 4020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 4030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kRGB_565_Config: 40458693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen index += 10; 4050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 4060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kARGB_4444_Config: 40758693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen index += 20; 4080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 4090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kIndex8_Config: 41058693709950812bc0d8213647485789aa15cb5e5Wei-Ta Chen index += 30; 4110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 4120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 4130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 4140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fRowProc = gProcs[index]; 4170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDstRow = (char*)dst->getPixels(); 4180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDstRowBytes = dst->rowBytes(); 4190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fCurrY = 0; 4200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return fRowProc != NULL; 4210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 4220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkScaledBitmapSampler::next(const uint8_t* SK_RESTRICT src) { 4240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT((unsigned)fCurrY < (unsigned)fScaledHeight); 4250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool hadAlpha = fRowProc(fDstRow, src + fX0 * fSrcPixelSize, fScaledWidth, 427e762975133c7c9f529b996b3b1fee8b8910dc650Mike Reed fDX * fSrcPixelSize, fCurrY, fCTable); 4280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDstRow += fDstRowBytes; 4290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fCurrY += 1; 4300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return hadAlpha; 4310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 432