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

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

?? videodevx.c

?? S3C2440 攝像頭linux2.4.18的驅動
?? 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一区二区三区免费野_久草精品视频
亚洲乱码精品一二三四区日韩在线| 偷拍亚洲欧洲综合| 一区二区三区四区不卡在线 | 黄一区二区三区| 97久久精品人人做人人爽| 日韩一区二区视频| 一区二区三区四区国产精品| 国产精品一二三在| 欧美xxx久久| 一区二区理论电影在线观看| 国产高清久久久久| 欧美sm美女调教| 天天亚洲美女在线视频| 色综合av在线| 中文字幕制服丝袜成人av| 激情综合网激情| 欧美精品 国产精品| 亚洲美女屁股眼交| 成人免费视频一区| 久久久美女艺术照精彩视频福利播放| 日本中文字幕一区| 欧美福利一区二区| 亚洲一区二区视频在线观看| 99久久久无码国产精品| 国产精品美女久久久久久久久| 国产一区二区三区高清播放| 日韩一级成人av| 亚洲va国产天堂va久久en| aaa欧美色吧激情视频| 国产精品久久综合| 成人手机电影网| 日本一区二区三区dvd视频在线| 精品制服美女丁香| 日韩精品最新网址| 久久成人18免费观看| 日韩亚洲欧美一区二区三区| 日本不卡一二三区黄网| 91精品国产欧美一区二区成人| 亚洲国产精品久久艾草纯爱| 在线免费观看日韩欧美| 亚洲成年人网站在线观看| 欧美日韩国产片| 午夜日韩在线电影| 91精品国产一区二区人妖| 美国精品在线观看| 久久综合av免费| 国产一区二区美女| 国产精品久久久久国产精品日日| 成人国产亚洲欧美成人综合网| 中文字幕一区视频| 欧美亚洲一区二区三区四区| 偷偷要91色婷婷| 欧美成人a视频| 国产一区二区中文字幕| 欧美国产成人在线| 欧美在线免费观看视频| 蜜桃精品视频在线观看| 久久精品夜夜夜夜久久| 91在线视频在线| 亚洲福利电影网| 精品国产凹凸成av人网站| 成人国产精品免费观看视频| 一区二区三区在线免费观看| 这里只有精品免费| 国产成人自拍高清视频在线免费播放| 国产精品美女久久久久久久久久久 | 亚洲精品第1页| 7799精品视频| 成人午夜av影视| 日本欧美在线观看| 国产精品免费久久| 91精品国产色综合久久不卡蜜臀 | 久久久www成人免费毛片麻豆| av资源站一区| 午夜久久久久久电影| 久久久久高清精品| 欧美日韩高清一区| 粉嫩13p一区二区三区| 香蕉影视欧美成人| 中文字幕巨乱亚洲| 日韩三级视频中文字幕| 色综合天天综合网天天狠天天| 免费看日韩精品| 亚洲欧美在线视频观看| 久久综合久久综合亚洲| 欧美日本乱大交xxxxx| 成人国产电影网| 美腿丝袜亚洲一区| 一个色在线综合| 国产无人区一区二区三区| 91精品午夜视频| 色天使色偷偷av一区二区| 国产美女在线精品| 日韩二区三区在线观看| 亚洲精品国产视频| 国产精品不卡一区| 久久久综合网站| 8v天堂国产在线一区二区| 色菇凉天天综合网| 国产91富婆露脸刺激对白| 久久国产夜色精品鲁鲁99| 亚洲一区二区中文在线| 亚洲丝袜制服诱惑| 欧美激情在线一区二区| 久久夜色精品国产欧美乱极品| 欧美日韩一卡二卡| 欧美日韩一区二区三区视频| 91浏览器打开| av激情亚洲男人天堂| 大白屁股一区二区视频| 国产成人在线观看| 国产酒店精品激情| 国产精品一级黄| 国产麻豆成人精品| 国产精品中文欧美| 国产成人在线观看| 顶级嫩模精品视频在线看| 国产成人免费视频精品含羞草妖精 | 成人的网站免费观看| 韩国一区二区视频| 国产一区二区在线免费观看| 美女视频网站久久| 国产九色精品成人porny| 国产乱理伦片在线观看夜一区| 国产成人精品免费| 成人午夜激情影院| 91美女在线视频| 欧美亚洲综合色| 91精品欧美一区二区三区综合在 | 国产日本一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 日本一区二区视频在线观看| 国产精品久久久久久妇女6080| 亚洲日本一区二区| 五月天国产精品| 六月丁香婷婷久久| 成人高清免费观看| 欧美亚洲综合网| 精品久久一区二区| 国产精品卡一卡二| 亚洲成a人片在线观看中文| 裸体一区二区三区| 高清beeg欧美| 欧美日韩免费一区二区三区| 日韩欧美成人激情| 国产精品视频免费看| 亚洲最快最全在线视频| 免费成人在线观看| 成人免费看的视频| 欧美精品乱人伦久久久久久| 久久青草欧美一区二区三区| 亚洲人成小说网站色在线 | 国产乱人伦偷精品视频免下载| 99久久777色| 欧美一区2区视频在线观看| 国产精品欧美久久久久无广告 | 91啪在线观看| 欧美一区二区三区日韩视频| 国产精品久久免费看| 日韩成人午夜电影| 972aa.com艺术欧美| 欧美一二三四在线| 一区二区在线看| 国精品**一区二区三区在线蜜桃| 91视频一区二区三区| 久久影院午夜片一区| 午夜婷婷国产麻豆精品| 丁香网亚洲国际| 欧美猛男男办公室激情| 国产精品久久看| 国产一区二区三区在线观看免费 | 久久久综合精品| 亚洲bt欧美bt精品| 成人sese在线| 欧美精品一区二| 亚洲成人av电影在线| 99国产精品国产精品久久| 精品动漫一区二区三区在线观看| 亚洲另类色综合网站| 国产**成人网毛片九色 | 精品一区二区精品| 69堂亚洲精品首页| 一区二区三区鲁丝不卡| 99久久国产综合精品女不卡 | 欧美日韩国产在线观看| 亚洲视频香蕉人妖| 成人自拍视频在线| 久久九九全国免费| 狠狠色丁香婷婷综合久久片| 4hu四虎永久在线影院成人| 一区二区三区免费看视频| 91色在线porny| 国产精品久久久久影院亚瑟| 国产91高潮流白浆在线麻豆| 久久精品一区二区三区不卡| 韩国成人在线视频| 97久久精品人人爽人人爽蜜臀 | 精品国产亚洲一区二区三区在线观看| 亚洲成人av免费| 欧美日韩国产小视频在线观看|