Ejemplo n.º 1
0
// 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;
}
Ejemplo n.º 2
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;
}