// Convert int PuzzleTV::draw(YUV* src_yuv, RGB32* dst_rgb, char* dst_msg) { LOGI("%s(L=%d)", __func__, __LINE__); RGB32* src_rgb = mUtils->yuv_YUVtoRGB(src_yuv); memset(dst_rgb, 0, video_area * PIXEL_SIZE); if (autoSolveTimer == 0) { autoSolve(); } else { autoSolveTimer--; } for (int i=0; i<blockNum; i++) { if (i == movingBlock || i == spaceBlock) { RGB32* q = dst_rgb + blocks[i].destOffset; for (int y=0; y<blockSizeH; y++) { memset(q, 0, blockSizeW * PIXEL_SIZE); q += video_width; } } else { copyBlockImage(src_rgb + blocks[i].srcOffset, dst_rgb + blocks[i].destOffset); } if (hint) { copyHintImage(src_rgb, dst_rgb, blocks[i].destOffset); } } if (movingBlock >= 0) { moveBlock(src_rgb, dst_rgb); } return 0; }
static int draw(RGB32 *src, RGB32 *dest) { int y, i; RGB32 *p, *q; if(autoSolveTimer == 0) { autoSolve(); } else { autoSolveTimer--; } for(i=0; i<blockNum; i++) { if(i == movingBlock || i == spaceBlock) { q = dest + blocks[i].destOffset; for(y=0; y<blockSize; y++) { memset(q, 0, blockSize * PIXEL_SIZE); q += video_width; } } else { copyBlockImage( src + blocks[i].srcOffset, dest + blocks[i].destOffset); } } if(movingBlock >= 0) { moveBlock(src, dest); } if(marginW) { p = src + blockW * blockSize; q = dest + blockW * blockSize; for(y=0; y<blockH * blockSize; y++) { memcpy(q, p, marginW * PIXEL_SIZE); p += video_width; q += video_width; } } if(marginH) { p = src + (blockH * blockSize) * video_width; q = dest + (blockH * blockSize) * video_width; memcpy(q, p, marginH * video_width * PIXEL_SIZE); } return 0; }