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

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

?? input_v4l.c

?? 網絡攝像頭的webserver
?? C
字號:
#include <unistd.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <libxml/parser.h>#include <linux/videodev.h>#include <fcntl.h>#include <sys/ioctl.h>#include <sys/mman.h>#include "config.h"#define MODULE_INPUT#include "module.h"#include "xmlhelp.h"#include "grab.h"#include "unpalette.h"#include "image.h"#define MODNAME "input_v4l"/* $Id: input_v4l.c,v 1.3 2003/04/20 21:53:35 dfx Exp $ */char *name = MODNAME;char *version = VERSION;char *deps[] = { NULL };static int camdev_size_def(xmlNodePtr);static int camdev_size_set(int, int, int, char *);struct v4l_camdev{	int fd;	struct video_capability vidcap;	struct video_picture vidpic;	int usemmap;	unsigned char *mbufp;	int mbufframe;	unsigned char *imgbuf;	unsigned int bpf;	struct video_mbuf mbuf;	int autobrightness;};intopendev(xmlNodePtr node, struct grab_camdev *gcamdev){	struct v4l_camdev newcamdev;	int ret;	struct video_window vidwin;	char *path;	int x, y, fps;	int channel;	int norm;	struct video_channel vidchan;	int brightness, hue, colour, contrast, whiteness, autobrightness;	struct palette *pal;		memset(&newcamdev, 0, sizeof(newcamdev));		path = "/dev/video0";	x = y = fps = 0;	brightness = hue = colour = contrast = whiteness = channel = norm = autobrightness = -1;		if (node)	{		for (node = node->xml_children; node; node = node->next)		{			if (xml_isnode(node, "path"))				path = xml_getcontent_def(node, path);			else if (xml_isnode(node, "width"))				x = camdev_size_def(node);			else if (xml_isnode(node, "height"))				y = camdev_size_def(node);			else if (xml_isnode(node, "fps"))				fps = xml_atoi(node, 0);			else if (xml_isnode(node, "channel"))				channel = xml_atoi(node, -1);			else if (xml_isnode(node, "brightness"))				brightness = xml_atoi(node, -1);			else if (xml_isnode(node, "colour"))				colour = xml_atoi(node, -1);			else if (xml_isnode(node, "hue"))				hue = xml_atoi(node, -1);			else if (xml_isnode(node, "contrast"))				contrast = xml_atoi(node, -1);			else if (xml_isnode(node, "whiteness"))				whiteness = xml_atoi(node, -1);			else if (xml_isnode(node, "autobrightness"))				autobrightness = xml_atoi(node, 0);			else if (xml_isnode(node, "norm"))			{				char *s = xml_getcontent_def(node, "");				if (!strcasecmp(s, "pal"))					norm = VIDEO_MODE_PAL;				else if (!strcasecmp(s, "ntsc"))					norm = VIDEO_MODE_NTSC;				else if (!strcasecmp(s, "secam"))					norm = VIDEO_MODE_SECAM;				else if (!strcasecmp(s, "auto"))					norm = VIDEO_MODE_AUTO;				else					printf("Invalid video norm \"%s\" specified, ignoring\n", s);			}		}	}		newcamdev.fd = open(path, O_RDONLY);	if (newcamdev.fd < 0)	{		printf("Unable to open %s (%s)\n", path, strerror(errno));		return -1;	}		ret = ioctl(newcamdev.fd, VIDIOCGCAP, &newcamdev.vidcap);	if (ret != 0)	{		printf("ioctl \"get video cap\" failed: %s\n", strerror(errno));closenerr:		close(newcamdev.fd);		return -1;	}	if (!(newcamdev.vidcap.type & VID_TYPE_CAPTURE))	{		printf("Video device doesn't support grabbing to memory\n");		goto closenerr;	}		if (channel >= 0)	{		memset(&vidchan, 0, sizeof(vidchan));		vidchan.channel = channel;		if (norm >= 0)			vidchan.norm = norm;		ret = ioctl(newcamdev.fd, VIDIOCSCHAN, &vidchan);		if (ret)			printf("ioctl \"set input channel\" failed, continuing anyway: %s\n", strerror(errno));	}		memset(&vidwin, 0, sizeof(vidwin));		newcamdev.autobrightness = autobrightness;	x = camdev_size_set(x, newcamdev.vidcap.minwidth, newcamdev.vidcap.maxwidth, "width");	y = camdev_size_set(y, newcamdev.vidcap.minheight, newcamdev.vidcap.maxheight, "height");	if (x <= 0 || y <= 0)		goto closenerr;	vidwin.width = x;	vidwin.height = y;	vidwin.flags |= (fps & 0x3f) << 16;	ret = ioctl(newcamdev.fd, VIDIOCSWIN, &vidwin);	if (ret != 0)	{		printf("ioctl \"set grab window\" failed: %s\n", strerror(errno));		printf("Trying again without the fps option...\n");				vidwin.flags &= ~(0x3f << 16);		ret = ioctl(newcamdev.fd, VIDIOCSWIN, &vidwin);				if (!ret) {			printf("ioctl \"set grab window\" succeeded without fps option.\n");			printf("This probably means that your driver doesn't support setting");			printf("the fps, and you should remove the <fps> tag from your");			printf("config file.\n");		}		else {			printf("ioctl \"set grab window\" failed again: %s\n", strerror(errno));			printf("Check your <camdev> config section for width/height and fps settings.\n");			printf("In case your driver simply doesn't support overlaying (e.g. meye),\n");			printf("we will continue anyway and hope that everything goes ok.\n");		}	}	else {		ret = ioctl(newcamdev.fd, VIDIOCGWIN, &vidwin);		if (!ret)			ioctl(newcamdev.fd, VIDIOCSWIN, &vidwin);	}		ret = ioctl(newcamdev.fd, VIDIOCGPICT, &newcamdev.vidpic);	if (ret != 0)	{		printf("ioctl \"get pict props\" failed: %s\n", strerror(errno));		goto closenerr;	}	for (pal = palettes; pal->val >= 0; pal++)	{		newcamdev.vidpic.palette = pal->val;		newcamdev.vidpic.depth = pal->depth;		if (brightness >= 0)			newcamdev.vidpic.brightness = brightness;		if (hue >= 0)			newcamdev.vidpic.hue = hue;		if (colour >= 0)			newcamdev.vidpic.colour = colour;		if (contrast >= 0)			newcamdev.vidpic.contrast = contrast;		if (whiteness >= 0)			newcamdev.vidpic.whiteness = whiteness;		ioctl(newcamdev.fd, VIDIOCSPICT, &newcamdev.vidpic);		ioctl(newcamdev.fd, VIDIOCGPICT, &newcamdev.vidpic);		if (newcamdev.vidpic.palette == pal->val)			goto palfound;	/* break */	}	printf("No common supported palette found\n");	goto closenerr;	palfound:	newcamdev.usemmap = -1;	newcamdev.mbufp = NULL;	newcamdev.mbufframe = 0;	newcamdev.bpf = (vidwin.width * vidwin.height) * pal->bpp;	newcamdev.imgbuf = malloc(newcamdev.bpf);	gcamdev->name = strdup(path);	gcamdev->pal = pal;	gcamdev->x = vidwin.width;	gcamdev->y = vidwin.height;	gcamdev->custom = malloc(sizeof(newcamdev));	memcpy(gcamdev->custom, &newcamdev, sizeof(newcamdev));		return 0;}unsigned char *input(struct grab_camdev *gcamdev){	int ret;	struct v4l_camdev *camdev;	struct video_mmap mmapctx;	unsigned char *retbuf;	camdev = gcamdev->custom;		if (camdev->usemmap)	{		if (camdev->usemmap < 0)		{			do				ret = ioctl(camdev->fd, VIDIOCGMBUF, &camdev->mbuf);			while (ret < 0 && errno == EINTR);			if (ret < 0)			{nommap:				printf("Not using mmap interface, falling back to read() (%s)\n", gcamdev->name);				camdev->usemmap = 0;				goto sysread;			}			camdev->mbufp = mmap(NULL, camdev->mbuf.size, PROT_READ, MAP_PRIVATE, camdev->fd, 0);			if (camdev->mbufp == MAP_FAILED)				goto nommap;			camdev->usemmap = 1;			camdev->mbufframe = 0;		}		memset(&mmapctx, 0, sizeof(mmapctx));		mmapctx.frame = camdev->mbufframe;		mmapctx.width = gcamdev->x;		mmapctx.height = gcamdev->y;		mmapctx.format = gcamdev->pal->val;		do			ret = ioctl(camdev->fd, VIDIOCMCAPTURE, &mmapctx);		while (ret < 0 && errno == EINTR);		if (ret < 0)		{unmap:			munmap(camdev->mbufp, camdev->mbuf.size);			goto nommap;		}		ret = camdev->mbufframe;		do			ret = ioctl(camdev->fd, VIDIOCSYNC, &ret);		while (ret < 0 && errno == EINTR);		if (ret < 0)			goto unmap;				retbuf = camdev->mbufp + camdev->mbuf.offsets[camdev->mbufframe];					camdev->mbufframe++;		if (camdev->mbufframe >= camdev->mbuf.frames)			camdev->mbufframe = 0;				return retbuf;	}sysread:	do		ret = read(camdev->fd, camdev->imgbuf, camdev->bpf);	while (ret < 0 && errno == EINTR);	if (ret < 0)	{		printf("Error while reading from device '%s': %s\n", gcamdev->name, strerror(errno));		return NULL;	}	if (ret == 0)	{		printf("EOF while reading from device '%s'\n", gcamdev->name);		return NULL;	}	if (ret < camdev->bpf)		printf("Short read while reading from device '%s' (%i < %i), continuing anyway\n",		gcamdev->name, ret, camdev->bpf);		return camdev->imgbuf;}staticintcamdev_size_def(xmlNodePtr node){	char *s;		s = xml_getcontent_def(node, "max");	if (!strcmp(s, "max") || !strcmp(s, "maximum") || !strcmp(s, "default"))		return 0;	else if (!strcmp(s, "min") || !strcmp(s, "minimum"))		return -1;	else		return xml_atoi(node, 0);}staticintcamdev_size_set(int val, int min, int max, char *s){	if (val == 0)		return max;	if (val == -1)		return min;	if (val < min)	{		printf("Invalid grabbing %s according to driver (%i < %i)\n", s, val, min);		return 0;	}	if (val > max)	{		printf("Invalid grabbing %s according to driver (%i > %i)\n", s, val, max);		return 0;	}	return val;}voidpostprocess(struct grab_camdev *gcamdev, struct image *img){	float brightness, change;	struct v4l_camdev *camdev;	camdev = gcamdev->custom;	if (camdev->autobrightness <= 0)		return;	brightness = image_brightness(img);	/*printf("Current Image Brightness = %2.1f\n", brightness);*/	if (!(brightness < camdev->autobrightness -1 || brightness > camdev->autobrightness +1))		return;	if (ioctl(camdev->fd, VIDIOCGPICT, &camdev->vidpic) == -1) {		perror ("ioctl (VIDIOCGPICT)");		return;	}	change = camdev->autobrightness - brightness;	if (camdev->vidpic.brightness < 50) camdev->vidpic.brightness = 50;	change = camdev->vidpic.brightness * (change/100) * 3;	/*printf("Calculated change = %i\n", (int)change);*/	if (camdev->vidpic.brightness + change < 50) {		/*printf("Setting to MIN (50)\n");*/		camdev->vidpic.brightness = 50;	} 	else if (camdev->vidpic.brightness + change > 65535) {		/*printf("Setting to MAX (65535)\n");*/		camdev->vidpic.brightness = 65535;	} 	else {		camdev->vidpic.brightness += (int)change; 		/*printf("Setting camera brightness to %i\n", camdev->vidpic.brightness);*/	}	if (ioctl(camdev->fd, VIDIOCSPICT, &camdev->vidpic) == -1) {		perror ("ioctl (VIDIOCSPICT)");	}}voidcapdump(xmlNodePtr node, struct grab_camdev *gcamdev){	char *path;	int fd, ret;	struct video_capability vidcap;	struct video_picture vidpic;	struct palette *pal;	path = "/dev/video0";	if (node)	{		for (node = node->xml_children; node; node = node->next)		{			if (xml_isnode(node, "path"))				path = xml_getcontent_def(node, path);		}	}	fd = open(path, O_RDONLY);	if (fd < 0)	{		printf("Unable to open %s (%s)\n", path, strerror(errno));		return;	}	ret = ioctl(fd, VIDIOCGCAP, &vidcap);	if (ret < 0)	{		printf("ioctl(VIDIOCGCAP) (get video capabilites) failed: %s\n", strerror(errno));		goto closenout;	}		printf("Capability info for %s:\n", path);	printf("  Name: %s\n", vidcap.name);	printf("    Can %scapture to memory\n", (vidcap.type & VID_TYPE_CAPTURE) ? "" : "not ");	printf("    %s a tuner\n", (vidcap.type & VID_TYPE_TUNER) ? "Has" : "Doesn't have");	printf("    Can%s receive teletext\n", (vidcap.type & VID_TYPE_TELETEXT) ? "" : "not");	printf("    Overlay is %schromakeyed\n", (vidcap.type & VID_TYPE_CHROMAKEY) ? "" : "not ");	printf("    Overlay clipping is %ssupported\n", (vidcap.type & VID_TYPE_CLIPPING) ? "" : "not ");	printf("    Overlay %s frame buffer mem\n", (vidcap.type & VID_TYPE_FRAMERAM) ? "overwrites" : "doesn't overwrite");	printf("    Hardware image scaling %ssupported\n", (vidcap.type & VID_TYPE_SCALES) ? "" : "not ");	printf("    Captures in %s\n", (vidcap.type & VID_TYPE_MONOCHROME) ? "grayscale only" : "color");	printf("    Can capture %s image\n", (vidcap.type & VID_TYPE_SUBCAPTURE) ? "only part of the" : "the complete");	printf("  Number of channels: %i\n", vidcap.channels);	printf("  Number of audio devices: %i\n", vidcap.audios);	printf("  Grabbing frame size:\n");	printf("    Min: %ix%i\n", vidcap.minwidth, vidcap.minheight);	printf("    Max: %ix%i\n", vidcap.maxwidth, vidcap.maxheight);		ret = ioctl(fd, VIDIOCGPICT, &vidpic);	if (ret != 0)	{		printf("ioctl(VIDIOCGPICT) (get picture properties) failed: %s\n", strerror(errno));		goto closenout;	}		printf("\n");	printf("Palette information:\n");	for (pal = palettes; pal->val >= 0; pal++)	{		if (pal->val == vidpic.palette)		{			printf("  Currenctly active palette: %s with depth %u\n", pal->name, vidpic.depth);			goto palfound;		}	}	printf("  Currenctly active palette: not found/supported? (value %u, depth %u)\n", vidpic.palette, vidpic.depth);	palfound:	printf("  Probing for supported palettes:\n");	for (pal = palettes; pal->val >= 0; pal++)	{		vidpic.palette = pal->val;		vidpic.depth = pal->depth;		ioctl(fd, VIDIOCSPICT, &vidpic);		ioctl(fd, VIDIOCGPICT, &vidpic);		if (vidpic.palette == pal->val)			printf("    Palette \"%s\" supported: Yes, with depth %u\n", pal->name, vidpic.depth);		else			printf("    Palette \"%s\" supported: No\n", pal->name);	}	closenout:	close(fd);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美中文字幕制服| 五月婷婷欧美视频| 欧美激情一区不卡| 久久久久高清精品| 久久久久国产精品麻豆ai换脸 | 欧美激情在线看| 色综合夜色一区| 1000精品久久久久久久久| 精品国产乱码久久久久久影片| 91福利在线免费观看| 日本久久电影网| 欧美日韩国产天堂| 777色狠狠一区二区三区| 91超碰这里只有精品国产| 日韩一级片网址| 国产免费成人在线视频| 中文字幕一区在线| 亚洲国产乱码最新视频| 日韩专区欧美专区| 色屁屁一区二区| 欧美亚洲动漫制服丝袜| 欧美老女人第四色| 亚洲精品一线二线三线无人区| 国产欧美一区二区精品久导航| 中文字幕色av一区二区三区| 亚洲一区在线播放| 久久99久久久久久久久久久| 国产成人av电影| 在线影院国内精品| 欧美第一区第二区| 亚洲国产精华液网站w| 亚洲一区二区三区影院| 激情久久久久久久久久久久久久久久| 国产一区二区三区精品视频 | 日韩一区二区视频在线观看| 亚洲精品在线观看视频| 亚洲品质自拍视频| 蜜桃一区二区三区四区| 成人免费精品视频| 欧美久久久影院| 久久久美女毛片| 一个色综合av| 国产精品一区二区三区网站| 色婷婷综合久色| 精品欧美乱码久久久久久1区2区| 国产精品传媒入口麻豆| 日韩国产欧美一区二区三区| 成人免费毛片高清视频| 欧美日韩1区2区| 中文字幕第一区综合| 午夜久久久久久久久| 国模大尺度一区二区三区| 色综合天天综合狠狠| 欧美大胆人体bbbb| 亚洲欧美激情插| 精品一区二区三区在线播放视频| 色综合久久久久久久久| 精品人伦一区二区色婷婷| 亚洲精品午夜久久久| 国产精品一区二区果冻传媒| 欧美二区三区的天堂| 最近中文字幕一区二区三区| 另类小说色综合网站| 91视频国产资源| 国产婷婷色一区二区三区在线| 午夜激情一区二区三区| 91视频com| 国产精品欧美久久久久无广告| 麻豆国产欧美日韩综合精品二区 | 欧美精品一区二区久久婷婷| 久久国产精品露脸对白| 欧美撒尿777hd撒尿| 国产精品美女久久久久久久久久久| 免费不卡在线观看| 欧美三级电影精品| 一区二区三区精品| 成人av在线电影| 久久久精品免费免费| 美女一区二区视频| 91.xcao| 亚洲精品久久7777| 99久久99久久综合| 国产欧美日韩视频一区二区| 精品亚洲免费视频| 欧美在线观看一区| 一区二区在线观看免费| 91视频免费播放| 国产精品久久久久久久久图文区| 国产精品主播直播| 久久综合丝袜日本网| 狂野欧美性猛交blacked| 制服丝袜日韩国产| 日韩电影在线观看一区| 欧美精品色一区二区三区| 亚洲图片有声小说| 欧美三级中文字| 亚洲成人中文在线| 欧美剧情电影在线观看完整版免费励志电影| 亚洲精品国产成人久久av盗摄| 99久久99久久精品免费观看| 国产精品私人自拍| 成人激情免费网站| 亚洲美女屁股眼交| 在线亚洲高清视频| 亚洲va天堂va国产va久| 欧美久久久久久久久中文字幕| 亚洲成人免费视| 6080日韩午夜伦伦午夜伦| 蜜桃av一区二区在线观看| 日韩区在线观看| 国产乱码精品一区二区三| 国产丝袜美腿一区二区三区| 成人激情小说乱人伦| 亚洲日本一区二区| 欧美丝袜自拍制服另类| 爽好久久久欧美精品| 欧美xingq一区二区| 国产成人午夜精品影院观看视频| 中文字幕欧美国产| 色94色欧美sute亚洲线路一ni| 亚洲风情在线资源站| 欧美喷水一区二区| 九色综合狠狠综合久久| 国产亚洲自拍一区| 色哟哟一区二区| 污片在线观看一区二区 | 国产综合久久久久久鬼色 | 4hu四虎永久在线影院成人| 亚洲第一成人在线| 欧美成人一区二区三区在线观看| 国产福利一区二区三区在线视频| 亚洲欧洲精品一区二区三区不卡 | 国产精品全国免费观看高清| 色综合天天综合在线视频| 午夜激情久久久| 久久久精品国产免费观看同学| av不卡一区二区三区| 天天影视色香欲综合网老头| 精品国产人成亚洲区| av综合在线播放| 日本不卡免费在线视频| 国产人久久人人人人爽| 欧美日韩久久久一区| 国产精品一区在线观看乱码| 一区二区三区精品在线| 久久综合色天天久久综合图片| 91免费观看在线| 美女诱惑一区二区| 亚洲女性喷水在线观看一区| 日韩免费视频一区| 日本韩国视频一区二区| 精品在线播放午夜| 一区二区三区在线视频免费 | 日本午夜精品一区二区三区电影| 日韩av一级电影| 91色在线porny| 欧美大度的电影原声| 欧美三级电影一区| 中文字幕一区二区三区视频| 国产乱子轮精品视频| 亚洲女性喷水在线观看一区| 日韩精品一区二区三区在线| 91麻豆国产自产在线观看| 麻豆国产精品视频| 伊人一区二区三区| 日本一区二区不卡视频| 日韩欧美电影一区| 91成人免费在线视频| 盗摄精品av一区二区三区| 日本不卡一二三区黄网| 亚洲曰韩产成在线| 国产精品你懂的在线欣赏| 精品国产乱码久久久久久闺蜜| 色婷婷精品大在线视频| 国产91清纯白嫩初高中在线观看| 秋霞电影一区二区| 一区二区三区日韩| 国产精品久久久久久久久图文区| 精品国产污网站| 91精品国产品国语在线不卡 | 久久久久国产精品麻豆ai换脸 | 这里是久久伊人| 欧美精品v国产精品v日韩精品| 亚洲精品大片www| 日本一区二区三区久久久久久久久不 | 久久久久亚洲蜜桃| 欧美一级日韩一级| 欧美蜜桃一区二区三区| 色婷婷国产精品| 不卡一区在线观看| 国产98色在线|日韩| 狠狠色丁香久久婷婷综| 美女国产一区二区| 喷水一区二区三区| 亚洲在线成人精品| 亚洲欧美日韩系列| 日韩一区在线免费观看| 国产精品国产三级国产专播品爱网| 国产午夜精品理论片a级大结局 | 免费xxxx性欧美18vr|