void convertYUV410ToRGB(byte *dstPtr, int dstPitch, const YUVToRGBLookup *lookup, int16 *colorTab, const byte *ySrc, const byte *uSrc, const byte *vSrc, int yWidth, int yHeight, int yPitch, int uvPitch) { // Keep the tables in pointers here to avoid a dereference on each pixel const int16 *Cr_r_tab = colorTab; const int16 *Cr_g_tab = Cr_r_tab + 256; const int16 *Cb_g_tab = Cr_g_tab + 256; const int16 *Cb_b_tab = Cb_g_tab + 256; const uint32 *rgbToPix = lookup->getRGBToPix(); int quarterWidth = yWidth >> 2; for (int y = 0; y < yHeight; y++) { for (int x = 0; x < quarterWidth; x++) { // Perform bilinear interpolation on the the chroma values // Based on the algorithm found here: http://tech-algorithm.com/articles/bilinear-image-scaling/ // Feel free to optimize further int targetY = y >> 2; int xDiff = 0; int yDiff = y & 3; int index = targetY * uvPitch + x; // Declare some variables for the following macros byte u, v; int16 cr_r, crb_g, cb_b; register const uint32 *L; READ_QUAD(uSrc, u); READ_QUAD(vSrc, v); DO_YUV410_PIXEL(); DO_YUV410_PIXEL(); DO_YUV410_PIXEL(); DO_YUV410_PIXEL(); } dstPtr += dstPitch - yWidth * sizeof(PixelInt); ySrc += yPitch - yWidth; } }
{ &ERASE_SECTOR_64K(0, _64K, 104), 0 }, &spi_driver_general, }, { "N25Q032", {0x20, 0xba, 0x16}, 3, (_64K * 64), _64K, 3, { &READ_STD(0, INFINITE, 32/*54*/), &READ_FAST(1, INFINITE, 64/*108*/), &READ_DUAL(1, INFINITE, 64/*108*/), &READ_QUAD(1, INFINITE, 64/*108*/), &READ_DUAL_ADDR(2, INFINITE, 64/*108*/), &READ_QUAD_ADDR(5, INFINITE, 64/*108*/), 0 }, { &WRITE_STD(0, 256, 64/*108*/), &WRITE_DUAL(0, 256, 64/*108*/), &WRITE_QUAD(0, 256, 64/*108*/), &WRITE_DUAL_ADDR(0, 256, 64/*108*/), &WRITE_QUAD_ADDR(0, 256, 64/*108*/), 0 }, {
{ &ERASE_SECTOR_256K(0, _256K, 104), 0 }, &spi_driver_general, }, { "S25FL129P1/S25FL128S", {0x01, 0x20, 0x18, 0x4d, 0x01}, 5, (_64K * 256), _64K, 3, { &READ_STD(0, INFINITE, 40), &READ_FAST(1, INFINITE, 104), &READ_DUAL(1, INFINITE, 64), &READ_DUAL_ADDR(1, INFINITE, 80), &READ_QUAD(1, INFINITE, 80), &READ_QUAD_ADDR(3, INFINITE, 80), 0 }, { &WRITE_STD(0, 256, 104), &WRITE_QUAD(0, 256, 80), 0 }, { &ERASE_SECTOR_64K(0, _64K, 104), 0 }, &spi_driver_general,