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

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

?? track.c

?? video motion detection of linux base
?? C
字號:
/*	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"//#include "conf.h"//#include "track.h"//#include "alg.h"#include "pwc-ioctl.h"struct 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 int stepper_center(struct context *cnt, int xoff, int yoff ATTRIBUTE_UNUSED);static int stepper_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs);static int iomojo_center(struct context *cnt, int xoff, int yoff);static int iomojo_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs);static int lqos_center(struct context *cnt, int dev, int xoff, int yoff);static int lqos_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs, int manual);/* Add a call to your functions here: */int track_center(struct context *cnt, int dev, int manual, int xoff, int yoff){	if (!manual && !cnt->track.active)		return 0;	if (cnt->track.type == TRACK_TYPE_STEPPER){		int ret;		ret = stepper_center(cnt, xoff, yoff);		if (ret < 1) {				motion_log(LOG_ERR, 1, "track_center: internal error (stepper_center)");				return 0;				}		else return ret;		}	else if (cnt->track.type == TRACK_TYPE_PWC)		return lqos_center(cnt, dev, xoff, yoff);	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, %d is not a known track-type", cnt->track.type);	return 0;}/* Add a call to your functions here: */int track_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs, int manual){	if (!manual && !cnt->track.active)		return 0;	if (cnt->track.type == TRACK_TYPE_STEPPER)		return stepper_move(cnt, dev, cent, imgs);	else if (cnt->track.type == TRACK_TYPE_PWC)		return lqos_move(cnt, dev, cent, imgs, manual);	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, %d is not a known track-type", cnt->track.type);	return 0;}/******************************************************************************	Stepper motor on serial port******************************************************************************/static int stepper_command(struct context *cnt, int motor, int command, int n){	char buffer[3];	time_t timeout=time(NULL);	buffer[0]=motor;	buffer[1]=command;	buffer[2]=n;	if (write(cnt->track.dev, buffer, 3)!=3)		return -1;	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 int stepper_status(struct context *cnt, int motor){	return stepper_command(cnt, motor, STEPPER_COMMAND_STATUS, 0);}static int stepper_center(struct context *cnt, int x_offset, int y_offset){	struct termios adtio;	if (cnt->track.dev<0) {		motion_log(LOG_INFO, 1, "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 -1;		}		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 -1;		}		motion_log(LOG_INFO, 1, "Opened serial device %s and initialize", cnt->track.port);	}	/* 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 int stepper_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs){	int command = 0;	int n = 0;	if (dev < 0){		motion_log(LOG_INFO, 1, "No device started yet , try stepper_center()");			if (stepper_center(cnt, 0, 0) < 0){			motion_log(LOG_ERR, 1, "Stepper_center() failed to initialize stepper device.");				return(0);		}		motion_log(LOG_INFO, 1, "stepper_center() succeed , device started");		}		/* x-axis */		if (cent->x < imgs->width / 2) {		command = STEPPER_COMMAND_LEFT_N;		n = imgs->width / 2 - cent->x;	}	if (cent->x > imgs->width / 2) {		command = STEPPER_COMMAND_RIGHT_N;		n = cent->x - imgs->width / 2;	}	n = n * cnt->track.stepsize / imgs->width;	if (n) 	stepper_command(cnt, cnt->track.motorx, command, n);	/* y-axis */	if (cent->y < imgs->height / 2) {		command = STEPPER_COMMAND_UP_N;		n = imgs->height / 2 - cent->y;	}	if (cent->y > imgs->height / 2) {		command = STEPPER_COMMAND_DOWN_N;		n = cent->y - imgs->height / 2;	}		n = n * cnt->track.stepsize / imgs->height;	if (n) stepper_command(cnt, cnt->track.motory, command, n);				return cnt->track.move_wait;}/******************************************************************************	Iomojo Smilecam on serial port******************************************************************************/static char iomojo_command(struct context *cnt, char *command, int len, 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;		}	}	return buffer[0];}static void iomojo_setspeed(struct context *cnt, 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 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);	}	return cnt->track.move_wait;}static 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) < 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******************************************************************************/static int lqos_center(struct context *cnt, int dev, int x_angle, int y_angle){	int reset = 3;	struct pwc_mpt_angles pma;	struct pwc_mpt_range pmr;	if (cnt->track.dev==-1) {		if (ioctl(dev, VIDIOCPWCMPTRESET, &reset) == -1) {			motion_log(LOG_ERR, 1, "Failed to reset camera to starting position! Reason");			return 0;		}		SLEEP(6,0)		if (ioctl(dev, VIDIOCPWCMPTGRANGE, &pmr) == -1) {			motion_log(LOG_ERR, 1, "failed VIDIOCPWCMPTGRANGE");			return 0;		}		cnt->track.dev = dev;		cnt->track.minmaxfound = 1;		cnt->track.panmin = pmr.pan_min;		cnt->track.panmax = pmr.pan_max;		cnt->track.tiltmin = pmr.tilt_min;		cnt->track.tiltmax = pmr.tilt_max;	}	if (ioctl(dev, VIDIOCPWCMPTGANGLE, &pma) == -1)		motion_log(LOG_ERR, 1, "ioctl VIDIOCPWCMPTGANGLE");		pma.absolute = 1;	if (x_angle * 100 < cnt->track.panmax && x_angle * 100 > cnt->track.panmin)		pma.pan = x_angle * 100;	if (y_angle * 100 < cnt->track.tiltmax && y_angle * 100 > cnt->track.tiltmin)		pma.tilt = y_angle * 100;	if (ioctl(dev, VIDIOCPWCMPTSANGLE, &pma) == -1) {		motion_log(LOG_ERR, 1, "Failed to pan/tilt camera! Reason");		return 0;	}	return cnt->track.move_wait;}static int lqos_move(struct context *cnt, int dev, struct coord *cent, struct images *imgs, int manual){	int delta_x = cent->x - (imgs->width / 2);	int delta_y = cent->y - (imgs->height / 2);	int move_x_degrees, move_y_degrees;	struct pwc_mpt_angles pma;	struct pwc_mpt_range pmr;	/* If we are on auto track we calculate delta, otherwise we use user input in degrees times 100 */	if (!manual) {		if (delta_x > imgs->width * 3/8 && delta_x < imgs->width * 5/8)			return 0;		if (delta_y > imgs->height * 3/8 && delta_y < imgs->height * 5/8)			return 0;		move_x_degrees = delta_x * cnt->track.step_angle_x * 100 / (imgs->width / 2);		move_y_degrees = -delta_y * cnt->track.step_angle_y * 100 / (imgs->height / 2);	} else {		move_x_degrees = cent->x * 100;		move_y_degrees = cent->y * 100;	}		/* If we never checked for the min/max values for pan/tilt we do it now */	if (cnt->track.minmaxfound == 0) {		if (ioctl(dev, VIDIOCPWCMPTGRANGE, &pmr) == -1) {			motion_log(LOG_ERR, 1, "failed VIDIOCPWCMPTGRANGE");			return 0;		}		cnt->track.minmaxfound = 1;		cnt->track.panmin = pmr.pan_min;		cnt->track.panmax = pmr.pan_max;		cnt->track.tiltmin = pmr.tilt_min;		cnt->track.tiltmax = pmr.tilt_max;	}	/* Get current camera position */	if (ioctl(dev, VIDIOCPWCMPTGANGLE, &pma) == -1)		motion_log(LOG_ERR, 1, "ioctl VIDIOCPWCMPTGANGLE");	/* Check current position of camera and see if we need to adjust	   values down to what is left to move */	if (move_x_degrees<0 && (cnt->track.panmin - pma.pan) > move_x_degrees)		move_x_degrees = (cnt->track.panmin - pma.pan);	if (move_x_degrees>0 && (cnt->track.panmax - pma.pan) < move_x_degrees)		move_x_degrees = (cnt->track.panmax - pma.pan);	if (move_y_degrees<0 && (cnt->track.tiltmin - pma.tilt) > move_y_degrees)		move_y_degrees = (cnt->track.tiltmin - pma.tilt);	if (move_y_degrees>0 && (cnt->track.tiltmax - pma.tilt) < move_y_degrees)		move_y_degrees = (cnt->track.tiltmax - pma.tilt);			/* Move camera relative to current position */	pma.absolute = 0;	pma.pan = move_x_degrees;	pma.tilt = move_y_degrees;	if (ioctl(dev, VIDIOCPWCMPTSANGLE, &pma) == -1) {		motion_log(LOG_ERR, 1, "Failed to pan/tilt camera! Reason");		return 0;	}	return cnt->track.move_wait;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区成人6969| 国产尤物一区二区| 91日韩在线专区| 亚洲天堂福利av| 91老师国产黑色丝袜在线| 自拍av一区二区三区| 色8久久人人97超碰香蕉987| 亚洲另类在线一区| 欧美撒尿777hd撒尿| 日精品一区二区三区| 精品久久久久一区| 成人毛片视频在线观看| 亚洲乱码日产精品bd| 欧美日韩成人激情| 国产一区二区三区电影在线观看| 国产日本一区二区| 日本高清不卡aⅴ免费网站| 天天爽夜夜爽夜夜爽精品视频| 欧美一区二区黄| 国产成人午夜电影网| 亚洲乱码精品一二三四区日韩在线| 欧美日韩一区二区三区在线| 麻豆精品视频在线| 中文字幕亚洲欧美在线不卡| 欧美色视频一区| 国产精品一二三四| 亚洲精品视频一区二区| 欧美一级片在线看| 成人免费毛片高清视频| 午夜天堂影视香蕉久久| 国产欧美一区二区精品仙草咪| 欧美中文字幕一区二区三区亚洲| 久久激情综合网| 亚洲日本在线观看| 精品精品欲导航| 日本乱人伦aⅴ精品| 激情小说欧美图片| 一区二区三区加勒比av| 久久久久久久精| 欧美人与性动xxxx| 99re66热这里只有精品3直播 | 美女在线观看视频一区二区| 国产欧美日韩三级| 777xxx欧美| 欧美伊人久久大香线蕉综合69| 国产精品一二三四区| 日本aⅴ亚洲精品中文乱码| 国产精品久久久久精k8| 精品噜噜噜噜久久久久久久久试看| 91亚洲永久精品| 国产老肥熟一区二区三区| 香蕉成人伊视频在线观看| 亚洲欧洲日产国码二区| 久久精品男人天堂av| 欧美一区二区三区四区久久| 在线观看av一区二区| www.激情成人| 国产寡妇亲子伦一区二区| 蜜桃一区二区三区四区| 亚洲妇熟xx妇色黄| 亚洲精品一二三四区| 国产精品久久精品日日| 国产欧美一区在线| 久久亚洲免费视频| 日韩精品一区二区三区四区 | 久久综合五月天婷婷伊人| 在线综合视频播放| 在线不卡一区二区| 51精品国自产在线| 91精品国产综合久久小美女| 欧美日韩精品电影| 欧美年轻男男videosbes| 欧美吻胸吃奶大尺度电影| 在线观看一区二区视频| 色婷婷久久久亚洲一区二区三区| 成人av在线一区二区三区| 国产91精品露脸国语对白| 国产成人在线电影| 国产成人亚洲综合a∨婷婷图片 | 亚洲精品欧美综合四区| 亚洲免费在线观看视频| 亚洲精品日韩综合观看成人91| 日韩一区在线看| 亚洲免费av在线| 一区二区三区欧美亚洲| 亚洲国产一区二区在线播放| 亚洲综合免费观看高清完整版 | 国产精品99久久久久久有的能看| 国产精品白丝jk黑袜喷水| 成人爱爱电影网址| 91精彩视频在线观看| 欧美年轻男男videosbes| 日韩亚洲欧美在线| 国产日韩精品视频一区| 亚洲丝袜美腿综合| 午夜在线电影亚洲一区| 蓝色福利精品导航| 成人性生交大片免费看中文网站| kk眼镜猥琐国模调教系列一区二区 | 天天色天天操综合| 久久精品国产亚洲高清剧情介绍| 国产成人av在线影院| 91伊人久久大香线蕉| 欧美精品一区二区三| 久久精品亚洲乱码伦伦中文 | 国产福利一区二区三区视频在线| 不卡av在线免费观看| 欧美男男青年gay1069videost | 免费久久99精品国产| 国产精品一区二区三区网站| 成人动漫在线一区| 欧美精品久久一区二区三区| 久久人人97超碰com| 亚洲精品日日夜夜| 精品一区二区三区久久| 99久久精品免费看国产| 日韩欧美一区二区三区在线| 国产精品女同互慰在线看 | 免费精品视频最新在线| 成人午夜在线播放| 欧美一二三四区在线| 亚洲日本免费电影| 久久国产精品99久久久久久老狼| 99在线精品视频| 精品成人私密视频| 亚洲一区二区三区在线| 国产成人亚洲综合a∨猫咪| 欧美另类videos死尸| 国产精品免费视频观看| 青青草国产成人av片免费| 成a人片国产精品| 精品国产污网站| 婷婷综合在线观看| 色伊人久久综合中文字幕| 久久久影院官网| 日本不卡视频在线| 欧美三级在线播放| 亚洲精品成a人| 成人性生交大片| 欧美tk—视频vk| 日韩中文字幕一区二区三区| 成人免费视频视频在线观看免费| 日韩精品一区二区三区swag| 亚洲一区二区在线观看视频| 99精品视频一区二区| 久久精品网站免费观看| 老司机午夜精品| 欧美另类z0zxhd电影| 亚洲国产三级在线| 色婷婷激情综合| 中文字幕中文字幕一区| 国产成人精品综合在线观看| 欧美大片在线观看| 蜜桃av一区二区在线观看| 欧美日韩精品一区二区三区四区 | 欧美亚洲免费在线一区| 亚洲人成在线播放网站岛国| 成人永久看片免费视频天堂| 久久众筹精品私拍模特| 狠狠色狠狠色综合系列| xfplay精品久久| 黑人精品欧美一区二区蜜桃 | 欧美日韩国产小视频| 一区二区在线观看视频| kk眼镜猥琐国模调教系列一区二区| 国产三区在线成人av| 国产精品一线二线三线精华| 欧美xxxxxxxx| 国产呦精品一区二区三区网站| 日韩欧美电影在线| 国产一区二区久久| 亚洲国产精品t66y| 91片黄在线观看| 亚洲男人的天堂一区二区| 欧美亚洲国产一区二区三区va| 亚洲午夜电影网| 精品日韩欧美一区二区| 国产美女精品一区二区三区| 国产视频一区二区三区在线观看| 成人av在线一区二区三区| 亚洲人一二三区| 欧美日韩高清影院| 久久草av在线| 欧美激情综合五月色丁香小说| 成人国产在线观看| 精品国产乱码久久久久久1区2区 | 欧美性高清videossexo| 日本亚洲天堂网| 久久久久久夜精品精品免费| 成人午夜私人影院| 亚洲一区视频在线| 精品久久一区二区三区| av亚洲精华国产精华精| 亚洲风情在线资源站| 日韩欧美久久久| 成人aa视频在线观看| 婷婷激情综合网| 国产亚洲综合在线| 91福利在线导航| 国产剧情av麻豆香蕉精品|