亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? saa7113h.c

?? sumsung s3c2440下的camera(OV7620)驅(qū)動程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
	while(1) {		long ds, dus;		gettimeofday(&tve, &tze);		dus = tve.tv_usec - tvs.tv_usec;		if(dus<0) {			dus += 1000000;			tve.tv_sec--;		}		ds = tve.tv_sec - tvs.tv_sec;		if((ds*1000000+dus)/1000>=ms)			break;	}*/	fd_set rfds;	struct timeval tv;	FD_ZERO(&rfds);	FD_SET(0, &rfds);	tv.tv_sec = 0;	tv.tv_usec = ms*1000;	select(1, &rfds, NULL,  NULL, &tv);}#endif#ifdef USER_I2C_INITstatic int i2c_write(int fd, __u8 reg, __u8 val){	int retries;	__u8 data[2];	data[0] = reg;	data[1] = val;	for(retries=5; retries; retries--) {		if(write(fd, data, 2)==2)			return 0;		delay_ms(2);	}	//printf("write fail %x %x\n", data[0], data[1]);	return -1;}static int i2c_read(int fd, __u8 reg, __u8 *val){	int retries;	for(retries=5; retries; retries--) {		if(write(fd, &reg, 1)==1)			if(read(fd, val, 1)==1)				return 0;		delay_ms(2);	}	//printf("read fail\n");	return -1;}#define I2C_SLAVE	0x0703	/* Change slave address			*/static int camera_i2c_init(void){	int i, fd;	__u8 id[4];	//delay_ms(100);	printf("open i2c device...\n");	fd = open("/dev/i2c/0", O_RDWR);	if(fd<0) {		fd = open("/dev/misc/i2c", O_RDWR);		if(fd<0) {			printf("fail to open i2c adapter device!\n");			return -1;		}	}	if(ioctl(fd, I2C_SLAVE, CAMERA_I2C_ADDR)<0) {		printf("fail to set i2c device slave address!\n");		close(fd);		return -1;	}	printf("set slave address to 0x%x success!\n", CAMERA_I2C_ADDR);	if(i2c_read(fd, 0, id)) {		printf("fail to get camera chip version!\n");		close(fd);		return -1;	}	printf("chip version is 0x%02x\n", id[0]);	i2c_read(fd, 0x1f, id+1);	printf("decoder status is 0x%02x\n", id[1]);	for(i=0; i<CAMERA_REGS; i++) {		if(camera_regs[i].subaddr==CHIP_DELAY)			delay_ms(camera_regs[i].value);		else if(i2c_write(fd, camera_regs[i].subaddr, camera_regs[i].value))			printf("write subaddr 0x%x fail!\n", camera_regs[i].subaddr);		//delay_ms(2);		//printf("%d\n", i);	}//	if(cpu_type==1)	{	//s3c2440a//		i2c_write(fd, 0x15, 0x00);	//always has PCLK//		i2c_write(fd, 0x3a, 0x01);	//YCbYCr order//	}		close(fd);	return 0;}#else#define	camera_i2c_init()	0#endif#ifdef SCCB_INITstatic int sccb_init(int fd){	int i;	__u16 val;	__u8 id[4];		val = CAMERA_MIDH<<8;	if(ioctl(fd, WCAM_VIDIOCGCAMREG, &val)<0) {		printf("get camera register fail!\n");		return -1;	}	id[0] = val;	val = CAMERA_MIDL<<8;	if(ioctl(fd, WCAM_VIDIOCGCAMREG, &val)<0) {		printf("get camera register fail!\n");		return -1;	}	id[1] = val;	printf("manufactory ID is 0x%04x\n", (id[0]<<8)|id[1]);		val = CAMERA_PIDH<<8;	if(ioctl(fd, WCAM_VIDIOCGCAMREG, &val)<0) {		printf("get camera register fail!\n");		return -1;	}	id[2] = val;	val = CAMERA_PIDL<<8;	if(ioctl(fd, WCAM_VIDIOCGCAMREG, &val)<0) {		printf("get camera register fail!\n");		return -1;	}	id[3] = val;	printf("product ID is 0x%04x\n", (id[2]<<8)|id[3]);	for(i=0; i<CAMERA_REGS; i++) {		if(camera_regs[i].subaddr==CHIP_DELAY)			delay_ms(camera_regs[i].value);		else {			val = (camera_regs[i].subaddr<<8)|camera_regs[i].value;			if(ioctl(fd, WCAM_VIDIOCSCAMREG, &val)<0)				printf("write subaddr 0x%x fail!\n", camera_regs[i].subaddr);		}	}	return 0;}#else#define	sccb_init(fd)		0#endif/*************************************************************/static void usage(void){	int i;	printf("testcamera [-x/y/p/m/v/o/f/u/h options]\n");	printf("-x width   (set output image width, must be 4 alignment)\n");	printf("-y height  (set output image height)\n");	printf("-p palette (set output image color space)\n");	printf("	optional image:\n");	for(i=0; i<MAX_IMAGE_FORMAT; i++)		printf("	[%2d] : %s\n", i, optional_image_format[i].name);	printf("-m         (use mmap method for camera)\n");	printf("-v         (capture video instead of still image)\n");	printf("-o number  (set save jpeg file optimization, must be 0~100)\n");	printf("-f name    (set save jpeg file prefix name)\n");	printf("-u arch    (set CPU type)\n");	printf("	current special CPU:\n");	printf("	pxa27x\n");	printf("	s3c2440a\n");	printf("	default is pxa27x\n");	printf("-h show help\n");}static int getoptions(int argc, char *argv[]){	int ret = 0;	char c;	opterr = 0;	//don't print error message	while ((c = getopt (argc, argv, "x:y:p:o:f:u:mvh")) != (char)EOF)	/* Scan the command line for options */	switch (c) {	case 'x':		image_width = atoi(optarg);		if((image_width%4)||(image_width>FIXED_SOURCE_WIDTH))			ret = -1;		break;	case 'y':		image_height = atoi(optarg);		if(image_height>FIXED_SOURCE_HEIGHT)			ret = -1;		break;	case 'p':		image_format = atoi(optarg);		if(image_format>=MAX_IMAGE_FORMAT)			ret = -1;		break;	case 'o':		optimization = atoi(optarg);		if(optimization>100)			ret = -1;		break;	case 'f':		image_file = optarg;		break;	case 'm':		mmap_camera = 1;		break;	case 'v':		capture_video = 1;		break;	case 'u':		if(strncmp(optarg, "pxa27x", 6)==0)			cpu_type = 0;		else if(strncmp(optarg, "s3c2440a", 8)==0)			cpu_type = 1;		else			printf("unknown CPU type\n");		break;	case 'h':		//ret = -1;		//break;	default:		ret = -1;		break;	}	return ret;}/*************************************************************/int main(int argc, char *argv[]){	int i, fd, fbfd;	struct fb_var_screeninfo vinfo;	struct fb_fix_screeninfo finfo;	__u8 *fb_buf;	__u32 screensize;	struct video_capability vc;	struct video_window vw;	struct video_capture vcp;	struct video_picture vp;	struct video_mbuf vm;	__u8 *buf = NULL;	int show, cnt;	fd_set rfds;	struct timeval tv;	struct termios tio;	int c_lflag;	fbfd = open("/dev/fb0", O_RDWR);	if (fbfd < 0) {		fbfd = open("/dev/fb/0", O_RDWR);		if(fbfd<0) {			printf("Error: cannot open framebuffer device.\n");		        return -1;		}	}	// Get fixed screen information	if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) {				printf("Error reading fixed information.\n");		close(fbfd);        	return -1;	}	// Get variable screen information	if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {		printf("Error reading variable information.\n");		close(fbfd);		return -1;	}	printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel );	fb_xres = vinfo.xres;	fb_yres = vinfo.yres;	fb_bpp  = vinfo.bits_per_pixel;	screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;	fb_buf = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,				fbfd, 0);	if ((int)fb_buf == -1) {		printf("Error: failed to map framebuffer device to memory.\n");		close(fbfd);        	return -1;	}	test_ycbcr_to_rgb(fb_buf);	if(getoptions(argc, argv)<0) {		close(fbfd);		usage();		return -1;	}	fd = open("/dev/v4l/video0", O_RDONLY);	//rd&wr	if(fd<0) {		fprintf(stderr, "Open camera fail!\n");		close(fbfd);		return -1;	} else		fprintf(stdout, "Open camera success\n");	if(camera_i2c_init()||sccb_init(fd)) {		printf("fail to initialize the I2C interface of camera!\n");		close(fd);		close(fbfd);		return -1;	}	if(ioctl(fd, VIDIOCGCAP, &vc)<0)		printf("VIDIOCGCAP fail\n");	else		printf("max width %d, height %d\nmin width %d, height %d\n",			vc.maxwidth, vc.maxheight, vc.minwidth, vc.minheight);	vw.width  = FIXED_SOURCE_WIDTH;		//fixed in this application	vw.height = FIXED_SOURCE_HEIGHT;	//fixed in this application	if(ioctl(fd, VIDIOCSWIN, &vw)<0)		printf("VIDIOCSWIN fail\n");	if(ioctl(fd, VIDIOCGWIN, &vw)<0)		printf("VIDIOCGWIN fail\n");	else		printf("current width %d, height %d\n",	vw.width, vw.height);	if(!image_width||!image_height) {		image_width  = vw.width;		image_height = vw.height;	}	//useful in s3c2440a	vcp.width  = image_width;	vcp.height = image_height;	if(ioctl(fd, VIDIOCSCAPTURE, &vcp)<0)		printf("VIDIOCSCAPTURE fail\n");	else {		if(ioctl(fd, VIDIOCGCAPTURE, &vcp)<0)			printf("VIDIOCGCAPTURE fail\n");		else			printf("capture width %d, height %d\n", vcp.width, vcp.height);	}	vp.palette = optional_image_format[image_format].palette;	if(ioctl(fd, VIDIOCSPICT, &vp)<0)		printf("VIDIOCSPICT fail\n");	if(ioctl(fd, VIDIOCGPICT, &vp)<0)		printf("VIDIOCGPICT fail\n");	else		printf("current palette %d\n",	vp.palette);			if(cpu_type==1) {		if(ioctl(fd, VIDIOCSYCbCr, 2)<0) {			printf("fail to set YCbCr order!\n");		}	}	if(cpu_type==0) {		struct reg_set_s reg;		//extend ioctl, just in pxa270		reg.val1 = CAMERA_IMAGE_FORMAT_YCBCR422_PACKED;	//input format for pxa270		reg.val2 = CAMERA_IMAGE_FORMAT_YCBCR422_PLANAR;	//output format for pxa270		if(ioctl(fd, WCAM_VIDIOCSINFOR, &reg)<0)			printf("WCAM_VIDIOCSINFOR fail\n");		if(ioctl(fd, WCAM_VIDIOCGINFOR, &reg)<0)			printf("WCAM_VIDIOCGINFOR fail\n");		else			printf("current input format %d, output format %d\n",				reg.val1, reg.val2);	}	if(mmap_camera) {		if(ioctl(fd, VIDIOCGMBUF, &vm)<0) {			printf("VIDIOCGMBUF fail\n");			mmap_camera = 0;		} else {			printf("current camera buffer size %d, total frames %d\n",				vm.size, vm.frames);					buf = (__u8 *)mmap(0, vm.size, PROT_READ, MAP_SHARED, fd, 0);			if((int)buf==-1) {				printf("mmap camera fail!\n");				mmap_camera = 0;			} else				puts("mmap camera ok.\n");		}	}	if(!mmap_camera) {		puts("allocate memory for camera buffer.\n");		buf = malloc(image_width*image_height*2);		if(!buf) {			printf("fail to allocate memory for camera!\n");			close(fd);			munmap(fb_buf, screensize);			close(fbfd);			return -1;		}	}	printf("buffer at 0x%08x\n", (int)buf);	//puts("press enter to start...\n");	//getchar();		if(tcgetattr(0, &tio)<0) {		printf("tcgetattr fail!\n");		goto fail;	} else {		c_lflag = tio.c_lflag;		tio.c_lflag &= ~(ICANON | ECHO);		if(tcsetattr(0, TCSAFLUSH, &tio)<0) {			printf("tcsetattr fail!\n");			goto fail;		}	}		printf("now start capture...\n");	printf("press Esc key to exit, 'c' to save picture, 'd' to enable/disable display\n");	if(capture_video) {		if(ioctl(fd, VIDIOCCAPTURE, VIDEO_START)<0) {			printf("VIDIOCCAPTURE fail\n");			goto fail;		}	} else if(!cpu_type){		if(ioctl(fd, VIDIOCCAPTURE, STILL_IMAGE)<0) {			printf("VIDIOCCAPTURE fail\n");			goto fail;		}	}		FD_ZERO(&rfds);	//FD_SET(0, &rfds);	//FD_SET(fd, &rfds);		show = 1;	cnt  = 0;	while(1) {		//in pxa270, if capture still image, can do it just one time		if(!capture_video&&cpu_type)			if(ioctl(fd, VIDIOCCAPTURE, STILL_IMAGE)<0) {				printf("VIDIOCCAPTURE fail\n");				break;			}		//FD_ZERO(&rfds);		FD_SET(0, &rfds);		FD_SET(fd, &rfds);		tv.tv_sec = 3;		tv.tv_usec = 0;		select(fd+1, &rfds, NULL,  NULL, &tv);		if(FD_ISSET(0, &rfds)) {			char cmd;			//printf("stdin input\n");			if(read(0, &cmd, 1)<0) {				printf("read stdin fail!\n");				break;			}			if(cmd=='d'||cmd=='D') {				show = !show;				printf("%s display\n", show?"enable":"disable");			} else if(cmd=='c'||cmd=='C') {				printf("save picture...\n");				save_picture(buf);			} else if(cmd==0x1b)				break;		} else if(FD_ISSET(fd, &rfds)) {			if(mmap_camera) {#if 1			//just for performance test in video capturing, int(rdy)->show->int->show			//use read to clear ready flag in driver				i = read(fd, buf, 0);	//mmap camera for read, so read 0 byte to buf				if(i<0) {					printf("read fail!%d\n", i);					break;				}#endif			} else {				i = read(fd, buf, image_width*image_height*2);				if(i<0) {					fprintf(stderr, "read fail! %d\n", i);					break;				}				//printf("read %d bytes\n", i);				cnt++;			}		} else {			printf("wait timeout, break...\n");			break;		}#if 0		{			FILE *wfp;			wfp = fopen("/tmp/dat", "w+b");			if(wfp==NULL) {				printf("fail to open file for save data!\n");				break;			}			printf("write %d bytes.\n", fwrite(buf, i, 1, wfp)*i);			fclose(wfp);			break;		}#endif		if(show)			show_cam_img(fb_buf, buf,					buf+image_width*image_height,					buf+(image_width*image_height*3)/2);	}	tio.c_lflag = c_lflag;	tcsetattr(0, TCSAFLUSH, &tio);fail:	if(mmap_camera)		munmap(buf, vm.size);	else		free(buf);	close(fd);	munmap(fb_buf, screensize);	close(fbfd);	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲1区2区3区| 91一区二区三区在线播放| 91麻豆精品国产91久久久久久久久 | 国产精品素人一区二区| 国产激情视频一区二区三区欧美| 久久综合色一综合色88| 国产大陆精品国产| 国产精品国产自产拍高清av| 色一情一伦一子一伦一区| 一区二区三区精品视频在线| 欧美丰满少妇xxxxx高潮对白 | 色偷偷久久一区二区三区| 亚洲高清免费视频| 2022国产精品视频| 99精品久久久久久| 免费观看在线综合| 欧美韩国日本不卡| 欧美午夜精品一区| 国产一区啦啦啦在线观看| 亚洲三级免费观看| 91精品国产91综合久久蜜臀| 成人美女在线视频| 婷婷国产v国产偷v亚洲高清| 国产亚洲一二三区| 欧美亚洲综合在线| 国产乱码精品一区二区三区av | 国产色产综合产在线视频| 91在线小视频| 免费在线成人网| 中文字幕亚洲不卡| 在线不卡一区二区| 成人av高清在线| 男人的j进女人的j一区| 国产精品成人网| 欧美一区二区视频免费观看| 成人少妇影院yyyy| 午夜精品久久久久久久久| 欧美韩国日本不卡| 日韩欧美国产一区在线观看| 91丝袜美女网| 国产一区91精品张津瑜| 五月天视频一区| 亚洲欧洲成人av每日更新| 精品久久久久久久一区二区蜜臀| 91黄色免费看| 成人一级黄色片| 久久99久久99| 天天操天天色综合| 一区二区日韩电影| 中文字幕一区二区三区在线观看| 日韩免费视频一区| 欧美人妖巨大在线| 色8久久精品久久久久久蜜| 国产91精品欧美| 精品一区二区三区久久久| 亚洲国产成人porn| 一二三区精品福利视频| 国产精品久久久久一区| 久久九九全国免费| 欧美精品一区二区三区蜜臀| 欧美一区二区三区电影| 日本韩国欧美三级| 色婷婷久久久亚洲一区二区三区| 成人深夜福利app| 国产v综合v亚洲欧| 国产综合久久久久久鬼色| 麻豆精品视频在线观看视频| 日本免费在线视频不卡一不卡二| 亚洲一区二区三区四区五区黄| 亚洲免费在线播放| 亚洲男人的天堂av| 亚洲精品免费看| 亚洲欧美国产毛片在线| 亚洲精品乱码久久久久久久久| 亚洲三级在线免费观看| 亚洲卡通动漫在线| 亚洲欧美日韩一区二区三区在线观看| 久久精品一区二区三区不卡牛牛 | 91丨九色porny丨蝌蚪| 高清shemale亚洲人妖| 国产成人在线观看| 国产v日产∨综合v精品视频| 成人av电影在线网| 91亚洲午夜精品久久久久久| 色国产综合视频| 欧美性高清videossexo| 6080午夜不卡| 精品福利视频一区二区三区| 国产喂奶挤奶一区二区三区| 欧美经典一区二区三区| 中文字幕国产精品一区二区| 亚洲手机成人高清视频| 亚洲第一福利一区| 毛片av一区二区| 大桥未久av一区二区三区中文| 97精品超碰一区二区三区| 欧洲av在线精品| 欧美成人欧美edvon| 亚洲国产电影在线观看| 日韩美女久久久| 亚洲超碰97人人做人人爱| 免费视频最近日韩| 成人免费va视频| 欧美色综合网站| 精品国产免费人成在线观看| 国产欧美中文在线| 一区二区三区在线看| 久久精品免费看| av中文字幕不卡| 欧美精品电影在线播放| 欧美激情一区二区三区不卡| 亚洲超丰满肉感bbw| 国产米奇在线777精品观看| 色综合久久久久综合体桃花网| 欧美一区二区三区免费在线看| 久久综合视频网| 亚洲国产成人高清精品| 国产91在线看| 欧美一级黄色录像| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 亚洲aaa精品| 国产91精品精华液一区二区三区 | 日韩精品综合一本久道在线视频| 国产精品乱码妇女bbbb| 亚洲成a人v欧美综合天堂下载| 国产不卡视频在线播放| 欧美人与z0zoxxxx视频| 成人欧美一区二区三区视频网页| 日本免费新一区视频| 成人免费看片app下载| 日韩免费高清av| 亚洲一区国产视频| 99久久久久久99| 久久精品一区二区三区不卡牛牛| 偷拍一区二区三区四区| 99re成人在线| 国产午夜精品福利| 美女视频一区二区| 欧美欧美欧美欧美首页| 国产精品不卡一区二区三区| 国产一区二区三区高清播放| 欧美日本精品一区二区三区| 亚洲日本va午夜在线影院| 国产69精品久久777的优势| 日韩视频一区二区| 亚洲成人激情自拍| 欧美色涩在线第一页| 亚洲欧美日韩系列| 成人午夜激情片| 久久亚洲捆绑美女| 极品尤物av久久免费看| 日韩欧美在线影院| 午夜精品123| 精品婷婷伊人一区三区三| 亚洲女人的天堂| 91同城在线观看| 亚洲婷婷在线视频| 91片在线免费观看| 亚洲美女淫视频| 91免费小视频| 亚洲老妇xxxxxx| 色婷婷国产精品综合在线观看| 国产精品情趣视频| 懂色av中文字幕一区二区三区| 国产网红主播福利一区二区| 国产精品123| 国产精品天干天干在线综合| 成人免费视频免费观看| 国产精品视频第一区| 成人免费精品视频| 18涩涩午夜精品.www| 色婷婷av久久久久久久| 一区二区三区在线视频观看| 欧美性极品少妇| 日韩高清中文字幕一区| 欧美成人女星排行榜| 国产经典欧美精品| 欧美国产丝袜视频| 色婷婷综合久久久久中文一区二区 | 激情综合网最新| 国产亚洲午夜高清国产拍精品| 国产成人精品一区二| 中文字幕在线不卡| 欧美日韩dvd在线观看| 久久精品国产一区二区| 国产午夜精品福利| 91成人免费在线| 视频一区视频二区在线观看| 日韩精品中文字幕一区| 狠狠色丁香九九婷婷综合五月| 中文无字幕一区二区三区| 色视频成人在线观看免| 午夜精品免费在线| 久久久一区二区三区捆绑**| 99久久久国产精品免费蜜臀| 亚洲不卡在线观看| 国产欧美日韩精品一区| 欧美日韩一二三| 国产精品一区二区果冻传媒| 亚洲欧美日韩系列|