Esempio 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;
}
Esempio 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;
}
Esempio n. 3
0
static void moveBlock(RGB32 *src, RGB32 *dest)
{
	int sx, sy;
	int dx, dy;
	int x, y;

	sx = movingBlock % blockW;
	sy = movingBlock / blockW;
	dx = spaceBlock % blockW;
	dy = spaceBlock / blockW;

	sx *= blockSize;
	sy *= blockSize;
	dx *= blockSize;
	dy *= blockSize;

	x = dx + (sx - dx) * phase / SLIDING_INTERVAL;
	y = dy + (sy - dy) * phase / SLIDING_INTERVAL;

	copyBlockImage(src + blocks[movingBlock].srcOffset,
			dest + y * video_width + x);

	if(autoSolveTimer == 0) {
		phase--;
	} else {
		phase-=2;
	}
	if(phase < 0) {
		int tmp;
		/* Exchanges positions of the moving block and the space */
		tmp = blocks[movingBlock].position;
		blocks[movingBlock].position = blocks[spaceBlock].position;
		blocks[spaceBlock].position = tmp;

		blockSetSrcOffset(movingBlock);
		blockSetSrcOffset(spaceBlock);

		spaceBlock = movingBlock;
		movingBlock = -1;
	}
}