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

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

?? dc1394_vloopback.c

?? 較新版本的libdc1394
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/****************************************************************************       Title: Turn a Digital Camera into a V4L device using vloopback**    $RCSfile: dc1394_vloopback.c,v $**   $Revision: 1.11 $$Name:  $**       $Date: 2004/08/10 07:57:22 $**   Copyright: LGPL $Author: ddouxchamps $** Description:****    Sends format0 640x480 RGB to the vloopback input device so that it**    can be consumed by V4L applications on the vloopback output device.**    Get vloopback 0.90 from http://motion.technolust.cx/vloopback/**    Apply the patch from effectv http://effectv.sf.net/**    It has been tested with EffecTV (exciting!), GnomeMeeting, ffmpeg,**    camsource, Kino, and veejay.**** TODO:**    - Support video controls**    - do cropping on v4l window offset**    - supply audio from sound card?****-------------------------------------------------------------------------****  $Log: dc1394_vloopback.c,v $**  Revision 1.11  2004/08/10 07:57:22  ddouxchamps**  Removed extra buffering (Johann Schoonees)****  Revision 1.10  2004/03/09 08:41:44  ddouxchamps**  patch from Johann Schoonees for extra buffering****  Revision 1.9  2004/01/20 04:15:34  ddennedy**  workaround some potential V4L compilation error****  Revision 1.8  2004/01/20 04:12:27  ddennedy**  added dc1394_free_camera_nodes and applied to examples****  Revision 1.7  2004/01/14 22:20:43  ddennedy**  enhanced dc1394_vloopback****  Revision 1.6  2004/01/04 21:27:56  ddennedy**  simplify video1394 includes and other minor corrections****  Revision 1.5  2003/09/23 13:44:12  ddennedy**  fix camera location by guid for all ports, add camera guid option to vloopback, add root detection and reset to vloopback****  Revision 1.4  2003/09/15 17:21:27  ddennedy**  add features to examples****  Revision 1.1  2002/10/27 04:21:54  ddennedy**  added v4l utility using vloopback******************************************************************************/#define _GNU_SOURCE#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <sys/time.h>#include <sys/mman.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/poll.h>#include <unistd.h>#include <signal.h>#define _LINUX_TIME_H#define _DEVICE_H_#include <linux/videodev.h>#include <getopt.h>#include <libraw1394/raw1394.h>#include <libdc1394/dc1394_control.h>#include "affine.h"#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))/* uncomment the following to drop frames to prevent delays */#define DROP_FRAMES 1#define MAX_PORTS 4#define DC1394_BUFFERS 8#define DC1394_WIDTH 640#define DC1394_HEIGHT 480#define MAX_WIDTH 1024#define MAX_HEIGHT 768#define MIN_WIDTH 160#define MIN_HEIGHT 120#define MAX_BPP 3#define V4L_BUFFERS 2#define MAX_RESETS 5/* declarations for libdc1394 */raw1394handle_t handle = NULL;dc1394_cameracapture camera;nodeid_t *camera_nodes;dc1394_feature_set features;/* Video4Linux globals */int v4l_dev = -1;unsigned char *out_pipe = NULL, *out_mmap = NULL;#define MAXIOCTL 1024char ioctlbuf[MAXIOCTL];/* cmdline options */int g_daemon = 0;enum v4l_modes {	V4L_MODE_NONE,	V4L_MODE_PIPE,	V4L_MODE_MMAP};enum v4l_modes g_v4l_mode = V4L_MODE_MMAP;char *dc_dev_name = NULL;char *v4l_dev_name = NULL;int g_v4l_fmt = VIDEO_PALETTE_YUV422;int g_width = DC1394_WIDTH;int g_height = DC1394_HEIGHT;u_int64_t g_guid = 0;static struct option long_options[]={	{"daemon",0,NULL,0},	{"pipe",0,NULL,0},	{"guid",1,NULL,0},	{"video1394",1,NULL,0},	{"vloopback",1,NULL,0},	{"palette",1,NULL,0},	{"width",1,NULL,0},	{"height",1,NULL,0},	{"help",0,NULL,0},	{NULL,0,0,0}	};void get_options(int argc,char *argv[]){	int option_index=0;		while(getopt_long(argc,argv,"",long_options,&option_index)>=0){			switch(option_index){ 				/* case values must match long_options */				case 0:					g_daemon = 1;					break;				case 1:					g_v4l_mode = V4L_MODE_PIPE;					break;				case 2:					sscanf(optarg, "%llx", &g_guid);					break;				case 3:					dc_dev_name=strdup(optarg);					break;				case 4:					v4l_dev_name=strdup(optarg);					break;				case 5:					if (strcasecmp(optarg, "rgb24") == 0)						g_v4l_fmt = VIDEO_PALETTE_RGB24;					else if (strcasecmp(optarg, "yuv422p") == 0)						g_v4l_fmt = VIDEO_PALETTE_YUV422P;					else if (strcasecmp(optarg, "yuv420p") == 0)						g_v4l_fmt = VIDEO_PALETTE_YUV420P;					break;				case 6:					g_width = atoi(optarg);					break;				case 7:					g_height = atoi(optarg);					break;				default:					printf( "\n"						"%s - send video from dc1394 through vloopback\n\n"						"Usage:\n"						"    %s [--daemon] [--pipe] [--guid=camera-euid]\n"						"       [--video1394=/dev/video1394/x] [--vloopback=/dev/video0]\n"						"       [--palette=format] [--width=n] [--height=n]\n\n"						"    --daemon    - run as a daemon, detached from console (optional)\n"						"    --pipe      - write images to vloopback device instead of using\n"						"                  zero-copy mmap mode (optional)\n"						"    --guid      - select camera to use (optional)\n"						"                  default is first camera on any port\n"						"    --video1394 - specifies video1394 device to use (optional)\n"						"                  default = /dev/video1394/<port#>\n"						"    --vloopback - specifies video4linux device to use (optional)\n"						"                  by default, this is automatically determined!\n"						"    --palette   - specified the video palette to use (optional)\n"						"                  yuv422 (default), yuv422p, yuv420p, or rgb24\n"						"    --width     - set the initial width (default=640)\n"						"    --height    - set the initial height (default=480)\n"						"    --help      - prints this message\n\n"						,argv[0],argv[0]);					exit(0);			}	}	}/***** IMAGE PROCESSING *******************************************************/typedef void (*affine_transform_cb)(const unsigned char *src, unsigned char *dest);void transform_yuv422(const unsigned char *src, unsigned char *dest){	swab(src, dest, 4);}void transform_rgb24(const unsigned char *src, unsigned char *dest){	dest[2] = src[0]; //b	dest[1] = src[1]; //g	dest[0] = src[2]; //r}void affine_scale( const unsigned char *src, int src_width, int src_height, unsigned char *dest, int dest_width, int dest_height,                   int bpp, affine_transform_cb transform ){		affine_transform_t affine;	double scale_x = (double) dest_width / (double) src_width;	double scale_y = (double) dest_height / (double) src_height;	register unsigned char *d = dest;    register const unsigned char  *s = src;	register int i, j, x, y;	/* optimization for no scaling required */	if (scale_x == 1.0 && scale_y == 1.0) {		for (i = 0; i < src_width*src_height; i++) {			transform(s, d);			s += bpp;			d += bpp;		}		return;	}		affine_transform_init( &affine );		if ( scale_x <= 1.0 && scale_y <= 1.0 )	{		affine_transform_scale( &affine, scale_x, scale_y );		for( j = 0; j < src_height; j++ )			for( i = 0; i < src_width; i++ )			{				x = (int) ( affine_transform_mapx( &affine, i - src_width/2, j - src_height/2 ) );				y = (int) ( affine_transform_mapy( &affine, i - src_width/2, j - src_height/2 ) );				x += dest_width/2;				x = CLAMP( x, 0, dest_width);				y += dest_height/2;				y = CLAMP( y, 0, dest_height);				s = src + (j*src_width*bpp) + i*bpp;				d = dest + y*dest_width*bpp + x*bpp;				transform(s, d);				d += bpp;				s += bpp;			}	}	else if ( scale_x >= 1.0 && scale_y >= 1.0 )	{		affine_transform_scale( &affine, 1.0/scale_x, 1.0/scale_y );			for( y = 0; y < dest_height; y++ )			for( x = 0; x < dest_width; x++ )			{				i = (int) ( affine_transform_mapx( &affine, x - dest_width/2, y - dest_height/2 ) );				j = (int) ( affine_transform_mapy( &affine, x - dest_width/2, y - dest_height/2 ) );				i += src_width/2;				i = CLAMP( i, 0, dest_width);				j += src_height/2;				j = CLAMP( j, 0, dest_height);				s = src + (j*src_width*bpp) + i*bpp;				d = dest + y*dest_width*bpp + x*bpp;				transform(s, d);				d += bpp;				s += bpp;			}	}}inline voidyuy2_to_yv16( const unsigned char *src, unsigned char *dest, int width, int height){	register int total = (width * height) >> 1;	register int i;	register unsigned char *img_y = dest;	register unsigned char *img_cb = img_y + (width * height);	register unsigned char *img_cr = img_cb + total;	for (i = 0; i < total; i++) {		*img_y++  = *src++;		*img_cb++ = *src++;		*img_y++  = *src++;		*img_cr++ = *src++;	}}inline voidyuy2_to_yv12( const unsigned char *src, unsigned char *dest, int width, int height){	register int stride = width >> 1;	register int i, j;	register unsigned char *img_y = dest;	register unsigned char *img_cb = img_y + (width * height);	register unsigned char *img_cr = img_cb + stride * (height >> 1);	for (i = 0; i < height; i++) {		for (j = 0; j < stride; j++) {			if (i%2) {				*img_y++  = *src++;				src++;				*img_y++  = *src++;				src++;			} else {				*img_y++  = *src++;				*img_cb++ = (src[width << 1] + src[0]) >> 1;				src++;				*img_y++  = *src++;				*img_cr++ = (src[width << 1] + src[0]) >> 1;				src++;			}		}	}}/***** IMAGE CAPTURE **********************************************************/int capture_pipe(int dev, const unsigned char *image_in){	int size = g_width * g_height;	int bpp = 0;	int ppp = 1; /* pixels per pixel! */	affine_transform_cb transform = NULL;	switch (g_v4l_fmt) {		case VIDEO_PALETTE_RGB24:			bpp = 3;			ppp = 1;			transform = transform_rgb24;			break;		case VIDEO_PALETTE_YUV422:		case VIDEO_PALETTE_YUV422P:		case VIDEO_PALETTE_YUV420P:			bpp = 2;			ppp = 2;			transform = transform_yuv422;			break;		default:			return 0;	}		affine_scale( image_in, DC1394_WIDTH/ppp, DC1394_HEIGHT,		out_pipe, g_width/ppp, g_height,		ppp * bpp, transform);			if (g_v4l_fmt == VIDEO_PALETTE_YUV422P && out_pipe != NULL) {		size_t memsize = (g_width * g_height) << 1;		unsigned char *buffer = malloc(memsize);		if (buffer) {			memcpy( buffer, out_pipe, memsize);			yuy2_to_yv16( buffer, out_pipe, g_width, g_height);			free(buffer);		}	}	else if (g_v4l_fmt == VIDEO_PALETTE_YUV420P && out_pipe != NULL) {		size_t memsize = (g_width * g_height) << 1;		unsigned char *buffer = malloc(memsize);		if (buffer) {			memcpy( buffer, out_pipe, memsize);			yuy2_to_yv12( buffer, out_pipe, g_width, g_height);			free(buffer);		}		size = g_width * g_height * 3 / 2;		bpp = 1;	}		if (write(dev, out_pipe, size*bpp) != (size*bpp)) {		perror("Error writing image to pipe");		return 0;	}	return 1;}int capture_mmap(int frame){	int bpp = 0;	int ppp = 1; /* pixels per pixel! */	affine_transform_cb transform = NULL;		switch (g_v4l_fmt) {		case VIDEO_PALETTE_RGB24:			bpp = 3;			ppp = 1;			transform = transform_rgb24;			break;		case VIDEO_PALETTE_YUV422:		case VIDEO_PALETTE_YUV422P:		case VIDEO_PALETTE_YUV420P:			bpp = 2;			ppp = 2;			transform = transform_yuv422;			break;		default:			return 0;	}		if (g_v4l_fmt == VIDEO_PALETTE_YUV422P && out_pipe != NULL) {		if (dc1394_dma_single_capture(&camera) == DC1394_SUCCESS) {			affine_scale( (unsigned char *) camera.capture_buffer, DC1394_WIDTH/ppp, DC1394_HEIGHT,				out_pipe, g_width/ppp, g_height,				ppp * bpp, transform);			dc1394_dma_done_with_buffer(&camera);		}		yuy2_to_yv16( out_pipe, out_mmap + (MAX_WIDTH * MAX_HEIGHT * 3 * frame), g_width, g_height);	}	else if (g_v4l_fmt == VIDEO_PALETTE_YUV420P && out_pipe != NULL) {		if (dc1394_dma_single_capture(&camera) == DC1394_SUCCESS) {			affine_scale( (unsigned char *) camera.capture_buffer, DC1394_WIDTH/ppp, DC1394_HEIGHT,				out_pipe, g_width/ppp, g_height,				ppp * bpp, transform);			dc1394_dma_done_with_buffer(&camera);		}		yuy2_to_yv12( out_pipe, out_mmap + (MAX_WIDTH * MAX_HEIGHT * 3 * frame), g_width, g_height);	}	else if (dc1394_dma_single_capture(&camera) == DC1394_SUCCESS) {		affine_scale( (unsigned char *) camera.capture_buffer, DC1394_WIDTH/ppp, DC1394_HEIGHT,			out_mmap + (MAX_WIDTH * MAX_HEIGHT * 3 * frame), g_width/ppp, g_height,			ppp * bpp, transform);		dc1394_dma_done_with_buffer(&camera);	}		return 1;}/***** DIGITAL CAMERA *********************************************************/int dc_init(){	struct raw1394_portinfo ports[MAX_PORTS];	int numPorts = MAX_PORTS;	int port, reset;	int camCount = 0;	int found = 0;	/* get the number of ports (cards) */	handle = raw1394_new_handle();    if (handle==NULL) {        perror("Unable to aquire a raw1394 handle\n");        perror("did you load the drivers?\n");        exit(-1);    }		numPorts = raw1394_get_port_info(handle, ports, numPorts);	raw1394_destroy_handle(handle);	handle = NULL;	for (reset = 0; reset < MAX_RESETS && !found; reset++) {		/* get dc1394 handle to each port */		for (port = 0; port < numPorts && !found; port++) {			if (handle != NULL)				dc1394_destroy_handle(handle);			handle = dc1394_create_handle(port);			if (handle==NULL) {				perror("Unable to aquire a raw1394 handle\n");				perror("did you load the drivers?\n");				exit(-1);			}				/* get the camera nodes and describe them as we find them */			camCount = 0;			camera_nodes = dc1394_get_camera_nodes(handle, &camCount, 0);						if (camCount > 0) {				if (g_guid == 0) {					dc1394_camerainfo info;					/* use the first camera found */					camera.node = camera_nodes[0];					if (dc1394_get_camera_info(handle, camera_nodes[0], &info) == DC1394_SUCCESS)						dc1394_print_camera_info(&info);					found = 1;				}				else {					/* attempt to locate camera by guid */					int cam;					for (cam = 0; cam < camCount && found == 0; cam++) {						dc1394_camerainfo info;						if (dc1394_get_camera_info(handle, camera_nodes[cam], &info) == DC1394_SUCCESS)	{							if (info.euid_64 == g_guid)	{								dc1394_print_camera_info(&info);								camera.node = camera_nodes[cam];								found = 1;							}						}					}				}				if (found == 1)	{					/* camera can not be root--highest order node */					if (camera.node == raw1394_get_nodecount(handle)-1)	{						/* reset and retry if root */						raw1394_reset_bus(handle);						sleep(2);						found = 0;					}				}				dc1394_free_camera_nodes(camera_nodes);			} /* camCount > 0 */		} /* next port */	} /* next reset retry */	if (found) {		/*have the camera start sending us data*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777久久久精品| 成人综合激情网| 国产精品美女久久久久久久久| 97se亚洲国产综合在线| 国模冰冰炮一区二区| 亚洲一区二区成人在线观看| 日本一区二区三区久久久久久久久不 | 日韩久久久久久| 97se亚洲国产综合自在线| 韩国精品在线观看| 亚洲成人中文在线| 亚洲欧美日韩成人高清在线一区| 久久嫩草精品久久久精品一| 欧美一区二区三区人| 日本精品视频一区二区三区| 国产成人精品1024| 日本不卡中文字幕| 亚洲国产一区二区a毛片| 国产精品日产欧美久久久久| 精品国产成人在线影院 | 久久久久88色偷偷免费| 欧美精品在线观看播放| 欧美午夜影院一区| 色伊人久久综合中文字幕| 成人深夜在线观看| 成人午夜短视频| 国产一区 二区| 精品一区二区日韩| 亚洲福利一二三区| 亚洲国产日产av| 亚洲欧美成人一区二区三区| 中文字幕一区二区三区在线观看| 国产亚洲人成网站| 久久久www成人免费无遮挡大片 | 一区二区三区鲁丝不卡| 国产精品国产三级国产aⅴ原创| 国产欧美一区二区三区网站| 国产亚洲欧美在线| 国产亚洲精品中文字幕| 精品国产乱码久久久久久图片 | 中文字幕在线观看不卡视频| 国产精品第五页| 亚洲三级免费电影| 一区二区三区**美女毛片| 亚洲免费高清视频在线| 亚洲黄色免费电影| 亚洲观看高清完整版在线观看| 亚洲r级在线视频| 午夜一区二区三区视频| 日韩专区一卡二卡| 免费国产亚洲视频| 国产又黄又大久久| www.成人网.com| 色综合久久88色综合天天6| 日本高清无吗v一区| 精品视频一区 二区 三区| 欧美精品 日韩| 久久综合久久久久88| 国产精品日日摸夜夜摸av| 亚洲精品videosex极品| 首页国产丝袜综合| 国产麻豆精品视频| 92国产精品观看| 91精品国产综合久久精品app| 欧美成人激情免费网| 日本一二三不卡| 一卡二卡欧美日韩| 蜜桃av一区二区三区电影| 国产精品一区专区| 色88888久久久久久影院按摩| 欧美群妇大交群中文字幕| 精品福利在线导航| 亚洲欧美激情插| 日本一不卡视频| 成人激情图片网| 7777女厕盗摄久久久| 久久久久久久av麻豆果冻| 亚洲综合偷拍欧美一区色| 裸体歌舞表演一区二区| 99综合电影在线视频| 欧美老年两性高潮| 国产精品视频一二| 日本欧洲一区二区| 色妹子一区二区| 91精品国产91久久综合桃花| 国产精品午夜在线| 日本成人中文字幕| 91香蕉国产在线观看软件| 91精品国产综合久久精品麻豆| 国产欧美日韩不卡| 日本成人在线电影网| 91丨porny丨中文| 欧美精品一区二区三区很污很色的| 亚洲人成网站精品片在线观看| 久久99精品一区二区三区| 欧洲一区在线电影| 欧美激情中文不卡| 久久se精品一区二区| 欧美体内she精视频| 国产精品久久午夜| 麻豆成人av在线| 欧美午夜精品免费| 国产精品伦理一区二区| 狠狠色狠狠色综合| 制服丝袜中文字幕一区| 亚洲丝袜精品丝袜在线| 国产精品一区二区果冻传媒| 3atv在线一区二区三区| 亚洲国产精品久久人人爱蜜臀| 久久久久久黄色| 婷婷亚洲久悠悠色悠在线播放| 成人精品小蝌蚪| 久久综合九色欧美综合狠狠| 午夜私人影院久久久久| 欧美最新大片在线看| 亚洲欧洲国产日韩| 国产91清纯白嫩初高中在线观看 | 美女网站一区二区| 精品视频1区2区| 亚洲精品你懂的| 94-欧美-setu| 亚洲视频狠狠干| jlzzjlzz欧美大全| 国产精品亲子伦对白| 国产精品中文字幕日韩精品| 日韩欧美黄色影院| 麻豆免费精品视频| 欧美一卡在线观看| 免费在线观看成人| 日韩女优制服丝袜电影| 懂色av一区二区三区免费观看| 精品蜜桃在线看| 看电视剧不卡顿的网站| 色天使久久综合网天天| 青草国产精品久久久久久| 欧美亚洲国产一区二区三区| 亚洲人快播电影网| 91浏览器入口在线观看| 亚洲精品你懂的| 欧美日韩视频一区二区| 亚洲大片在线观看| 3d成人动漫网站| 久久国产婷婷国产香蕉| 久久亚洲综合av| 国产91露脸合集magnet| 国产精品毛片久久久久久久| 99麻豆久久久国产精品免费优播| 亚洲欧洲综合另类| 欧美三级视频在线观看| 日韩在线一区二区三区| 精品理论电影在线观看| 丁香天五香天堂综合| 亚洲三级小视频| 欧美精品在欧美一区二区少妇| 老司机精品视频线观看86| 久久久久久久久久美女| 99这里只有精品| 天天爽夜夜爽夜夜爽精品视频| 日韩一级大片在线观看| 国产成人在线电影| 一区二区免费看| 日韩一区二区三区四区| 高清不卡在线观看| 亚洲精品中文在线影院| 韩国三级电影一区二区| 在线视频一区二区三| 午夜伦理一区二区| 欧美高清视频在线高清观看mv色露露十八 | 日韩欧美国产麻豆| 国产不卡在线播放| 一区二区三区欧美亚洲| 精品免费日韩av| 一本色道久久综合狠狠躁的推荐| 国产91露脸合集magnet| 亚洲视频在线观看一区| 欧美精品三级在线观看| 国产精品影视在线| 亚洲一区二区高清| 久久精品综合网| 欧美日韩国产天堂| 成人动漫视频在线| 亚洲va韩国va欧美va精品| 国产欧美一区二区精品性色超碰| 欧美在线一二三| 成人小视频在线| 日韩高清一级片| 中文字幕一区免费在线观看| 欧美一级高清片| 日本韩国精品在线| 国产91清纯白嫩初高中在线观看 | 91精品国产综合久久小美女| 奇米影视一区二区三区| 国产精品三级久久久久三级| 欧美高清视频www夜色资源网| 东方aⅴ免费观看久久av| 日韩国产在线观看| 亚洲精品免费在线| 国产拍欧美日韩视频二区| 欧美一区二区成人6969| 欧美系列日韩一区|