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

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

?? ibmcam.c

?? 底層驅動開發
?? C
?? 第 1 頁 / 共 5 頁
字號:
	}	/*	 * Make sure that our writing into output buffer	 * will not exceed the buffer. Note that we may write	 * not into current output scanline but in several after	 * it as well (if we enlarge image vertically.)	 */	if ((frame->curline + 1) >= data_h) {		if (uvd->debug >= 3)			info("Reached line %d. (frame is done)", frame->curline);		return scan_NextFrame;	}	/* Make sure there's enough data for the entire line */	len = 3 * data_w; /* <y-data> <uv-data> */	assert(len <= sizeof(lineBuffer));	/* Make sure there's enough data for the entire line */	if (RingQueue_GetLength(&uvd->dp) < len)		return scan_Out;	/* Suck one line out of the ring queue */	RingQueue_Dequeue(&uvd->dp, lineBuffer, len);	data = lineBuffer;	color = data + data_w;		/* Point to where color planes begin */	/* Bottom-to-top scanning */	rw = (int)VIDEOSIZE_Y(frame->request) - (int)(frame->curline) - 1;	RESTRICT_TO_RANGE(rw, 0, VIDEOSIZE_Y(frame->request)-1);	for (i = 0; i < VIDEOSIZE_X(frame->request); i++) {		int y, rv, gv, bv;	/* RGB components */		if (i < data_w) {			y = data[i];	/* Luminosity is the first line */			/* Apply static color correction */			u = color[i*2] + hue_corr;			v = color[i*2 + 1] + hue2_corr;			/* Apply color correction */			if (color_corr != 0) {				/* Magnify up to 2 times, reduce down to zero saturation */				u = 128 + ((ccm + color_corr) * (u - 128)) / ccm;				v = 128 + ((ccm + color_corr) * (v - 128)) / ccm;			}		} else			y = 0, u = v = 128;		YUV_TO_RGB_BY_THE_BOOK(y, u, v, rv, gv, bv);		RGB24_PUTPIXEL(frame, i, rw, rv, gv, bv); /* Done by deinterlacing now */	}	frame->deinterlace = Deinterlace_FillEvenLines;	/*	 * Account for number of bytes that we wrote into output V4L frame.	 * We do it here, after we are done with the scanline, because we	 * may fill more than one output scanline if we do vertical	 * enlargement.	 */	frame->curline += 2;	*pcopylen += 2 * v4l_linesize;	if (frame->curline >= VIDEOSIZE_Y(frame->request)) {		if (uvd->debug >= 3) {			info("All requested lines (%ld.) done.",			     VIDEOSIZE_Y(frame->request));		}		return scan_NextFrame;	} else		return scan_Continue;}/* * ibmcam_model4_128x96_parse_lines() * * This decoder is for one strange data format that is produced by Model 4 * camera only in 128x96 mode. This is RGB format and here is its description. * First of all, this is non-interlaced stream, meaning that all scan lines * are present in the datastream. There are 96 consecutive blocks of data * that describe all 96 lines of the image. Each block is 5*128 bytes long * and carries R, G, B components. The format of the block is shown in the * code below. First 128*2 bytes are interleaved R and G components. Then * we have a gap (junk data) 64 bytes long. Then follow B and something * else, also interleaved (this makes another 128*2 bytes). After that * probably another 64 bytes of junk follow. * * History: * 10-Feb-2001 Created. */static enum ParseState ibmcam_model4_128x96_parse_lines(	struct uvd *uvd,	struct usbvideo_frame *frame,	long *pcopylen){	const unsigned char *data_rv, *data_gv, *data_bv;	unsigned int len;	int i, v4l_linesize; /* V4L line offset */	const int data_w=128, data_h=96;	static unsigned char lineBuffer[128*5];	v4l_linesize = VIDEOSIZE_X(frame->request) * V4L_BYTES_PER_PIXEL;	/*	 * Make sure that our writing into output buffer	 * will not exceed the buffer. Note that we may write	 * not into current output scanline but in several after	 * it as well (if we enlarge image vertically.)	 */	if ((frame->curline + 1) >= data_h) {		if (uvd->debug >= 3)			info("Reached line %d. (frame is done)", frame->curline);		return scan_NextFrame;	}	/*	 * RGRGRG .... RGRG_____________B?B?B? ... B?B?____________	 * <---- 128*2 ---><---- 64 ---><--- 128*2 ---><--- 64 --->	 */	/* Make sure there's enough data for the entire line */	len = 5 * data_w;	assert(len <= sizeof(lineBuffer));	/* Make sure there's enough data for the entire line */	if (RingQueue_GetLength(&uvd->dp) < len)		return scan_Out;	/* Suck one line out of the ring queue */	RingQueue_Dequeue(&uvd->dp, lineBuffer, len);	data_rv = lineBuffer;	data_gv = lineBuffer + 1;	data_bv = lineBuffer + data_w*2 + data_w/2;	for (i = 0; i < VIDEOSIZE_X(frame->request); i++) {		int rv, gv, bv;	/* RGB components */		if (i < data_w) {			const int j = i * 2;			gv = data_rv[j];			rv = data_gv[j];			bv = data_bv[j];			if (flags & FLAGS_MONOCHROME) {				unsigned long y;				y = rv + gv + bv;				y /= 3;				if (y > 0xFF)					y = 0xFF;				rv = gv = bv = (unsigned char) y;			}		} else {			rv = gv = bv = 0;		}		RGB24_PUTPIXEL(frame, i, frame->curline, rv, gv, bv);	}	frame->deinterlace = Deinterlace_None;	frame->curline++;	*pcopylen += v4l_linesize;	if (frame->curline >= VIDEOSIZE_Y(frame->request)) {		if (uvd->debug >= 3) {			info("All requested lines (%ld.) done.",			     VIDEOSIZE_Y(frame->request));		}		return scan_NextFrame;	} else		return scan_Continue;}/* * ibmcam_ProcessIsocData() * * Generic routine to parse the ring queue data. It employs either * ibmcam_find_header() or ibmcam_parse_lines() to do most * of work. * * History: * 1/21/00  Created. */static void ibmcam_ProcessIsocData(struct uvd *uvd,				   struct usbvideo_frame *frame){	enum ParseState newstate;	long copylen = 0;	int mod = IBMCAM_T(uvd)->camera_model;	while (1) {		newstate = scan_Out;		if (RingQueue_GetLength(&uvd->dp) > 0) {			if (frame->scanstate == ScanState_Scanning) {				newstate = ibmcam_find_header(uvd);			} else if (frame->scanstate == ScanState_Lines) {				if ((mod == IBMCAM_MODEL_2) &&				    ((uvd->videosize == VIDEOSIZE_352x288) ||				     (uvd->videosize == VIDEOSIZE_320x240) ||				     (uvd->videosize == VIDEOSIZE_352x240)))				{					newstate = ibmcam_model2_320x240_parse_lines(						uvd, frame, &copylen);				} else if (mod == IBMCAM_MODEL_4) {					/*					 * Model 4 cameras (IBM NetCamera) use Model 2 decoder (RGB)					 * for 320x240 and above; 160x120 and 176x144 uses Model 1					 * decoder (YUV), and 128x96 mode uses ???					 */					if ((uvd->videosize == VIDEOSIZE_352x288) ||					    (uvd->videosize == VIDEOSIZE_320x240) ||					    (uvd->videosize == VIDEOSIZE_352x240))					{						newstate = ibmcam_model2_320x240_parse_lines(uvd, frame, &copylen);					} else if (uvd->videosize == VIDEOSIZE_128x96) {						newstate = ibmcam_model4_128x96_parse_lines(uvd, frame, &copylen);					} else {						newstate = ibmcam_parse_lines(uvd, frame, &copylen);					}				} else if (mod == IBMCAM_MODEL_3) {					newstate = ibmcam_model3_parse_lines(uvd, frame, &copylen);				} else {					newstate = ibmcam_parse_lines(uvd, frame, &copylen);				}			}		}		if (newstate == scan_Continue)			continue;		else if ((newstate == scan_NextFrame) || (newstate == scan_Out))			break;		else			return; /* scan_EndParse */	}	if (newstate == scan_NextFrame) {		frame->frameState = FrameState_Done;		uvd->curframe = -1;		uvd->stats.frame_num++;		if ((mod == IBMCAM_MODEL_2) || (mod == IBMCAM_MODEL_4)) {			/* Need software contrast adjustment for those cameras */			frame->flags |= USBVIDEO_FRAME_FLAG_SOFTWARE_CONTRAST;		}	}	/* Update the frame's uncompressed length. */	frame->seqRead_Length += copylen;#if 0	{		static unsigned char j=0;		memset(frame->data, j++, uvd->max_frame_size);		frame->frameState = FrameState_Ready;	}#endif}/* * ibmcam_veio() * * History: * 1/27/00  Added check for dev == NULL; this happens if camera is unplugged. */static int ibmcam_veio(	struct uvd *uvd,	unsigned char req,	unsigned short value,	unsigned short index){	static const char proc[] = "ibmcam_veio";	unsigned char cp[8] /* = { 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef } */;	int i;	if (!CAMERA_IS_OPERATIONAL(uvd))		return 0;	if (req == 1) {		i = usb_control_msg(			uvd->dev,			usb_rcvctrlpipe(uvd->dev, 0),			req,			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT,			value,			index,			cp,			sizeof(cp),			1000);#if 0		info("USB => %02x%02x%02x%02x%02x%02x%02x%02x "		       "(req=$%02x val=$%04x ind=$%04x)",		       cp[0],cp[1],cp[2],cp[3],cp[4],cp[5],cp[6],cp[7],		       req, value, index);#endif	} else {		i = usb_control_msg(			uvd->dev,			usb_sndctrlpipe(uvd->dev, 0),			req,			USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT,			value,			index,			NULL,			0,			1000);	}	if (i < 0) {		err("%s: ERROR=%d. Camera stopped; Reconnect or reload driver.",		    proc, i);		uvd->last_error = i;	}	return i;}/* * ibmcam_calculate_fps() * * This procedure roughly calculates the real frame rate based * on FPS code (framerate=NNN option). Actual FPS differs * slightly depending on lighting conditions, so that actual frame * rate is determined by the camera. Since I don't know how to ask * the camera what FPS is now I have to use the FPS code instead. * * The FPS code is in range [0..6], 0 is slowest, 6 is fastest. * Corresponding real FPS should be in range [3..30] frames per second. * The conversion formula is obvious: * * real_fps = 3 + (fps_code * 4.5) * * History: * 1/18/00  Created. */static int ibmcam_calculate_fps(struct uvd *uvd){	return 3 + framerate*4 + framerate/2;}/* * ibmcam_send_FF_04_02() * * This procedure sends magic 3-command prefix to the camera. * The purpose of this prefix is not known. * * History: * 1/2/00   Created. */static void ibmcam_send_FF_04_02(struct uvd *uvd){	ibmcam_veio(uvd, 0, 0x00FF, 0x0127);	ibmcam_veio(uvd, 0, 0x0004, 0x0124);	ibmcam_veio(uvd, 0, 0x0002, 0x0124);}static void ibmcam_send_00_04_06(struct uvd *uvd){	ibmcam_veio(uvd, 0, 0x0000, 0x0127);	ibmcam_veio(uvd, 0, 0x0004, 0x0124);	ibmcam_veio(uvd, 0, 0x0006, 0x0124);}static void ibmcam_send_x_00(struct uvd *uvd, unsigned short x){	ibmcam_veio(uvd, 0, x,      0x0127);	ibmcam_veio(uvd, 0, 0x0000, 0x0124);}static void ibmcam_send_x_00_05(struct uvd *uvd, unsigned short x){	ibmcam_send_x_00(uvd, x);	ibmcam_veio(uvd, 0, 0x0005, 0x0124);}static void ibmcam_send_x_00_05_02(struct uvd *uvd, unsigned short x){	ibmcam_veio(uvd, 0, x,      0x0127);	ibmcam_veio(uvd, 0, 0x0000, 0x0124);	ibmcam_veio(uvd, 0, 0x0005, 0x0124);	ibmcam_veio(uvd, 0, 0x0002, 0x0124);}static void ibmcam_send_x_01_00_05(struct uvd *uvd, unsigned short x){	ibmcam_veio(uvd, 0, x,      0x0127);	ibmcam_veio(uvd, 0, 0x0001, 0x0124);	ibmcam_veio(uvd, 0, 0x0000, 0x0124);	ibmcam_veio(uvd, 0, 0x0005, 0x0124);}static void ibmcam_send_x_00_05_02_01(struct uvd *uvd, unsigned short x){	ibmcam_veio(uvd, 0, x,      0x0127);	ibmcam_veio(uvd, 0, 0x0000, 0x0124);	ibmcam_veio(uvd, 0, 0x0005, 0x0124);	ibmcam_veio(uvd, 0, 0x0002, 0x0124);	ibmcam_veio(uvd, 0, 0x0001, 0x0124);}static void ibmcam_send_x_00_05_02_08_01(struct uvd *uvd, unsigned short x){	ibmcam_veio(uvd, 0, x,      0x0127);	ibmcam_veio(uvd, 0, 0x0000, 0x0124);	ibmcam_veio(uvd, 0, 0x0005, 0x0124);	ibmcam_veio(uvd, 0, 0x0002, 0x0124);	ibmcam_veio(uvd, 0, 0x0008, 0x0124);	ibmcam_veio(uvd, 0, 0x0001, 0x0124);}static void ibmcam_Packet_Format1(struct uvd *uvd, unsigned char fkey, unsigned char val){	ibmcam_send_x_01_00_05(uvd, unknown_88);	ibmcam_send_x_00_05(uvd, fkey);	ibmcam_send_x_00_05_02_08_01(uvd, val);	ibmcam_send_x_00_05(uvd, unknown_88);	ibmcam_send_x_00_05_02_01(uvd, fkey);	ibmcam_send_x_00_05(uvd, unknown_89);	ibmcam_send_x_00(uvd, fkey);	ibmcam_send_00_04_06(uvd);	ibmcam_veio(uvd, 1, 0x0000, 0x0126);	ibmcam_send_FF_04_02(uvd);}static void ibmcam_PacketFormat2(struct uvd *uvd, unsigned char fkey, unsigned char val){	ibmcam_send_x_01_00_05	(uvd, unknown_88);	ibmcam_send_x_00_05	(uvd, fkey);	ibmcam_send_x_00_05_02	(uvd, val);}static void ibmcam_model2_Packet2(struct uvd *uvd){	ibmcam_veio(uvd, 0, 0x00ff, 0x012d);	ibmcam_veio(uvd, 0, 0xfea3, 0x0124);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩综合在线免费观看| 久久亚洲综合色| 日韩精品中文字幕一区| 欧美高清在线一区二区| 亚洲一二三专区| 大陆成人av片| 亚洲精品一区二区三区99| 亚洲精选免费视频| 成人av集中营| 国产午夜精品一区二区三区嫩草 | www.性欧美| 精品国产91洋老外米糕| 一区二区三区在线观看动漫| 国产精品一区二区三区乱码| 56国语精品自产拍在线观看| 亚洲另类在线制服丝袜| av成人老司机| 成人免费在线播放视频| 精品一区精品二区高清| 91.成人天堂一区| 亚洲一区二区欧美| 91老师国产黑色丝袜在线| 欧美国产97人人爽人人喊| 九一九一国产精品| 日韩亚洲欧美高清| 麻豆精品精品国产自在97香蕉| 欧美三级韩国三级日本三斤| 亚洲欧洲国产日韩| 99精品视频中文字幕| 国产女同互慰高潮91漫画| 国产精品1区二区.| 国产精品系列在线| 99视频在线观看一区三区| 国产欧美日韩综合| www.欧美色图| 亚洲人精品午夜| 在线一区二区视频| 亚洲国产精品久久人人爱| 欧美日韩视频专区在线播放| 亚洲18色成人| 欧美一区二区美女| 国产在线播放一区| 国产日韩欧美亚洲| 99精品视频在线观看| 一区二区三区四区不卡在线 | 亚洲成a人在线观看| 欧美日韩激情在线| 日韩av在线发布| 精品免费日韩av| 高清不卡一二三区| 亚洲欧美另类久久久精品| 欧美亚洲综合另类| 蜜桃av一区二区| 国产欧美日韩三级| 一本色道a无线码一区v| 五月激情综合网| 26uuu色噜噜精品一区| 国产成人精品免费一区二区| 亚洲欧美自拍偷拍色图| 7799精品视频| 成人激情动漫在线观看| 一个色综合网站| 欧美成人一区二区三区片免费| 国产久卡久卡久卡久卡视频精品| 中国色在线观看另类| 欧美美女一区二区三区| 国产综合久久久久久鬼色| 国产精品第一页第二页第三页| 在线视频国产一区| 老司机免费视频一区二区三区| 中文字幕国产精品一区二区| 欧美视频一区二区在线观看| 国产资源精品在线观看| 亚洲黄色尤物视频| 久久综合九色综合97婷婷| 91精品福利视频| 韩国精品在线观看| 亚洲不卡在线观看| 国产精品水嫩水嫩| 日韩欧美一二三四区| 色综合久久中文字幕| 国产自产视频一区二区三区| 亚洲永久精品国产| 国产日产欧美一区二区视频| 在线播放日韩导航| 91丨九色丨蝌蚪丨老版| 久久国产综合精品| 午夜视频在线观看一区二区| 国产精品视频免费| 欧美va日韩va| 欧美久久婷婷综合色| 97久久超碰国产精品电影| 久久国产精品区| 亚洲va在线va天堂| 亚洲天堂成人在线观看| 久久久99免费| 日韩欧美国产不卡| 欧美剧情片在线观看| www.亚洲免费av| 成人动漫av在线| 国产乱码字幕精品高清av| 免费成人在线播放| 香蕉影视欧美成人| 亚洲精品一二三| 亚洲私人影院在线观看| 国产欧美一区二区精品性| 久久先锋资源网| 欧美第一区第二区| 精品免费国产二区三区 | 视频在线在亚洲| 亚洲一区二区偷拍精品| 怡红院av一区二区三区| 亚洲色图清纯唯美| 亚洲天天做日日做天天谢日日欢| 国产精品女同一区二区三区| 国产精品色婷婷久久58| 国产精品久久久久久久久久久免费看| 久久久久久久久久美女| 久久久国产精品午夜一区ai换脸| 欧美精品一区在线观看| 亚洲国产高清在线| 国产精品久久久久影院| 亚洲精选视频免费看| 亚洲一区二区精品3399| 日韩—二三区免费观看av| 奇米精品一区二区三区四区| 久久丁香综合五月国产三级网站| 精品一区二区免费在线观看| 国产精品一级二级三级| 丁香婷婷综合激情五月色| 99精品国产视频| 欧美在线999| 8x福利精品第一导航| 久久人人97超碰com| 国产精品网站一区| 亚洲一区二区三区免费视频| 午夜精品一区二区三区电影天堂 | 丁香婷婷综合色啪| 色综合天天在线| 在线播放中文字幕一区| 久久精品在这里| 一区二区在线免费| 麻豆国产精品视频| 成人av第一页| 欧美高清视频www夜色资源网| 日韩美女一区二区三区| 国产精品嫩草影院com| 亚洲一卡二卡三卡四卡| 国产在线国偷精品免费看| 91麻豆产精品久久久久久| 91麻豆精品久久久久蜜臀 | 亚洲自拍偷拍麻豆| 久久不见久久见免费视频7| 成人不卡免费av| 91精品国产91久久久久久最新毛片| 欧美不卡视频一区| 伊人一区二区三区| 国产在线麻豆精品观看| 日本精品一区二区三区四区的功能| 日韩一区二区三区在线观看 | 波多野结衣亚洲| 91精品国产91久久久久久最新毛片| 久久精品人人做人人综合 | 国产99一区视频免费| 欧美群妇大交群的观看方式| 国产日韩欧美综合一区| 日本网站在线观看一区二区三区| av一区二区三区黑人| 日韩三级伦理片妻子的秘密按摩| 亚洲欧美色图小说| 国产精品 日产精品 欧美精品| 欧美色爱综合网| 国产精品国产三级国产普通话三级 | 精品对白一区国产伦| 五月天激情综合| 色999日韩国产欧美一区二区| 精品福利在线导航| 日本伊人午夜精品| 在线免费观看日本欧美| 最新不卡av在线| 成人精品一区二区三区中文字幕 | 一本大道久久a久久精品综合| 久久女同互慰一区二区三区| 日本网站在线观看一区二区三区| 日本韩国一区二区三区| 亚洲私人黄色宅男| youjizz久久| 国产精品女主播av| 大美女一区二区三区| 久久久久久一二三区| 国产在线一区二区| 日韩精品资源二区在线| 麻豆免费精品视频| 欧美成人福利视频| 欧美96一区二区免费视频| 欧美欧美欧美欧美首页| 日产国产欧美视频一区精品| 欧美无人高清视频在线观看| 一区二区三区四区亚洲| 91国偷自产一区二区三区成为亚洲经典 |