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

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

?? ibmcam.c

?? linux內(nèi)核源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
		return scan_NextFrame;	}	/*	 * 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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品三区| 日韩美女在线视频| 色婷婷综合久久久久中文 | 亚洲精品日韩综合观看成人91| 亚洲精品成a人| 日韩精品91亚洲二区在线观看| 麻豆免费看一区二区三区| 成人黄色电影在线| 欧美久久久久久久久中文字幕| 欧美一区二区三区日韩| 国产精品免费看片| 秋霞午夜av一区二区三区| 国产**成人网毛片九色 | 欧美一区二区播放| 中文乱码免费一区二区| 午夜视频在线观看一区二区 | 欧美中文字幕一区| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品久久网站| 麻豆成人久久精品二区三区红 | 亚洲同性同志一二三专区| 欧美aaaaa成人免费观看视频| 91亚洲精品久久久蜜桃网站 | 美女爽到高潮91| 亚洲视频在线观看三级| 五月婷婷久久丁香| 色综合欧美在线| 国产精品天天摸av网| 精品一区二区在线看| 欧美丰满美乳xxx高潮www| 中文字幕在线观看一区二区| 国产v日产∨综合v精品视频| 欧美电影免费观看高清完整版在线| 亚洲国产精品久久久男人的天堂| 不卡一区二区在线| 国产欧美va欧美不卡在线| 国产精品91一区二区| 久久亚洲精华国产精华液 | 26uuu另类欧美亚洲曰本| 日韩精品色哟哟| 日韩一区二区三区在线视频| 亚洲一区二区三区在线看| 成人爱爱电影网址| 中文字幕一区二区三区四区不卡 | 日韩视频不卡中文| 成人av午夜电影| 国内精品久久久久影院一蜜桃| eeuss国产一区二区三区| 国产日韩欧美a| 91视频在线观看免费| 亚洲精品va在线观看| 欧美军同video69gay| 免费人成网站在线观看欧美高清| 精品第一国产综合精品aⅴ| 国产一区二区三区不卡在线观看| 久久久久久久久99精品| 99re这里只有精品首页| 天堂一区二区在线| 久久久国产精品麻豆| 欧美最新大片在线看| 另类欧美日韩国产在线| 国产精品色噜噜| 欧美一区二区三区视频在线观看| 激情欧美日韩一区二区| 国产精品一区二区久久不卡| 亚洲欧洲日产国码二区| 欧美一区二区三区播放老司机| 精品一区二区av| 亚洲香蕉伊在人在线观| 国产欧美一区二区三区在线老狼 | 亚洲三级电影网站| 日韩欧美一区二区久久婷婷| 色呦呦一区二区三区| 国内外精品视频| 爽爽淫人综合网网站| 国产精品女人毛片| 精品日韩一区二区三区免费视频| 99精品国产91久久久久久| 日本网站在线观看一区二区三区| 亚洲人精品一区| 国产日韩综合av| wwwwww.欧美系列| 678五月天丁香亚洲综合网| 91九色最新地址| 99精品在线观看视频| 高清久久久久久| 久久97超碰色| 制服丝袜一区二区三区| 色婷婷精品久久二区二区蜜臂av | 免费国产亚洲视频| 视频一区二区不卡| 婷婷综合在线观看| 亚洲国产欧美另类丝袜| 亚洲成人激情社区| 婷婷综合久久一区二区三区| 图片区小说区区亚洲影院| 亚洲成人黄色小说| 首页亚洲欧美制服丝腿| 午夜精品123| 日本成人中文字幕在线视频| 日本成人在线网站| 国产一区二区伦理片| 成人午夜大片免费观看| caoporm超碰国产精品| av成人免费在线| 日本道在线观看一区二区| 欧美欧美欧美欧美| 欧美成人性战久久| 激情文学综合丁香| 成人成人成人在线视频| 91成人免费电影| 欧美一区二区在线播放| 2019国产精品| 亚洲精品videosex极品| 麻豆91精品91久久久的内涵| 国产乱子轮精品视频| 99视频在线观看一区三区| 欧美日韩和欧美的一区二区| 久久久久久久网| 亚洲最大成人网4388xx| 精品一区二区三区免费播放| 风间由美一区二区三区在线观看| 色94色欧美sute亚洲13| 精品国产三级电影在线观看| 亚洲伦理在线免费看| 久久精品免费观看| 欧美日韩夫妻久久| 亚洲老妇xxxxxx| 国产精品小仙女| 欧美一区二区网站| 亚洲精品高清在线观看| 高清不卡一二三区| 91精品国产色综合久久不卡蜜臀| 欧美国产一区在线| 国产一区美女在线| 91精品国产福利| 亚洲成av人在线观看| av在线播放成人| 欧美高清在线视频| 国产一区在线精品| 欧美成人三级在线| 欧洲一区在线电影| 亚洲色欲色欲www| 99精品久久99久久久久| 中日韩av电影| 不卡的av在线播放| 中文字幕中文在线不卡住| 高潮精品一区videoshd| 国产亚洲短视频| 国产成人精品午夜视频免费| 欧美精品一区二区三区高清aⅴ| 男男gaygay亚洲| 久久这里都是精品| 国产伦精一区二区三区| 久久久777精品电影网影网| 国产精品911| 亚洲欧美日韩国产综合| 欧美性猛交xxxxxx富婆| 午夜视频在线观看一区二区三区| 欧美精品乱码久久久久久| 久久国产精品免费| 欧美韩国日本综合| 欧美专区日韩专区| 日韩精品欧美精品| 久久久久久久av麻豆果冻| 国产成人av电影在线观看| 中文字幕成人av| 欧美理论在线播放| 国产成人自拍高清视频在线免费播放| 国产精品无人区| 555夜色666亚洲国产免| 国产91丝袜在线18| 日韩有码一区二区三区| 国产亚洲精品超碰| 欧美日韩综合在线| 国产精品1区2区| 亚洲va国产va欧美va观看| 久久精品亚洲精品国产欧美kt∨| 日本高清成人免费播放| 国产一区二区中文字幕| 亚洲va国产va欧美va观看| 日本一区二区三区免费乱视频| 欧美性极品少妇| 99国产麻豆精品| 国产在线精品视频| 日韩国产欧美在线播放| 亚洲激情男女视频| 中文一区一区三区高中清不卡| 欧美电影精品一区二区| 欧美中文字幕一二三区视频| 成人精品免费看| 国产一区二区视频在线播放| 日韩黄色免费电影| 亚洲福利一二三区| 一区二区欧美在线观看| 中文字幕的久久| 国产又黄又大久久| 久久99精品国产.久久久久久| 五月天一区二区| 午夜国产精品影院在线观看|