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

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

?? track.c

?? motion motion
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*	track.c * *	Experimental motion tracking. * *	Copyright 2000, Jeroen Vreeken *	This program is published under the GNU Public license */#include <math.h>#include <termios.h>#include "motion.h"#ifndef WITHOUT_V4L#include "pwc-ioctl.h"#endifstruct trackoptions track_template = {	dev:            -1,             /* dev open */	port:           NULL,           /* char *port */	motorx:         0,              /* int motorx */	motory:		0,		/* int motory */	maxx:           0,              /* int maxx; */	maxy:		0,		/* int maxy; */	speed:          TRACK_SPEED,    /* speed */	stepsize:       TRACK_STEPSIZE, /* stepsize */	active:         0,              /* auto tracking active */	minmaxfound:    0,  /* flag for minmax values stored for pwc based camera */	step_angle_x:   10, /* step angle in degrees X-axis that camera moves during auto tracking */	step_angle_y:   10, /* step angle in degrees Y-axis that camera moves during auto tracking */	move_wait:      10   /* number of frames to disable motion detection after camera moving */};/* Add your own center and move functions here: */static unsigned short int stepper_center(struct context *cnt, int xoff, int yoff ATTRIBUTE_UNUSED);static unsigned short int stepper_move(struct context *cnt, struct coord *cent, struct images *imgs);static unsigned short int iomojo_center(struct context *cnt, int xoff, int yoff);static unsigned short int iomojo_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs);#ifndef WITHOUT_V4Lstatic unsigned short int lqos_center(struct context *cnt, int dev, int xoff, int yoff);static unsigned short int lqos_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs, unsigned short int manual);#ifdef MOTION_V4L2static unsigned short int uvc_center(struct context *cnt, int dev, int xoff, int yoff);static unsigned short int uvc_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs, unsigned short int manual);#endif /* MOTION_V4L2 */#endif /* WITHOUT_V4L *//* Add a call to your functions here: */unsigned short int track_center(struct context *cnt, int dev ATTRIBUTE_UNUSED, unsigned short int manual, int xoff, int yoff){	if (!manual && !cnt->track.active)		return 0;	if (cnt->track.type == TRACK_TYPE_STEPPER){		unsigned short int ret;		ret = stepper_center(cnt, xoff, yoff);		if (!ret) {				motion_log(LOG_ERR, 1, "track_center: internal error (stepper_center)");				return 0;				}		else return ret;		}#ifndef WITHOUT_V4L		else if (cnt->track.type == TRACK_TYPE_PWC)		return lqos_center(cnt, dev, xoff, yoff);#ifdef MOTION_V4L2	else if (cnt->track.type == TRACK_TYPE_UVC)		return uvc_center(cnt, dev, xoff, yoff);#endif /* MOTION_V4L2 */#endif /* WITHOUT_V4L */	else if (cnt->track.type == TRACK_TYPE_IOMOJO)		return iomojo_center(cnt, xoff, yoff);	else if (cnt->track.type == TRACK_TYPE_GENERIC)		return 10; // FIX ME. I chose to return something reasonable.	motion_log(LOG_ERR, 1, "track_center: internal error, %hu is not a known track-type", cnt->track.type);	return 0;}/* Add a call to your functions here: */unsigned short int track_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs, unsigned short int manual){	if (!manual && !cnt->track.active)		return 0;	if (cnt->track.type == TRACK_TYPE_STEPPER)		return stepper_move(cnt, cent, imgs);#ifndef WITHOUT_V4L	else if (cnt->track.type == TRACK_TYPE_PWC)		return lqos_move(cnt, dev, cent, imgs, manual);#ifdef MOTION_V4L2	else if (cnt->track.type == TRACK_TYPE_UVC)		return uvc_move(cnt, dev, cent, imgs, manual);#endif /* MOTION_V4L2 */#endif /* WITHOUT_V4L */	else if (cnt->track.type == TRACK_TYPE_IOMOJO)		return iomojo_move(cnt, dev, cent, imgs);	else if (cnt->track.type == TRACK_TYPE_GENERIC)		return cnt->track.move_wait; // FIX ME. I chose to return something reasonable.	motion_log(LOG_ERR, 1, "track_move: internal error, %hu is not a known track-type", cnt->track.type);	return 0;}/******************************************************************************	Stepper motor on serial port	http://www.lavrsen.dk/twiki/bin/view/Motion/MotionTracking	http://www.lavrsen.dk/twiki/bin/view/Motion/MotionTrackerAPI******************************************************************************/static unsigned short int stepper_command(struct context *cnt, unsigned short int motor, unsigned short int command,  					unsigned short int data){	char buffer[3];	time_t timeout=time(NULL);	buffer[0]=motor;	buffer[1]=command;	buffer[2]=data;	if (write(cnt->track.dev, buffer, 3)!=3){		motion_log(LOG_ERR, 1, "stepper_command port %s dev fd %i, motor %hu command %hu data %hu",		                       cnt->track.port, cnt->track.dev, motor, command, data);		return 0;	}	while (read(cnt->track.dev, buffer, 1)!=1 && time(NULL) < timeout+1);	if (time(NULL) >= timeout+2) {		motion_log(LOG_ERR, 1, "Status byte timeout!");		return 0;	}	return buffer[0];}static unsigned short int stepper_status(struct context *cnt,  unsigned short int motor){	return stepper_command(cnt, motor, STEPPER_COMMAND_STATUS, 0);}static unsigned short int stepper_center(struct context *cnt, int x_offset, int y_offset){	struct termios adtio;	if (cnt->track.dev<0) {		motion_log(LOG_INFO, 0, "Try to open serial device %s", cnt->track.port);				if ((cnt->track.dev=open(cnt->track.port, O_RDWR | O_NOCTTY)) < 0) {			motion_log(LOG_ERR, 1, "Unable to open serial device %s", cnt->track.port);			return 0;		}		bzero (&adtio, sizeof(adtio));		adtio.c_cflag= STEPPER_BAUDRATE | CS8 | CLOCAL | CREAD;		adtio.c_iflag= IGNPAR;		adtio.c_oflag= 0;		adtio.c_lflag= 0;	/* non-canon, no echo */		adtio.c_cc[VTIME]=0;	/* timer unused */		adtio.c_cc[VMIN]=0;	/* blocking read until 1 char */		tcflush (cnt->track.dev, TCIFLUSH);		if (tcsetattr(cnt->track.dev, TCSANOW, &adtio) < 0) {			motion_log(LOG_ERR, 1, "Unable to initialize serial device %s", cnt->track.port);			return 0;		}		motion_log(LOG_INFO, 0, "Opened serial device %s and initialize, fd %i", cnt->track.port, cnt->track.dev);	}	/* x-axis */		stepper_command(cnt, cnt->track.motorx, STEPPER_COMMAND_SPEED, cnt->track.speed);	stepper_command(cnt, cnt->track.motorx, STEPPER_COMMAND_LEFT_N, cnt->track.maxx);	while (stepper_status(cnt, cnt->track.motorx) & STEPPER_STATUS_LEFT);	stepper_command(cnt, cnt->track.motorx, STEPPER_COMMAND_RIGHT_N,	                cnt->track.maxx / 2 + x_offset * cnt->track.stepsize);	while (stepper_status(cnt, cnt->track.motorx) & STEPPER_STATUS_RIGHT);	/* y-axis */	stepper_command(cnt, cnt->track.motory, STEPPER_COMMAND_SPEED, cnt->track.speed);	stepper_command(cnt, cnt->track.motory, STEPPER_COMMAND_UP_N, cnt->track.maxy);	while (stepper_status(cnt, cnt->track.motory) & STEPPER_STATUS_UP)		stepper_command(cnt, cnt->track.motory, STEPPER_COMMAND_DOWN_N,			cnt->track.maxy / 2 + y_offset * cnt->track.stepsize);			while (stepper_status(cnt, cnt->track.motory) & STEPPER_STATUS_DOWN);		return cnt->track.move_wait;}static unsigned short int stepper_move(struct context *cnt, struct coord *cent, struct images *imgs){	unsigned short int command = 0, data = 0;	if (cnt->track.dev < 0){		motion_log(LOG_INFO, 0, "No device %s started yet , trying stepper_center()", cnt->track.port);			if (!stepper_center(cnt, 0, 0)){			motion_log(LOG_ERR, 1, "Stepper_center() failed to initialize stepper device on %s , fd [%i].", 			                        cnt->track.port, cnt->track.dev);				return 0;		}		motion_log(LOG_INFO, 0, "stepper_center() succeed , device started %s , fd [%i]", cnt->track.port, cnt->track.dev);		}	/* x-axis */		if (cent->x < imgs->width / 2) {		command = STEPPER_COMMAND_LEFT_N;		data = imgs->width / 2 - cent->x;	}	if (cent->x > imgs->width / 2) {		command = STEPPER_COMMAND_RIGHT_N;		data = cent->x - imgs->width / 2;	}	data = data * cnt->track.stepsize / imgs->width;	if (data) stepper_command(cnt, cnt->track.motorx, command, data);	/* y-axis */	if (cent->y < imgs->height / 2) {		command = STEPPER_COMMAND_UP_N;		data = imgs->height / 2 - cent->y;	}	if (cent->y > imgs->height / 2) {		command = STEPPER_COMMAND_DOWN_N;		data = cent->y - imgs->height / 2;	}		data = data * cnt->track.stepsize / imgs->height;	if (data) stepper_command(cnt, cnt->track.motory, command, data);				return cnt->track.move_wait;}/******************************************************************************	Iomojo Smilecam on serial port******************************************************************************/static char iomojo_command(struct context *cnt, char *command, unsigned short int len, unsigned short int ret){	char buffer[1];	time_t timeout = time(NULL);	if (write(cnt->track.dev, command, len) != len)		return 0;	if (ret) {		while (read(cnt->track.dev, buffer, 1) != 1 && time(NULL) < timeout + 2);				if (time(NULL) >= timeout + 2) {			motion_log(LOG_ERR, 1, "Return byte timeout!");			return 0;		}	}	/* range values ? */	return buffer[0];}static void iomojo_setspeed(struct context *cnt, unsigned short int speed){	char command[3];		command[0] = IOMOJO_SETSPEED_CMD;	command[1] = cnt->track.iomojo_id;	command[2] = speed;		if (iomojo_command(cnt, command, 3, 1)!=IOMOJO_SETSPEED_RET)		motion_log(LOG_ERR, 1, "Unable to set camera speed");}static void iomojo_movehome(struct context *cnt){	char command[2];		command[0] = IOMOJO_MOVEHOME;	command[1] = cnt->track.iomojo_id;	iomojo_command(cnt, command, 2, 0);}static unsigned short int iomojo_center(struct context *cnt, int x_offset, int y_offset){	struct termios adtio;	char command[5], direction=0;	if (cnt->track.dev<0) {		if ((cnt->track.dev=open(cnt->track.port, O_RDWR | O_NOCTTY)) < 0) {			motion_log(LOG_ERR, 1, "Unable to open serial device %s", cnt->track.port);			return 0;		}		bzero (&adtio, sizeof(adtio));		adtio.c_cflag = IOMOJO_BAUDRATE | CS8 | CLOCAL | CREAD;		adtio.c_iflag = IGNPAR;		adtio.c_oflag = 0;		adtio.c_lflag = 0;      /* non-canon, no echo */		adtio.c_cc[VTIME] = 0;  /* timer unused */		adtio.c_cc[VMIN] = 0;   /* blocking read until 1 char */		tcflush(cnt->track.dev, TCIFLUSH);		if (tcsetattr(cnt->track.dev, TCSANOW, &adtio) < 0) {			motion_log(LOG_ERR, 1, "Unable to initialize serial device %s", cnt->track.port);			return 0;		}	}	iomojo_setspeed(cnt, 40);	iomojo_movehome(cnt);	if (x_offset || y_offset) {		if (x_offset > 0)			direction |= IOMOJO_DIRECTION_RIGHT;		else {			direction |= IOMOJO_DIRECTION_LEFT;			x_offset *= -1;		}		if (y_offset > 0)			direction |= IOMOJO_DIRECTION_UP;		else {			direction |= IOMOJO_DIRECTION_DOWN;			y_offset *= -1;		}		if (x_offset > 180)			x_offset = 180;		if (y_offset > 60)			y_offset = 60;		command[0] = IOMOJO_MOVEOFFSET_CMD;		command[1] = cnt->track.iomojo_id;		command[2] = direction;		command[3] = x_offset;		command[4] = y_offset;		iomojo_command(cnt, command, 5, 0);	}	motion_log(LOG_INFO, 0, "iomojo_center() succeed");	return cnt->track.move_wait;}static unsigned short int iomojo_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs){	char command[5];	int direction = 0;	int nx = 0, ny = 0;	int i;		if (dev < 0)		if (!iomojo_center(cnt, 0, 0))			return 0;	if (cent->x < imgs->width / 2) {		direction |= IOMOJO_DIRECTION_LEFT;		nx = imgs->width / 2 - cent->x;	}	if (cent->x > imgs->width / 2) {		direction |= IOMOJO_DIRECTION_RIGHT;		nx = cent->x - imgs->width / 2;	}	if (cent->y < imgs->height / 2) {		direction |= IOMOJO_DIRECTION_DOWN;		ny = imgs->height / 2 - cent->y;	}	if (cent->y > imgs->height / 2) {		direction |= IOMOJO_DIRECTION_UP;		ny = cent->y - imgs->height / 2;	}	nx = nx * 72 / imgs->width;	ny = ny * 72 / imgs->height;	if (nx || ny) {		if (nx > 180)			nx = 180;		if (ny > 60)			ny = 60;		command[0] = IOMOJO_MOVEOFFSET_CMD;		command[1] = cnt->track.iomojo_id;		command[2] = direction;		command[3] = nx;		command[4] = ny;		iomojo_command(cnt, command, 5, 0);		/* Number of frames to skip while moving */		if (ny >= nx)			i = 25 * ny / 90;		else			i = 25 * nx / 90;		return i;	}	return 0;}/******************************************************************************	Logitech QuickCam Orbit camera tracking code by folkert@vanheusden.com

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区欧美二区| 在线看国产一区| 9191久久久久久久久久久| 久久久久九九视频| 亚洲国产精品久久久久婷婷884 | 波多野结衣视频一区| 国产成人三级在线观看| 99视频一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 不卡视频一二三四| 精品国产免费一区二区三区香蕉 | 日韩视频在线永久播放| 亚洲色图视频网站| 国产麻豆午夜三级精品| 欧美一区二区久久| 蜜桃视频在线一区| 555www色欧美视频| 夜夜嗨av一区二区三区网页 | 成人精品小蝌蚪| 亚洲精品久久7777| 成人精品gif动图一区| 久久中文字幕电影| 粉嫩嫩av羞羞动漫久久久| 久久久久久久一区| 国产麻豆成人精品| 久久精品免视看| 精品免费视频.| 国产一区二区三区精品视频| 欧美不卡在线视频| 国产成人精品免费看| 国产精品欧美一级免费| 99re8在线精品视频免费播放| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人av在线资源网站| 亚洲欧洲www| 欧美日韩午夜影院| 久久99精品久久久久久动态图| 久久五月婷婷丁香社区| 成人教育av在线| 亚洲永久免费视频| 欧美成人激情免费网| 国产高清精品在线| 亚洲一区二区三区不卡国产欧美 | 国产麻豆91精品| 国产精品久久久久久久久快鸭| 欧美性大战久久久久久久蜜臀 | 色素色在线综合| 美女高潮久久久| 中文字幕乱码日本亚洲一区二区 | 2欧美一区二区三区在线观看视频| 豆国产96在线|亚洲| 婷婷丁香久久五月婷婷| 国产精品美女一区二区三区| 欧美一级午夜免费电影| av激情亚洲男人天堂| 成人av网址在线观看| 亚洲精品中文字幕乱码三区 | 91在线免费看| 九九精品视频在线看| 伊人婷婷欧美激情| 国产亚洲欧美一区在线观看| 欧美人成免费网站| 色8久久人人97超碰香蕉987| 国产精品一区二区在线观看网站| 亚洲成人av在线电影| 中文字幕一区二区三区蜜月 | 亚洲一区二区三区小说| 中文字幕亚洲区| 国产精品剧情在线亚洲| 久久久久久亚洲综合影院红桃| 欧美日本精品一区二区三区| 色94色欧美sute亚洲线路一ni | 亚洲图片欧美综合| 亚洲精品成人少妇| 一级日本不卡的影视| 一区二区三区高清不卡| 男男视频亚洲欧美| xnxx国产精品| 日韩一级欧美一级| 欧美大片在线观看一区二区| 欧美美女喷水视频| 3d成人h动漫网站入口| 91麻豆精品国产91久久久久久| 欧美日本视频在线| 欧美人动与zoxxxx乱| 欧美一级片免费看| 欧美成人一级视频| 久久久久亚洲蜜桃| 亚洲精品视频在线| 日韩精品每日更新| 美国精品在线观看| 国产一区视频在线看| 成人av集中营| 日韩一级视频免费观看在线| 久久亚洲一区二区三区四区| 国产精品二三区| 午夜视频一区二区三区| 九色porny丨国产精品| 盗摄精品av一区二区三区| 91精品婷婷国产综合久久| 欧美视频在线一区| xf在线a精品一区二区视频网站| 亚洲国产精品二十页| 亚洲一区自拍偷拍| 麻豆91小视频| 99国产欧美另类久久久精品| 91麻豆精品国产91久久久资源速度 | 欧美日韩一二区| 国产人妖乱国产精品人妖| 日韩在线播放一区二区| 岛国一区二区在线观看| 91精品国产91久久久久久一区二区 | 91丨九色porny丨蝌蚪| 91精品国产91久久久久久一区二区 | 欧美私人免费视频| 国产精品沙发午睡系列990531| 亚洲h在线观看| 成人免费高清视频在线观看| 欧美一区二区三区啪啪| 亚洲色图色小说| 国产成人亚洲综合a∨猫咪| 欧美精品精品一区| 一区二区三区不卡视频在线观看 | 亚洲乱码国产乱码精品精的特点 | 国产一区二区调教| 91精品国产黑色紧身裤美女| 亚洲影院在线观看| 日韩欧美精品在线视频| 亚洲国产精品综合小说图片区| 成a人片亚洲日本久久| 久久久亚洲精品一区二区三区| 日韩电影免费在线| 欧美丝袜丝交足nylons图片| 亚洲欧美日韩国产成人精品影院| 成人午夜av影视| 欧美国产激情一区二区三区蜜月| 免费日本视频一区| 日韩一二三四区| 亚洲丶国产丶欧美一区二区三区| 91麻豆国产香蕉久久精品| 亚洲免费在线观看| 色婷婷亚洲综合| 日韩伦理电影网| 欧美优质美女网站| 日日摸夜夜添夜夜添国产精品 | 欧美亚洲丝袜传媒另类| 视频在线在亚洲| 精品欧美一区二区三区精品久久 | 欧美一区二区精品| 精品一区二区免费视频| xfplay精品久久| 成人黄色一级视频| 一区二区不卡在线播放| 欧美精品高清视频| 黑人精品欧美一区二区蜜桃| 欧美国产日韩在线观看| 在线免费一区三区| av一区二区三区四区| 午夜日韩在线电影| 国产三区在线成人av| 色综合欧美在线| 亚洲va中文字幕| 久久精品在线观看| 91黄色激情网站| 国产精品一区二区在线观看不卡| 国产精品三级av在线播放| 欧美一区日韩一区| www.成人网.com| 日韩国产精品久久久久久亚洲| 久久婷婷综合激情| 欧美日韩精品二区第二页| 成人免费毛片aaaaa**| 久久成人18免费观看| 亚洲综合在线第一页| 国产精品毛片高清在线完整版| 日韩一区二区三区高清免费看看| www.欧美色图| 国产精品中文字幕一区二区三区| 亚洲一本大道在线| 中文字幕欧美一| 欧美国产精品v| 欧美xxxxx牲另类人与| 在线观看一区二区视频| 91久久精品一区二区三| 成人一级视频在线观看| 国内一区二区在线| 久久国产欧美日韩精品| 亚洲成人免费电影| 亚洲女人****多毛耸耸8| 欧美国产激情二区三区| 中文字幕不卡的av| 欧美激情一区二区三区不卡| 久久女同性恋中文字幕| 欧美videos大乳护士334| 欧美裸体一区二区三区| 色婷婷激情综合| 欧美午夜宅男影院| 欧美日韩成人高清| 在线91免费看| 欧美一级日韩免费不卡|