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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? videodevx.c

?? sumsung s3c2440下的camera(OV7620)驅動程序源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
			 * has serious privacy issues.			 */			vfd->devfs_handle = 				devfs_register (NULL, name, DEVFS_FL_DEFAULT,						VIDEO_MAJOR, vfd->minor,						S_IFCHR | S_IRUSR | S_IWUSR,#if LINUX_VERSION_CODE >= 0x020300						vfd->fops ? vfd->fops :#endif						&video_fops, NULL);#endif#if (LINUX_VERSION_CODE >= 0x020300) && defined(CONFIG_PROC_FS)			sprintf (name, "%s%d", name_base, i - base);			videodev_proc_create_dev (vfd, name);#endif			return 0;		}	}	return -ENFILE;}/* *	Unregister an unused video for linux device */ void video_unregister_device(struct video_device *vfd){	if(video_device[vfd->minor]!=vfd)		panic("vfd: bad unregister");#if (LINUX_VERSION_CODE >= 0x020300) && defined(CONFIG_PROC_FS)	videodev_proc_destroy_dev (vfd);#endif#ifdef CONFIG_DEVFS_FS	devfs_unregister (vfd->devfs_handle);#endif	video_device[vfd->minor]=NULL;	MOD_DEC_USE_COUNT;}/* V4L2 stuff starts here *//* *	Active devices  */static struct v4l2_clock *masterclock;static struct v4l2_v4l_compat *v4l2_v4l_compat;/* *	D E V I C E   O P E R A T I O N S * *//* *	Open a video device. */static intv4l2_video_open(struct inode *inode, struct file *file){	unsigned int		minor = MINOR(inode->i_rdev);	struct v4l2_device	*vfl;	int			err;	if (minor >= V4L2_NUM_DEVICES)		return -ENODEV;	vfl = v4l2_device[minor];#ifdef CONFIG_KMOD	/*  KMOD code by Erik Walthinsen  */	if((vfl == NULL)&&(video_device[minor] == NULL))	{		char modname[20];		sprintf(modname, "char-major-%d-%d", v4l2_major, minor);		request_module(modname);		vfl = v4l2_device[minor];	}#endif	if (vfl == NULL)		return video_open(inode, file);	if (vfl->open == NULL)		return -ENODEV;	err = vfl->open(vfl, file->f_flags, &file->private_data);	if (err == 0 && file->private_data == NULL)	{		printk(KERN_ERR"V4L2: Device returned NULL open id\n");		err = -ENODEV;	}	if (err == 0)		++vfl->busy;	return err;}/* *	Last close of a struct file */	static intv4l2_video_release(struct inode *inode, struct file *file){	struct v4l2_device *vfl = v4l2_device[MINOR(inode->i_rdev)];		if(!vfl)		return video_release(inode, file);		if (vfl->close)		vfl->close(file->private_data);	file->private_data = NULL;	if (vfl->busy)		--vfl->busy;	return 0;}/* *	Read from a video device */static ssize_tv4l2_video_read(struct file *file,	   char *buf, size_t count, loff_t *ppos){	struct v4l2_device *vfl =		v4l2_device[MINOR(file->f_dentry->d_inode->i_rdev)];			if(!vfl)  		return video_read(file, buf, count, ppos);			if (vfl->read)		return vfl->read(file->private_data, buf, count,				 file->f_flags & O_NONBLOCK);	return -EINVAL;}/* *	Write to a video device */static ssize_tv4l2_video_write(struct file *file,	    const char *buf, size_t count, loff_t *ppos){	struct v4l2_device *vfl =		v4l2_device[MINOR(file->f_dentry->d_inode->i_rdev)];					if(!vfl)		return video_write(file, buf, count, ppos);			if (vfl->write)		return vfl->write(file->private_data, buf, count,				  file->f_flags & O_NONBLOCK);	return 0;}/* *	IO Control */static voidfill_ctrl_category(struct v4l2_queryctrl *qc);static intv4l2_video_ioctl(struct inode *inode, struct file *file,	    unsigned int cmd, unsigned long arg){	struct v4l2_device *vfl = v4l2_device[MINOR(inode->i_rdev)];	char	targ[V4L2_MAX_IOCTL_SIZE];	void	*parg	= (void *)arg;	int	err	= -EINVAL;		if (!vfl)		return video_ioctl(inode, file, cmd, arg);	if (vfl->ioctl == NULL)		return -EINVAL;	/*  Copy arguments into temp kernel buffer  */	switch (_IOC_DIR(cmd))	{	case _IOC_NONE:		parg = (void *)arg;		break;	case _IOC_WRITE:	case (_IOC_WRITE | _IOC_READ):	/* Some v4l ioctls that are read/write are flagged read-only  */	case _IOC_READ:		if (_IOC_SIZE(cmd) > sizeof(targ))		{			printk(KERN_ERR"V4L2: ioctl 0x%08x arguments are "			       "too big, > %d\n", cmd, sizeof(targ));			break;/*  Arguments are too big.  */		}		if (copy_from_user(targ, (void *)arg, _IOC_SIZE(cmd)))		{			printk(KERN_INFO"V4L2: Fault on write ioctl 0x%08x "			       "copying data from user buffer\n", cmd);			return -EFAULT;		}		parg = targ;		break;	}	/*  Fill in the category for pre-defined controls  */	if (cmd == VIDIOC_QUERYCTRL)		fill_ctrl_category((struct v4l2_queryctrl *)parg);	/*  Try passing it to the driver first  */	err = vfl->ioctl(file->private_data, cmd, parg);	/*  If the driver doesn't recognize it and it's an old ioctl,	    pass it through the translation layer.  */	if (err == -ENOIOCTLCMD && _IOC_TYPE(cmd) == 'v' &&		v4l2_v4l_compat != NULL)	{		err = v4l2_v4l_compat->translate_ioctl(				file, vfl, file->private_data, cmd, parg);	}	/*  Copy results into user buffer  */	switch (_IOC_DIR(cmd))	{	case _IOC_READ:	case (_IOC_WRITE | _IOC_READ):		if (parg == targ &&		    copy_to_user((void *)arg, parg, _IOC_SIZE(cmd)))		{			printk(KERN_INFO"V4L2: Fault on read ioctl 0x%08x "			       "copying results to user buffer\n", cmd);			return -EFAULT;		}		break;	}	if (err != -ENOIOCTLCMD)		return err;	/*  Handle ioctls not recognized by the driver  */	return -EINVAL;}/* *	Memory mapping */ static intv4l2_video_mmap(struct file *file, struct vm_area_struct *vma){	struct v4l2_device *vfl =		v4l2_device[MINOR(file->f_dentry->d_inode->i_rdev)];	int	err;		if(!vfl)		return video_mmap(file, vma);		if (vfl->mmap)	{		/*  For v4l compatibility. v4l apps typically pass zero	*/		/*  for the offset, needs fixup.			*/		if (v4l2_v4l_compat != NULL)			v4l2_v4l_compat->fix_offset(file, vfl, vma);		vma->vm_file = file;		err = vfl->mmap(file->private_data, vma);#if LINUX_VERSION_CODE < 0x020203		/* This is now done in the kernel, as it should be */ 		if (err == 0 && vma->vm_file != NULL)			++vma->vm_file->f_count;#endif		return err;	}	return -ENODEV;}/* *	Poll (select()) support */static unsigned intv4l2_video_poll(struct file *file, poll_table *table){	struct v4l2_device *vfl =		v4l2_device[MINOR(file->f_dentry->d_inode->i_rdev)];			if(!vfl)		return video_poll(file, table);			if (vfl->poll)		return vfl->poll(file->private_data, file, table);	return POLLERR;}/* *	Not used. */ static loff_tv4l2_video_llseek(struct file *file,	     loff_t offset, int origin){	return -ESPIPE;}/* *	CONTROL CATEGORIES */static voidfill_ctrl_category(struct v4l2_queryctrl *qc){	if ((qc->id >= V4L2_CID_BRIGHTNESS &&	     qc->id <= V4L2_CID_HUE) ||	    (qc->id >= V4L2_CID_BLACK_LEVEL &&	     qc->id <= V4L2_CID_LASTP1-1))	{		qc->category = V4L2_CTRL_CAT_VIDEO;		strcpy(qc->group, "Video");	} else	if ((qc->id >= V4L2_CID_AUDIO_VOLUME &&	     qc->id <= V4L2_CID_AUDIO_LOUDNESS))	{		qc->category = V4L2_CTRL_CAT_AUDIO;		strcpy(qc->group, "Audio");	} else	if ((qc->id >= V4L2_CID_EFFECT_BASE &&	     qc->id <= V4L2_CID_EFFECT_BASE + 10000))	{		qc->category = V4L2_CTRL_CAT_EFFECT;		strcpy(qc->group, "Effect");	} else	{		strcpy(qc->group, "Private");	}}#if defined(CONFIG_PROC_FS) || defined(CONFIG_DEVFS_FS)static char *device_types[] ={	"capture",	"codec",	"output",	"effects", 	"vbi",		"vtr",		"teletext",	"radio", 	"undef",	"undef",	"undef",	"undef",};#endif/* *	D E V I C E   R E G I S T R A T I O N * *	Video for Linux Two device drivers request registration here. */intv4l2_register_device(struct v4l2_device *vfl){	int	i	= 0;	int	err;#if (LINUX_VERSION_CODE >= 0x020300) && \    (defined(CONFIG_PROC_FS) || defined(CONFIG_DEVFS_FS))	char	*base_name;	char	name[32];#endif	if (vfl == NULL)	{		printk(KERN_ERR"V4L2: v4l2_register_device() passed"		       " a NULL pointer!\n");		return -1;	}	i = vfl->minor;	if (vfl->open == NULL)	{		printk(KERN_ERR "V4L2: Device %d has no open method\n", i);		return -1;	}	if (i < 0 || i >= V4L2_NUM_DEVICES)	{		printk(KERN_ERR"V4L2: Minor value %d is out of range\n", i);		return -1;	}	if (v4l2_device[i] != NULL)	{		printk(KERN_ERR"V4L2: %s and %s have both been assigned"		       " minor %d\n", v4l2_device[i]->name,		       vfl->name, i);		return 1;	}  	if (video_device[i] != NULL)	{		printk(KERN_ERR"V4L2: %s(v4l1) and %s(v4l2) have both been assigned"		       " minor %d\n", video_device[i]->name,		       vfl->name, i);		return 1;	}	v4l2_device[i] = vfl;	/* The init call may sleep so we book the slot out then call */	MOD_INC_USE_COUNT;	err = 0;	if (vfl->initialize)		err = vfl->initialize(vfl);	if (err < 0)	{		printk(KERN_ERR "V4L2: %s initialize method failed\n",		       vfl->name);		v4l2_device[i] = NULL;		MOD_DEC_USE_COUNT;		return err;	}	vfl->busy = 0;	vfl->name[sizeof(vfl->name) - 1] = 0;	printk(KERN_INFO"V4L2: Registered \"%s\" as char device %d, %d\n",		 vfl->name, v4l2_major, vfl->minor);#ifdef CONFIG_KMOD	/*  Try loading the v4l compatibility layer  */	if (v4l2_v4l_compat == NULL)		request_module("v4l_compat");#endif#if (LINUX_VERSION_CODE >= 0x020300) && \    defined(CONFIG_PROC_FS) || defined(CONFIG_DEVFS_FS)	if (vfl->type >= 0 &&	    vfl->type < sizeof(device_types)/sizeof(char*))		base_name = device_types[vfl->type];	else if (vfl->type >= V4L2_TYPE_PRIVATE)		base_name = "private";	else 		base_name = "undef";	#if defined(CONFIG_PROC_FS)	sprintf(name, "%s%i", base_name, i);	v4l2_proc_create_dev (vfl, name);#endif /* CONFIG_PROCFS */#endif#ifdef CONFIG_DEVFS_FS	/*	 * Start the device root only.  Anything else	 * has serious privacy issues.	 */	if (vfl->devfs_devname[0]==0)		sprintf (name, "v4l2/%s%d", base_name, i);	else		sprintf (name, "v4l2/%s", vfl->devfs_devname);	vfl->devfs_handle = 		devfs_register (NULL, name, DEVFS_FL_DEFAULT,				v4l2_major, vfl->minor,				S_IFCHR | S_IRUSR | S_IWUSR,				&v4l2_fops, NULL);#endif	memset(vfl->v4l2_reserved, 0, sizeof(vfl->v4l2_reserved));	vfl->v4l2_priv = NULL;	return 0;}/* *	Unregister an unused video for linux device */voidv4l2_unregister_device(struct v4l2_device *vfl){	if (vfl->minor < 0 || vfl->minor >= V4L2_NUM_DEVICES ||	    v4l2_device[vfl->minor] != vfl)	{		printk(KERN_ERR"V4L2: bad unregister\n");		return;	}#if (LINUX_VERSION_CODE >= 0x020300) && defined(CONFIG_PROC_FS)	/* Add the /proc entry */	v4l2_proc_destroy_dev (vfl);#endif#ifdef CONFIG_DEVFS_FS	devfs_unregister (vfl->devfs_handle);#endif	v4l2_device[vfl->minor] = NULL;	MOD_DEC_USE_COUNT;}/* *	Register/unregister v4l back compatibility layer */intv4l2_v4l_compat_register(struct v4l2_v4l_compat *v4l_c){	if (v4l_c == NULL)	{		printk(KERN_ERR"V4L2: v4l2_register_v4l_compat() passed"		       " a NULL pointer!\n");		return -1;	}	if (v4l2_v4l_compat != NULL)	{		printk(KERN_ERR"V4L2: Attempt to re-register v4l1 "		       "compatibility layer.\n");		return -1;	}	if (v4l_c->translate_ioctl == NULL)	{		printk(KERN_ERR "V4L2: v4l1 compatibility layer has no "		       "translate_ioctl() method\n");		return -1;	}	if (v4l_c->fix_offset == NULL)	{		printk(KERN_ERR "V4L2: v4l1 compatibility layer has no "		       "fix_offset() method\n");		return -1;	}	v4l2_v4l_compat = v4l_c;	printk(KERN_INFO"V4L2: v4l1 backward compatibility enabled.\n");	return 0;}voidv4l2_v4l_compat_unregister(struct v4l2_v4l_compat *v4l_c){	if (v4l2_v4l_compat != v4l_c)		return;	v4l2_v4l_compat = NULL;	printk(KERN_INFO"V4L2: v4l1 backward compatibility disabled.\n");}/* *	/ p r o c / v i d e o d e v   H A N D L E R */#ifdef CONFIG_PROC_FS/* The actual code is the same, it's the interface what changes */#if 0static intvideo_build_proc(char *buf, char **start, off_t offset, int len, void *data){	struct v4l2_device *vfl;	struct video_device *vfl1;	int	i;	char	*t;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区中文字幕| 白白色 亚洲乱淫| 不卡一卡二卡三乱码免费网站| 欧美日韩精品福利| 成人欧美一区二区三区黑人麻豆| 免费不卡在线视频| 欧美视频在线播放| 日韩美女精品在线| 国产大片一区二区| 欧美成人福利视频| 日本vs亚洲vs韩国一区三区二区| 99精品欧美一区二区三区小说| 日韩欧美综合一区| 五月天精品一区二区三区| 91在线免费看| 中文字幕综合网| www.视频一区| 国产精品久久久久天堂| 国产精品一区2区| 亚洲精品在线电影| 狠狠网亚洲精品| 26uuu亚洲| 国产麻豆成人精品| 国产亚洲一区二区三区四区| 国产真实乱子伦精品视频| 欧美tickle裸体挠脚心vk| 奇米精品一区二区三区在线观看一| 在线观看日韩电影| 亚洲综合丝袜美腿| 欧美日韩中文字幕一区二区| 亚洲国产欧美在线| 8x8x8国产精品| 麻豆视频一区二区| 2023国产精品自拍| 成人免费高清在线观看| 综合av第一页| 欧美三片在线视频观看| 天堂在线一区二区| 日韩欧美国产综合在线一区二区三区| 蜜桃在线一区二区三区| 亚洲精品一区二区三区福利| 国产成a人无v码亚洲福利| 亚洲午夜精品久久久久久久久| 在线观看欧美精品| 免费人成网站在线观看欧美高清| 亚洲精品一区二区精华| 成人高清在线视频| 亚洲成人久久影院| 欧美成人video| 成人国产亚洲欧美成人综合网| 一区二区三区av电影| 4438亚洲最大| 成人激情小说网站| 亚洲国产精品久久人人爱蜜臀| 日韩美女视频一区二区在线观看| 国产剧情一区二区| 亚洲精品高清在线| 欧美电视剧免费全集观看 | 亚洲一区二区三区四区五区黄| 777亚洲妇女| 国产成人欧美日韩在线电影| 亚洲日本在线看| 精品国产百合女同互慰| 91在线视频官网| 国内成人精品2018免费看| 亚洲日本va在线观看| 777午夜精品免费视频| 福利一区二区在线| 日韩国产在线观看一区| 国产精品国产三级国产aⅴ中文| 欧美日本在线视频| 成人黄色小视频在线观看| 日韩黄色免费网站| 1024成人网色www| 欧美成人aa大片| 欧美日本一道本在线视频| 国产不卡免费视频| 美女网站视频久久| 一卡二卡三卡日韩欧美| 久久久久国产精品免费免费搜索| 欧美精品视频www在线观看| 成人h动漫精品| 国产酒店精品激情| 麻豆精品视频在线观看| 亚洲一卡二卡三卡四卡| 亚洲视频一区二区免费在线观看| 久久尤物电影视频在线观看| 91精品国产麻豆| 欧美三级电影在线看| 暴力调教一区二区三区| 国产成人在线看| 久久黄色级2电影| 免费视频最近日韩| 三级欧美在线一区| 亚洲伊人伊色伊影伊综合网| 国产精品青草久久| 成人精品鲁一区一区二区| 久久精品久久精品| 免费成人美女在线观看.| 亚洲一二三四在线观看| 日韩美女久久久| 国产精品久久久久一区二区三区共| 久久婷婷色综合| 日韩欧美一二区| 欧美一区二区女人| 欧美丰满少妇xxxxx高潮对白| 欧美性xxxxxx少妇| 欧美日韩一区久久| 欧美精品亚洲一区二区在线播放| 欧美日韩免费视频| 精品视频在线视频| 欧美人与性动xxxx| 欧美日韩国产影片| 4hu四虎永久在线影院成人| 在线不卡免费av| 精品99一区二区| 亚洲国产精品精华液ab| 亚洲国产精品黑人久久久| 国产精品久久久久久亚洲伦| 中文字幕一区二区三区在线播放 | 91亚洲大成网污www| 91丨九色porny丨蝌蚪| 97se亚洲国产综合自在线| 91小视频在线免费看| 欧美日韩一卡二卡三卡| 日韩视频免费观看高清在线视频| 欧美成人a视频| 国产精品的网站| 亚洲一区二区三区四区不卡| 免费一区二区视频| 国产激情一区二区三区| 97精品视频在线观看自产线路二| 欧美午夜电影一区| 欧美一二区视频| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲天堂av老司机| 日产欧产美韩系列久久99| 韩国欧美国产一区| 99精品视频在线播放观看| 在线电影院国产精品| 国产欧美1区2区3区| 亚洲妇女屁股眼交7| 国产大片一区二区| 欧美综合亚洲图片综合区| 欧美tickle裸体挠脚心vk| 亚洲欧美国产三级| 蜜臀av亚洲一区中文字幕| 成a人片国产精品| 777a∨成人精品桃花网| 国产精品欧美综合在线| 五月天中文字幕一区二区| 国产成人激情av| 欧美嫩在线观看| 国产精品护士白丝一区av| 午夜精品免费在线| 99久久免费国产| 久久综合色8888| 天天操天天色综合| 成人avav在线| 26uuu亚洲综合色| 婷婷久久综合九色综合伊人色| 成人午夜av影视| 欧美成人乱码一区二区三区| 一区二区三区四区激情 | 在线影视一区二区三区| 欧美成人在线直播| 亚洲成人777| 91精品91久久久中77777| 精品国产髙清在线看国产毛片| 亚洲韩国一区二区三区| 成人免费高清视频| 欧美精品一区二区三区高清aⅴ | 日本亚洲欧美天堂免费| 91女厕偷拍女厕偷拍高清| 久久久美女毛片| 麻豆国产欧美一区二区三区| 欧美亚洲禁片免费| 《视频一区视频二区| 国产麻豆成人精品| 精品久久久久久最新网址| 丝袜亚洲另类欧美| 欧美日本一区二区三区| 一级中文字幕一区二区| 91美女蜜桃在线| 亚洲人一二三区| 91首页免费视频| 国产精品超碰97尤物18| 大胆欧美人体老妇| 国产亚洲综合性久久久影院| 黄色成人免费在线| 久久免费偷拍视频| 国产成人欧美日韩在线电影| 久久久国产一区二区三区四区小说 | 国产日韩视频一区二区三区| 久久不见久久见免费视频7| 欧美一区二区三区喷汁尤物| 日韩av成人高清| 欧美大片在线观看一区| 激情综合一区二区三区| 久久久综合激的五月天|