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

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

?? pwc-v4l.c

?? webcam device driver
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* Linux driver for Philips webcam   USB and Video4Linux interface part.   (C) 1999-2004 Nemosoft Unv.   (C) 2004-2006 Luc Saillard (luc@saillard.org)   NOTE: this version of pwc is an unofficial (modified) release of pwc & pcwx   driver and thus may have bugs that are not present in the original version.   Please send bug reports and support requests to <luc@saillard.org>.   The decompression routines have been implemented by reverse-engineering the   Nemosoft binary pwcx module. Caveat emptor.   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <linux/errno.h>#include <linux/init.h>#include <linux/mm.h>#include <linux/module.h>#include <linux/poll.h>#include <linux/slab.h>#include <linux/vmalloc.h>#include <asm/io.h>#include "pwc.h"#include "pwc-ioctl.h"static struct v4l2_queryctrl pwc_controls[] = {        {	    .id      = V4L2_CID_BRIGHTNESS,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Brightness",	    .minimum = 0,	    .maximum = 128,	    .step    = 1,	    .default_value = 64,	},        {	    .id      = V4L2_CID_CONTRAST,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Contrast",	    .minimum = 0,	    .maximum = 64,	    .step    = 1,	    .default_value = 0,	},        {	    .id      = V4L2_CID_SATURATION,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Saturation",	    .minimum = -100,	    .maximum = 100,	    .step    = 1,	    .default_value = 0,	},        {	    .id      = V4L2_CID_GAMMA,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Gamma",	    .minimum = 0,	    .maximum = 32,	    .step    = 1,	    .default_value = 0,	},        {	    .id      = V4L2_CID_RED_BALANCE,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Red Gain",	    .minimum = 0,	    .maximum = 256,	    .step    = 1,	    .default_value = 0,	},        {	    .id      = V4L2_CID_BLUE_BALANCE,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Blue Gain",	    .minimum = 0,	    .maximum = 256,	    .step    = 1,	    .default_value = 0,	},        {	    .id      = V4L2_CID_AUTO_WHITE_BALANCE,	    .type    = V4L2_CTRL_TYPE_BOOLEAN,	    .name    = "Auto White Balance",	    .minimum = 0,	    .maximum = 1,	    .step    = 1,	    .default_value = 0,	},	{	    .id      = V4L2_CID_EXPOSURE,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Shutter Speed (Exposure)",	    .minimum = 0,	    .maximum = 256,	    .step    = 1,	    .default_value = 200,	},	{	    .id      = V4L2_CID_AUTOGAIN,	    .type    = V4L2_CTRL_TYPE_BOOLEAN,	    .name    = "Auto Gain Enabled",	    .minimum = 0,	    .maximum = 1,	    .step    = 1,	    .default_value = 1,	},	{	    .id      = V4L2_CID_GAIN,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Gain Level",	    .minimum = 0,	    .maximum = 256,	    .step    = 1,	    .default_value = 0,	},#if XAWTV_HAS_BEEN_FIXED        {	    .id      = V4L2_CID_PRIVATE_SAVE_USER,	    .type    = V4L2_CTRL_TYPE_BUTTON,	    .name    = "Save User Settings",	    .minimum = 0,	    .maximum = 0,	    .step    = 0,	    .default_value = 0,	},        {	    .id      = V4L2_CID_PRIVATE_RESTORE_USER,	    .type    = V4L2_CTRL_TYPE_BUTTON,	    .name    = "Restore User Settings",	    .minimum = 0,	    .maximum = 0,	    .step    = 0,	    .default_value = 0,	},        {	    .id      = V4L2_CID_PRIVATE_RESTORE_FACTORY,	    .type    = V4L2_CTRL_TYPE_BUTTON,	    .name    = "Restore Factory Settings",	    .minimum = 0,	    .maximum = 0,	    .step    = 0,	    .default_value = 0,	},	{	    .id      = V4L2_CID_PRIVATE_COLOUR_MODE,	    .type    = V4L2_CTRL_TYPE_BOOLEAN,	    .name    = "Colour mode",	    .minimum = 0,	    .maximum = 1,	    .step    = 1,	    .default_value = 0,	},	{	    .id      = V4L2_CID_PRIVATE_AUTOCONTOUR,	    .type    = V4L2_CTRL_TYPE_BOOLEAN,	    .name    = "Auto contour",	    .minimum = 0,	    .maximum = 1,	    .step    = 1,	    .default_value = 0,	},	{	    .id      = V4L2_CID_PRIVATE_CONTOUR,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Contour",	    .minimum = 0,	    .maximum = 63,	    .step    = 1,	    .default_value = 0,	},	{	    .id      = V4L2_CID_PRIVATE_BACKLIGHT,	    .type    = V4L2_CTRL_TYPE_BOOLEAN,	    .name    = "Backlight compensation",	    .minimum = 0,	    .maximum = 1,	    .step    = 1,	    .default_value = 0,	},	{	  .id      = V4L2_CID_PRIVATE_FLICKERLESS,	    .type    = V4L2_CTRL_TYPE_BOOLEAN,	    .name    = "Flickerless",	    .minimum = 0,	    .maximum = 1,	    .step    = 1,	    .default_value = 0,	},	{	    .id      = V4L2_CID_PRIVATE_NOISE_REDUCTION,	    .type    = V4L2_CTRL_TYPE_INTEGER,	    .name    = "Noise reduction",	    .minimum = 0,	    .maximum = 3,	    .step    = 1,	    .default_value = 0,	},#endif};#if CONFIG_PWC_DEBUG #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)static const char *v4l1_ioctls[] = {        "?", "CGAP", "GCHAN", "SCHAN", "GTUNER", "STUNER", "GPICT", "SPICT",        "CCAPTURE", "GWIN", "SWIN", "GFBUF", "SFBUF", "KEY", "GFREQ",        "SFREQ", "GAUDIO", "SAUDIO", "SYNC", "MCAPTURE", "GMBUF", "GUNIT",        "GCAPTURE", "SCAPTURE", "SPLAYMODE", "SWRITEMODE", "GPLAYINFO",        "SMICROCODE", "GVBIFMT", "SVBIFMT" };#define V4L1_IOCTLS ARRAY_SIZE(v4l1_ioctls)#else/* In 2.6.16-rc1 v4l_printk_ioctl is not defined but exported */extern void v4l_printk_ioctl(unsigned int cmd);#endif#endifstatic void pwc_vidioc_fill_fmt(const struct pwc_device *pdev, struct v4l2_format *f){	memset(&f->fmt.pix, 0, sizeof(struct v4l2_pix_format));	f->fmt.pix.width        = pdev->view.x;	f->fmt.pix.height       = pdev->view.y;	f->fmt.pix.field        = V4L2_FIELD_NONE;	if (pdev->vpalette == VIDEO_PALETTE_YUV420P) {		f->fmt.pix.pixelformat  = V4L2_PIX_FMT_YUV420;		f->fmt.pix.bytesperline = (f->fmt.pix.width * 3)/2;		f->fmt.pix.sizeimage = f->fmt.pix.height * f->fmt.pix.bytesperline;	} else {		/* vbandlength contains 4 lines ...  */		f->fmt.pix.bytesperline = pdev->vbandlength/4;		f->fmt.pix.sizeimage = pdev->frame_size + sizeof(struct pwc_raw_frame);		if (DEVICE_USE_CODEC1(pdev->type))			f->fmt.pix.pixelformat  = V4L2_PIX_FMT_PWC1;		else			f->fmt.pix.pixelformat  = V4L2_PIX_FMT_PWC2;	}	PWC_DEBUG_IOCTL("pwc_vidioc_fill_fmt() "			"width=%d, height=%d, bytesperline=%d, sizeimage=%d, pixelformat=%c%c%c%c\n", 			f->fmt.pix.width,			f->fmt.pix.height,			f->fmt.pix.bytesperline,			f->fmt.pix.sizeimage,			(f->fmt.pix.pixelformat)&255,			(f->fmt.pix.pixelformat>>8)&255,			(f->fmt.pix.pixelformat>>16)&255,			(f->fmt.pix.pixelformat>>24)&255);}/* ioctl(VIDIOC_TRY_FMT) */static int pwc_vidioc_try_fmt(struct pwc_device *pdev, struct v4l2_format *f){	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) {		PWC_DEBUG_IOCTL("Bad video type must be V4L2_BUF_TYPE_VIDEO_CAPTURE\n");		return -EINVAL;	}	switch (f->fmt.pix.pixelformat) {		case V4L2_PIX_FMT_YUV420:			break;		case V4L2_PIX_FMT_PWC1:			if (DEVICE_USE_CODEC23(pdev->type)) {				PWC_DEBUG_IOCTL("codec1 is only supported for old pwc webcam\n");				return -EINVAL;			}			break;		case V4L2_PIX_FMT_PWC2:			if (DEVICE_USE_CODEC1(pdev->type)) {				PWC_DEBUG_IOCTL("codec23 is only supported for new pwc webcam\n");				return -EINVAL;			}			break;		default:			PWC_DEBUG_IOCTL("Unsupported pixel format\n");			return -EINVAL;	}	if (f->fmt.pix.width > pdev->view_max.x)		f->fmt.pix.width = pdev->view_max.x;	else if (f->fmt.pix.width < pdev->view_min.x)		f->fmt.pix.width = pdev->view_min.x;	if (f->fmt.pix.height > pdev->view_max.y)		f->fmt.pix.height = pdev->view_max.y;	else if (f->fmt.pix.height < pdev->view_min.y)		f->fmt.pix.height = pdev->view_min.y;	return 0;}/* ioctl(VIDIOC_SET_FMT) */static int pwc_vidioc_set_fmt(struct pwc_device *pdev, struct v4l2_format *f){	int ret, fps, snapshot, compression, pixelformat;	ret = pwc_vidioc_try_fmt(pdev, f);	if (ret<0)		return ret;	pixelformat = f->fmt.pix.pixelformat;	compression = pdev->vcompression;	snapshot = 0;	fps = pdev->vframes;	if (f->fmt.pix.priv) {		compression = (f->fmt.pix.priv & PWC_QLT_MASK) >> PWC_QLT_SHIFT;		snapshot = !!(f->fmt.pix.priv & PWC_FPS_SNAPSHOT);		fps = (f->fmt.pix.priv & PWC_FPS_FRMASK) >> PWC_FPS_SHIFT;		if (fps == 0)			fps = pdev->vframes;	}	if (pixelformat == V4L2_PIX_FMT_YUV420)		pdev->vpalette = VIDEO_PALETTE_YUV420P;	else		pdev->vpalette = VIDEO_PALETTE_RAW;	PWC_DEBUG_IOCTL("Try to change format to: width=%d height=%d fps=%d "			"compression=%d snapshot=%d format=%c%c%c%c\n",			f->fmt.pix.width, f->fmt.pix.height, fps,			compression, snapshot,			(pixelformat)&255,			(pixelformat>>8)&255,			(pixelformat>>16)&255,			(pixelformat>>24)&255);	ret = pwc_try_video_mode(pdev,				 f->fmt.pix.width,				 f->fmt.pix.height,				 fps,				 compression,				 snapshot);	PWC_DEBUG_IOCTL("pwc_try_video_mode(), return=%d\n", ret);	if (ret)		return ret;	pwc_vidioc_fill_fmt(pdev, f);	return 0;}int pwc_video_do_ioctl(struct inode *inode, struct file *file,	 	       unsigned int cmd, void *arg){	struct video_device *vdev = video_devdata(file);	struct pwc_device *pdev;	DECLARE_WAITQUEUE(wait, current);	if (vdev == NULL)		return -EFAULT;	pdev = vdev->priv;	if (pdev == NULL)		return -EFAULT;#if CONFIG_PWC_DEBUG#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)	switch (_IOC_TYPE(cmd)) {		case 'v':			PWC_DEBUG_IOCTL("ioctl 0x%x (v4l1, VIDIOC%s)\n", cmd,					(_IOC_NR(cmd) < V4L1_IOCTLS) ?  v4l1_ioctls[_IOC_NR(cmd)] : "???");			break;		case 'V':			PWC_DEBUG_IOCTL("ioctl 0x%x (v4l2, %s)\n", cmd,					v4l2_ioctl_names[_IOC_NR(cmd)]);			break;		default:			PWC_DEBUG_IOCTL("ioctl 0x%x (unknown)\n", cmd);	}#else	if (PWC_DEBUG_LEVEL_IOCTL & pwc_trace)		v4l_printk_ioctl(cmd);#endif#endif	switch (cmd) {		/* Query cabapilities */		case VIDIOCGCAP:		{			struct video_capability *caps = arg;			strcpy(caps->name, vdev->name);			caps->type = VID_TYPE_CAPTURE;			caps->channels = 1;			caps->audios = 1;			caps->minwidth  = pdev->view_min.x;			caps->minheight = pdev->view_min.y;			caps->maxwidth  = pdev->view_max.x;			caps->maxheight = pdev->view_max.y;			break;		}		/* Channel functions (simulate 1 channel) */		case VIDIOCGCHAN:		{			struct video_channel *v = arg;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性大战xxxxx久久久| 国产精品午夜春色av| 亚洲国产岛国毛片在线| 亚洲国产另类av| 五月天一区二区| 99精品欧美一区二区三区综合在线| 9191久久久久久久久久久| 亚洲国产精品黑人久久久| 蜜臀a∨国产成人精品| 欧美三级视频在线| 亚洲品质自拍视频| 国产精品亚洲成人| 欧美成人猛片aaaaaaa| 五月天一区二区| 欧美影视一区在线| 国产精品美日韩| 国产精品中文欧美| 精品美女在线观看| 久久不见久久见免费视频1| 欧美日韩精品一区二区三区四区 | 337p亚洲精品色噜噜噜| 中文字幕在线不卡一区| 丁香桃色午夜亚洲一区二区三区| 日韩欧美一区中文| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩高清一区二区| 亚洲最色的网站| 在线亚洲高清视频| 一区二区三区中文字幕在线观看| 91美女视频网站| 亚洲三级视频在线观看| 99这里只有久久精品视频| 国产日韩欧美精品一区| 成人免费毛片片v| 国产精品福利一区二区三区| 东方欧美亚洲色图在线| 国产精品美女久久久久久| 99久久免费视频.com| 亚洲视频免费在线| 色婷婷综合在线| 亚洲电影一区二区三区| 欧美三级一区二区| 青草av.久久免费一区| 日韩免费高清av| 韩国女主播一区二区三区| 国产午夜精品一区二区| av激情综合网| 午夜av电影一区| 久久综合久久综合久久| 丁香激情综合国产| 亚洲精品美腿丝袜| 91精品国产综合久久久久久久久久 | 4438x成人网最大色成网站| 日韩成人精品视频| 久久品道一品道久久精品| eeuss鲁片一区二区三区| 亚洲在线免费播放| 精品欧美一区二区在线观看| 国产福利电影一区二区三区| 亚洲精品成人a在线观看| 欧美精品99久久久**| 国产一区二区影院| 国产精品久久久久9999吃药| 欧美三区在线观看| 国产乱淫av一区二区三区| 亚洲精品成人在线| 久久综合色播五月| 色综合久久综合网97色综合 | 亚洲欧美偷拍另类a∨色屁股| 欧美伦理电影网| 粉嫩嫩av羞羞动漫久久久| 亚洲一区二区三区四区在线| 日韩欧美国产成人一区二区| 波多野结衣中文字幕一区| 天堂蜜桃91精品| 欧美国产欧美综合| 欧美一区二区三区不卡| 99r国产精品| 九一九一国产精品| 亚洲综合色噜噜狠狠| 国产色91在线| 日韩小视频在线观看专区| 91麻豆国产在线观看| 国产在线播放一区三区四| 一区二区高清在线| 国产精品欧美久久久久无广告 | 日韩电影免费一区| 日韩理论片在线| 26uuu精品一区二区| 欧美丰满一区二区免费视频| 成人黄色a**站在线观看| 久久成人精品无人区| 日韩在线一二三区| 亚洲综合视频在线观看| 国产精品沙发午睡系列990531| 欧美成人猛片aaaaaaa| 欧美精品黑人性xxxx| 色系网站成人免费| 97精品电影院| av欧美精品.com| 东方欧美亚洲色图在线| 国产一区91精品张津瑜| 老汉av免费一区二区三区| 丝袜亚洲另类丝袜在线| 午夜欧美视频在线观看| 亚洲精品高清在线观看| 亚洲人成网站影音先锋播放| 中文字幕一区二区三区在线不卡| 久久先锋资源网| 久久综合九色综合欧美就去吻| 欧美一级片在线看| 91精品国产入口| 日韩欧美一二区| 日韩欧美成人午夜| 欧美一区二区三区免费视频| 91麻豆精品国产无毒不卡在线观看| 欧美色综合影院| 欧美美女激情18p| 欧美一级在线免费| 日韩精品一区二区三区视频| 日韩一区二区三区四区五区六区| 91麻豆精品91久久久久同性| 欧美一区二区三区爱爱| 日韩欧美激情在线| 久久免费电影网| 国产精品视频一区二区三区不卡| 国产精品伦理在线| 亚洲靠逼com| 日本中文在线一区| 韩国av一区二区三区在线观看| 国产成人午夜99999| av一区二区三区在线| 欧美在线观看视频在线| 欧美老年两性高潮| 精品国产123| 国产精品国产精品国产专区不蜜| 最新热久久免费视频| 亚洲国产日日夜夜| 免费在线看一区| 成熟亚洲日本毛茸茸凸凹| 91丨国产丨九色丨pron| 欧美日韩国产综合视频在线观看| 欧美一区二区三区四区久久| 国产免费久久精品| 一区二区三区产品免费精品久久75| 一个色综合av| 国内精品国产三级国产a久久| 91一区一区三区| 日韩欧美中文一区| 中文字幕日韩一区| 日韩国产一区二| jlzzjlzz亚洲日本少妇| 欧美一区日韩一区| 国产精品久久久久一区| 五月天网站亚洲| 成人小视频免费观看| 在线观看91精品国产麻豆| 久久久精品天堂| 午夜精品久久久久久久99樱桃 | 欧美在线你懂的| 日本一区二区久久| 日本va欧美va精品发布| 成人永久免费视频| 精品免费国产一区二区三区四区| 亚洲摸摸操操av| 国产精品一区二区x88av| 欧美日韩成人一区二区| 日韩一区在线看| 国产一区二区成人久久免费影院| 一本高清dvd不卡在线观看| 精品va天堂亚洲国产| 亚洲chinese男男1069| www.欧美.com| 久久久www免费人成精品| 图片区日韩欧美亚洲| 91在线观看成人| 中文字幕的久久| 精品一区二区影视| 欧美久久久久免费| 亚洲专区一二三| 一本一本大道香蕉久在线精品| 久久久久免费观看| 国产一区久久久| 久久综合色综合88| 理论片日本一区| 欧美一区三区四区| 天堂av在线一区| 欧美精品三级日韩久久| 亚洲国产日韩一区二区| 色婷婷综合激情| 亚洲欧美色图小说| 一本久道久久综合中文字幕| 综合婷婷亚洲小说| 一本一本大道香蕉久在线精品| 亚洲天堂av一区| 99精品欧美一区二区蜜桃免费| 中文字幕+乱码+中文字幕一区| 国产精品亚洲人在线观看| 久久久久久久电影| 高清不卡一区二区在线|