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

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

?? vidcat.c

?? 我覺得是不錯的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * vidcat.c * * Copyright (C) 1998 - 2001 Rasca, Berlin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <getopt.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/mman.h>#include <sys/time.h>	/* gettimeofday() */#include <fcntl.h>#include <unistd.h>#include <linux/types.h>#include <linux/videodev.h>#ifdef HAVE_LIBZ#include <zlib.h>#endif#ifdef HAVE_LIBPNG#include <png.h>#endif#ifdef HAVE_LIBJPEG#include <jpeglib.h>#endif#include "v4l.h"#define DEF_WIDTH	320	/* default width */#define DEF_HEIGHT	240	/* default height */#define FMT_UNKNOWN		0#define FMT_PPM			1#define FMT_PGM			2#define FMT_PNG			3#define FMT_JPEG		4#define FMT_YUV4MPEG	5#define IN_TV			0#define IN_COMPOSITE	1#define IN_COMPOSITE2	2#define IN_SVIDEO		3#define NORM_PAL		0#define NORM_NTSC		1#define NORM_SECAM		2#define QUAL_DEFAULT	80char *basename (const char *s);/* globals */static int verbose = 0;/* */voidusage (char *pname){	fprintf (stderr,	"VidCat, Version %s\n"	"Usage: %s <options>\n"	" -b                          make a raw PPM instead of an ASCII one\n"	" -d <device>                 video device (default: "VIDEO_DEV")\n"	" -f {ppm|jpeg|png|yuv4mpeg}  output format of the image\n"	" -g                          greayscale instead of color\n"	" -i {tv|comp1|comp2|s-video} which input channel to use\n"	" -l                          loop on, doesn't make sense in most cases\n"	" -n {pal|ntsc|secam}         select video norm\n"	" -o <file>                   write output to file instead of stdout\n"	" -p c|g|y|Y                  videopalette to use\n"	" -q <quality>                only for jpeg: quality setting (1-100,"		" default: %d)\n"	" -s NxN                      define size of the output image (default:"		" %dx%d)\n"	"Example: vidcat | xsetbg stdin\n",		VERSION, (char*)basename(pname), QUAL_DEFAULT, DEF_WIDTH, DEF_HEIGHT);	exit (1);}/* */doublems_time (void){	static struct timeval tod;	gettimeofday (&tod, NULL);	return ((double)tod.tv_sec * 1000.0 + (double)tod.tv_usec / 1000.0);	}/* * read rgb image from v4l device 從v4l設(shè)備獲取rgb圖像 * return: mmap'ed buffer and size */char *get_image (int dev, int width, int height, int palette ,int *size){	struct video_mbuf vid_buf;	struct video_mmap vid_mmap;	char *map, *convmap; //map指向抓到的圖片所存空間	int len; 	int bytes = 3;  //比特每像素	if (palette == VIDEO_PALETTE_GREY) //若為灰度圖象		bytes = 1;	/* bytes per pixel */	if (ioctl (dev, VIDIOCGMBUF, &vid_buf) == -1) {		/* to do a normal read()		 */		struct video_window vid_win;		if (verbose) {			fprintf (stderr, "using read()\n");		}		if (ioctl (dev, VIDIOCGWIN, &vid_win) != -1) {			vid_win.width  = width;			vid_win.height = height;			if (ioctl (dev, VIDIOCSWIN, &vid_win) == -1) {				perror ("ioctl(VIDIOCSWIN)");  //ioctl函數(shù)功能??				return (NULL);			}		}		map = malloc (width * height * bytes); //分配空間		len = read (dev, map, width * height * bytes); //從v41設(shè)備讀取圖像信息到map所指向的空間		if (len <=  0) {			free (map);			return (NULL);		}		*size = 0;		if (palette == VIDEO_PALETTE_YUV420P) {			convmap = malloc ( width * height * bytes );			v4l_yuv420p2rgb (convmap, map, width, height, bytes * 8);//顏色空間的轉(zhuǎn)換 			memcpy (map, convmap, (size_t) width * height * bytes); //將convmap指向的圖像的值復(fù)制 
			                                                      //到map指向的一段連續(xù)的空間			free (convmap);		} else if (palette == VIDEO_PALETTE_YUV422P) {			convmap = malloc ( width * height * bytes );			v4l_yuv422p2rgb (convmap, map, width, height, bytes * 8);			memcpy (map, convmap, (size_t) width * height * bytes);			free (convmap);		}		return (map);  //返回map,map指向抓到的圖像信息所存放的位置	}
	map = mmap (0, vid_buf.size, PROT_READ|PROT_WRITE,MAP_SHARED,dev,0); //??	if ((unsigned char *)-1 == (unsigned char *)map) {		perror ("mmap()");		return (NULL);	}	vid_mmap.format = palette;	vid_mmap.frame = 0;	vid_mmap.width = width;	vid_mmap.height = height;	if (ioctl (dev, VIDIOCMCAPTURE, &vid_mmap) == -1) {		perror ("VIDIOCMCAPTURE");		fprintf (stderr, "args: width=%d height=%d palette=%d\n",					vid_mmap.width, vid_mmap.height, vid_mmap.format);		munmap (map, vid_buf.size);		return (NULL);	}	if (ioctl (dev, VIDIOCSYNC, &vid_mmap.frame) == -1) {		perror ("VIDIOCSYNC");		munmap (map, vid_buf.size);		return (NULL);	}	*size = vid_buf.size;		if (palette == VIDEO_PALETTE_YUV420P) {		if (verbose)			fprintf (stderr, "converting from YUV to RGB\n");		convmap = malloc ( width * height * bytes );		v4l_yuv420p2rgb (convmap, map, width, height, bytes * 8);		memcpy (map, convmap, (size_t) width * height * bytes);		free (convmap);	} else if (palette == VIDEO_PALETTE_YUV422P) {		if (verbose)			fprintf (stderr, "converting from YUV to RGB\n");		convmap = malloc ( width * height * bytes );		v4l_yuv422p2rgb (convmap, map, width, height, bytes * 8);		memcpy (map, convmap, (size_t) width * height * bytes);		free (convmap);	}		return (map);	if (verbose)		fprintf (stderr, "got picture\n");}/*將get_image函數(shù)抓到的圖片壓縮成不同的格式 */voidput_image_jpeg (FILE *out, char *image, int width, int height, int quality, int palette){#ifdef HAVE_LIBJPEG	int y, x, line_width;	JSAMPROW row_ptr[1];	struct jpeg_compress_struct cjpeg;	struct jpeg_error_mgr jerr;	char *line;	line = malloc (width * 3);	if (!line)		return;	if (verbose)		fprintf (stderr, "writing JPEG data\n");	cjpeg.err = jpeg_std_error(&jerr);	jpeg_create_compress (&cjpeg); //創(chuàng)建jpge壓縮結(jié)構(gòu)體	cjpeg.image_width = width;	cjpeg.image_height= height;	if (palette == VIDEO_PALETTE_GREY) {		cjpeg.input_components = 1;  //若為灰度圖象,每像素一個bit		cjpeg.in_color_space = JCS_GRAYSCALE;	//	jpeg_set_colorspace (&cjpeg, JCS_GRAYSCALE);	} else {		cjpeg.input_components = 3;  //若不是灰度圖象,每像素3個bit		cjpeg.in_color_space = JCS_RGB; //rgb的顏色空間	}	jpeg_set_defaults (&cjpeg);	jpeg_set_quality (&cjpeg, quality, TRUE);	cjpeg.dct_method = JDCT_FASTEST;	jpeg_stdio_dest (&cjpeg, out);	jpeg_start_compress (&cjpeg, TRUE);	row_ptr[0] = line;	if (palette == VIDEO_PALETTE_GREY) {		line_width = width;		for ( y = 0; y < height; y++) {			row_ptr[0] = image;			jpeg_write_scanlines (&cjpeg, row_ptr, 1);			image += line_width;		}	} else {		line_width = width * 3;		for ( y = 0; y < height; y++) {			for (x = 0; x < line_width; x+=3) {				line[x]   = image[x+2];				line[x+1] = image[x+1];				line[x+2] = image[x];			}			jpeg_write_scanlines (&cjpeg, row_ptr, 1);			image += line_width;		}	}	jpeg_finish_compress (&cjpeg);	jpeg_destroy_compress (&cjpeg);	free (line);#endif}/* * write png image to stdout */voidput_image_png (FILE *out, char *image, int width, int height, int palette){#ifdef HAVE_LIBPNG	int y, bpp;	char *p;	png_infop info_ptr;	png_structp png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING,						NULL, NULL, NULL);	if (!png_ptr)		return;	info_ptr = png_create_info_struct (png_ptr);	if (!info_ptr)		return;	png_init_io (png_ptr, out);	if (palette == VIDEO_PALETTE_GREY) {		png_set_IHDR (png_ptr, info_ptr, width, height,					8, PNG_COLOR_TYPE_GRAY, PNG_INTERLACE_NONE,					PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);		bpp = 1;	} else {		png_set_IHDR (png_ptr, info_ptr, width, height,					8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,					PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);		bpp = 3;	}	png_set_bgr (png_ptr);	png_write_info (png_ptr, info_ptr);	p = image;	for (y = 0; y < height; y++) {		png_write_row (png_ptr, p);		p += width * bpp;	}	png_write_end (png_ptr, info_ptr);#endif}/* * write ppm image to stdout / file */voidput_image_ppm (FILE *out, char *image, int width, int height, int binary){	int x, y, ls=0;	unsigned char *p = (unsigned char *)image;	if (!binary) {		fprintf (out, "P3\n%d %d\n%d\n", width, height, 255);		for (x = 0; x < width; x++) {			for (y = 0; y < height; y++) {				fprintf (out, "%03d %03d %03d  ", p[2], p[1], p[0]);				p += 3;				if (ls++ > 4) {					fprintf (out, "\n");					ls = 0;				}			}		}		fprintf (out, "\n");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
3atv一区二区三区| eeuss影院一区二区三区| 欧美日韩在线播放三区| 亚洲不卡在线观看| 337p亚洲精品色噜噜噜| 精品一区二区av| 久久亚洲一区二区三区四区| 国产一区 二区 三区一级| 国产亚洲短视频| av亚洲精华国产精华精| 亚洲综合久久av| 日韩欧美国产三级电影视频| 国产精品一区二区在线看| 国产精品狼人久久影院观看方式| 91美女蜜桃在线| 午夜国产精品一区| 久久久99精品免费观看| 91丨九色porny丨蝌蚪| 亚洲va欧美va人人爽| 亚洲精品一区二区三区蜜桃下载 | 欧美日韩一区二区三区免费看| 亚洲成a人v欧美综合天堂下载| 精品欧美一区二区在线观看| 成人精品免费网站| 同产精品九九九| 国产精品色哟哟网站| 欧美日韩国产免费一区二区| 国产精品影音先锋| 亚洲国产裸拍裸体视频在线观看乱了| 日韩欧美国产精品一区| 色妞www精品视频| 老司机精品视频一区二区三区| 国产欧美精品国产国产专区 | 奇米888四色在线精品| 国产日韩精品久久久| 欧美日韩在线综合| 国产不卡视频一区二区三区| 日韩一区精品视频| 亚洲日穴在线视频| 久久婷婷国产综合国色天香| 亚洲乱码国产乱码精品精的特点 | 精品入口麻豆88视频| 国产成人一级电影| 午夜精品在线看| 亚洲视频在线观看一区| 欧美一级午夜免费电影| 91久久精品午夜一区二区| 国产精品一区二区x88av| 亚洲国产成人av网| 中文字幕日韩精品一区| 26uuu国产在线精品一区二区| 欧美日韩视频不卡| 91在线精品秘密一区二区| 国产成人8x视频一区二区 | 亚洲黄色小视频| 国产拍欧美日韩视频二区| 日韩精品资源二区在线| 精品视频资源站| 色天天综合色天天久久| 99久久国产综合精品麻豆 | 91免费观看在线| 成人午夜视频福利| 国产精品77777| 国产成人一级电影| 国产一级精品在线| 国产在线精品一区二区| 奇米一区二区三区| 日韩黄色小视频| 午夜欧美在线一二页| 亚洲激情综合网| 伊人开心综合网| 亚洲免费在线视频| 亚洲激情六月丁香| 亚洲一区二区三区在线看| 亚洲欧洲国产日本综合| 亚洲人一二三区| 亚洲欧美一区二区三区久本道91| 国产精品国产三级国产aⅴ中文 | 久久99久久久欧美国产| 奇米一区二区三区av| 免费看欧美女人艹b| 久热成人在线视频| 国产一区二区三区综合| 国产成人亚洲综合a∨婷婷 | 色婷婷综合久久久| 欧洲日韩一区二区三区| 欧美揉bbbbb揉bbbbb| 在线播放欧美女士性生活| 欧美一区二区三区人| 日韩欧美中文字幕一区| 精品国产亚洲在线| 国产女人aaa级久久久级| 中文字幕在线免费不卡| 亚洲免费在线看| 日韩精品一级中文字幕精品视频免费观看 | 亚洲精品亚洲人成人网| 亚洲一区二区在线免费看| 石原莉奈在线亚洲三区| 精品一区二区免费| 春色校园综合激情亚洲| 欧美主播一区二区三区| 91精品久久久久久久久99蜜臂| 精品欧美一区二区久久| 中文字幕在线观看不卡| 日日噜噜夜夜狠狠视频欧美人| 激情欧美一区二区| 色综合天天综合狠狠| 欧美精品日韩一本| 久久久国产午夜精品| 亚洲男人的天堂av| 精品一二线国产| 色婷婷一区二区| 日韩小视频在线观看专区| 中文字幕欧美日韩一区| 午夜免费欧美电影| 国产成人精品免费在线| 欧美日韩国产另类一区| 欧美激情综合五月色丁香小说| 亚洲高清在线视频| 成人久久久精品乱码一区二区三区| 欧美色成人综合| 国产精品久久网站| 日韩av一区二区在线影视| 99精品热视频| 欧美岛国在线观看| 亚洲综合区在线| 福利视频网站一区二区三区| 4438成人网| 一区二区三区在线观看网站| 国产一区福利在线| 欧美日韩国产123区| 国产精品无人区| 裸体健美xxxx欧美裸体表演| 在线观看一区二区视频| 青草国产精品久久久久久| 成人国产精品免费观看动漫| 日韩一区二区三区在线| 一区二区在线电影| 成人一区在线观看| 精品福利一二区| 日韩电影在线免费看| 在线观看不卡视频| 日韩理论片网站| 国产91富婆露脸刺激对白| 欧美一区二区三区在线电影 | 欧美一区二视频| 亚洲国产精品久久一线不卡| 高清视频一区二区| 久久精品视频网| 男女激情视频一区| 91麻豆精品国产91久久久久久 | 国产精品一二三| 精品99999| 毛片一区二区三区| 91精品国产欧美日韩| 亚洲午夜影视影院在线观看| 色综合久久久久久久久久久| 1024成人网| 99久久精品免费看国产| 中文字幕一区二区三区不卡在线 | 精品国产99国产精品| 欧美a一区二区| 欧美一区二区日韩| 免费在线观看不卡| 欧美一区二区三区四区久久| 日韩成人dvd| 欧美电视剧免费观看| 精品一区二区三区在线观看| 精品毛片乱码1区2区3区| 激情伊人五月天久久综合| 2欧美一区二区三区在线观看视频| 久久成人精品无人区| 26uuu另类欧美亚洲曰本| 国产精品亚洲成人| 欧美国产欧美综合| 99精品在线免费| 一区二区三区四区av| 欧美日韩国产综合视频在线观看 | 在线观看免费成人| 丝袜国产日韩另类美女| 日韩欧美一区中文| 国产呦萝稀缺另类资源| 国产精品污www在线观看| 色综合一区二区三区| 亚洲国产精品影院| 日韩色视频在线观看| 国产一区二区三区在线观看精品| 日本一区二区成人| 色偷偷久久人人79超碰人人澡| 午夜精品久久久| 久久综合色8888| 97精品国产97久久久久久久久久久久 | 2022国产精品视频| 成人av电影在线网| 午夜久久久久久久久久一区二区| 欧美电视剧在线观看完整版| 成人毛片在线观看| 视频一区视频二区中文字幕| 国产欧美日产一区| 国产精品久久久久一区|