www.pudn.com > ucosii_demo.rar > camera.c, change:2007-06-15,size:2070b


/*
 * Camera utilities interface
 */

#include "camera.h"
#include "fs_api.h"

#ifndef NULL
#define NULL	0
#endif

void camera_open(void)
{
       cim_init();

#ifdef CONFIG_OV7660
	init_ov7660();
#endif
#ifdef CONFIG_KSMOV7649
	init_ksmov7649();
#endif
#ifdef CONFIG_HV7131
	init_hv7131();
	/* enable sensor*/
	unsigned int val ;
	val = sensor_read_reg( 0x02);
	val &= ~(0x08);
	sensor_write_reg(0x02, val);
#endif
}

void camera_close(void)
{

	/* disable sensor */
#ifdef CONFIG_HV7131
	unsigned int val;
	val = sensor_read_reg( 0x02);
	val |= (0x08);
	sensor_write_reg(0x02, val);
#endif /* CONFIG_HV7131 */

	cim_close();
}


void camera_read(unsigned char *buf, int size)
{
 	cim_read(buf);
}

/*
 * Common utils
 */

void save_frame(char *filename, void *buf, int size)
{
  	FS_FILE *ffd;
	int count;

	if ((ffd = FS_FOpen(filename,"wb")) == NULL) {
		printf("Open file %s failed\n", filename);
	}

	if ((count = FS_FWrite(buf, 1, size, ffd)) != size) {
		printf("Error when write to %s.\n", filename);
	}

	FS_FClose(ffd);
}

void read_frame(char *filename, void *buf, int size)
{
	FS_FILE *fd;
	int count;

	if ((fd = FS_FOpen(filename, "rb")) == NULL) {
		printf("Failed to open file %s\n", filename);
	}
	
	if ((count = FS_FRead(buf, 1, size, fd)) != size) {
		printf("Error when read %s. %s\n", filename);
	}

	FS_FClose(fd);
}

#define NULLRGB565 0x0000
void rgb_convert(int o_xres, int o_yres, int n_xres, int n_yres, int start_x, int start_y, unsigned char *o_buf, unsigned char *n_buf)
{
	int x, y;
	unsigned short *o_ptr = (unsigned short *)o_buf;
	unsigned short *n_ptr = (unsigned short *)n_buf;

	for (y = 0; y  start_y; y++) {
		for (x = 0; x  n_xres; x++)
			*n_ptr++ = NULLRGB565;
	}
	for (y = start_y; y  start_y + o_yres; y++) {
		for (x = 0; x  start_x; x++)
			*n_ptr++ = NULLRGB565;
		for (x = start_x; x  start_x + o_xres; x++)
			*n_ptr++ = *o_ptr++;
		for (x = start_x + o_xres; x  n_xres; x++)
			*n_ptr++ = NULLRGB565;
	}
	for (y = start_y + o_yres; y  n_yres; y++) {
		for (x = 0; x  n_xres; x++)
			*n_ptr++ = NULLRGB565;
	}
}