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

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

?? mvc.c

?? mvc源碼
?? C
字號:
/* * vidcat.c * * Copyright (C) 1998 Rasca, Berlin * EMail: thron@gmx.de * Modified: merlin@turbolinux.com.cn Jun.16, Jul.7, 2000 * * 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 <fcntl.h>#include <unistd.h>#include <linux/types.h>#include <linux/videodev.h>#include <time.h>#include <jpeglib.h>#include "mvc.h"/* * read rgb image from v4l device * return: mmap'ed buffer and size */char *get_image (int dev, int width, int height, int input, int norm, int fmt,	   int *size){  struct video_capability vid_caps;  struct video_mbuf vid_buf;  struct video_mmap vid_mmap;  struct video_channel vid_chnl;  char *map;  int len;  if (ioctl (dev, VIDIOCGCAP, &vid_caps) == -1)   {    perror ("ioctl (VIDIOCGCAP)");    return (NULL);  }  vid_chnl.channel = -1;  if (ioctl (dev, VIDIOCGCHAN, &vid_chnl) == -1)   {    perror ("ioctl (VIDIOCGCHAN)");  }  else   {	printf("get channel failed\n");    vid_chnl.channel = input;    vid_chnl.norm = norm;    if (ioctl (dev, VIDIOCSCHAN, &vid_chnl) == -1) 	{      perror ("ioctl (VIDIOCSCHAN)");      return (NULL);    }	else	  printf("get channel failed. but set channel success\n\n");  }  if (ioctl (dev, VIDIOCGMBUF, &vid_buf) == -1)   {    map = malloc (width * height * 3);    len = read (dev, map, width * height * 3);    if (len <= 0) 	{      free (map);      return (NULL);    }    *size = 0;    return (map);  }  //void  *  mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);  //int munmap(void *start, size_t length);  //mmap returns a pointer  to  the  mapped  area ,or MAP_FAILED  (-1)  is returned  map = mmap (0, vid_buf.size, PROT_READ | PROT_WRITE, MAP_SHARED, dev, 0);  if ((unsigned char *) -1 == (unsigned char *) map)  //???? what's the meaning?  {    perror ("mmap()");    return (NULL);  }  vid_mmap.format = fmt;  vid_mmap.frame = 0;  vid_mmap.width = width;  vid_mmap.height = height;  if (ioctl (dev, VIDIOCMCAPTURE, &vid_mmap) == -1)   {    perror ("VIDIOCMCAPTURE");    munmap (map, vid_buf.size);    return (NULL);  }  if (ioctl (dev, VIDIOCSYNC, &vid_mmap) == -1)   {    perror ("VIDIOCSYNC");    munmap (map, vid_buf.size);    return (NULL);  }  *size = vid_buf.size;  return (map);}/* * Write image buffer to timestamp named jpeg file. */voidput_image_jpeg (char *filename, char *image, int width, int height,		int quality){  int y, x, line_width;  JSAMPROW row_ptr[1];  struct jpeg_compress_struct cjpeg;  struct jpeg_error_mgr jerr;  char *line;  FILE *fd;  if ((fd = fopen (filename, "w+")) == NULL) {    fprintf (stderr, "Error: Can't Create File %s\n", filename);    exit (-2);  }  line = malloc (width * 3);  if (!line)    return;  cjpeg.err = jpeg_std_error (&jerr);  jpeg_create_compress (&cjpeg);  cjpeg.image_width = width;  cjpeg.image_height = height;  cjpeg.input_components = 3;  cjpeg.in_color_space = JCS_RGB;  jpeg_set_defaults (&cjpeg);  jpeg_set_quality (&cjpeg, quality, TRUE);  cjpeg.dct_method = JDCT_FASTEST;  jpeg_stdio_dest (&cjpeg, fd);  jpeg_start_compress (&cjpeg, TRUE);  row_ptr[0] = line;  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);  fclose (fd);}/* * main() */intmain (int argc, char *argv[]){  int width = DEF_WIDTH, height = DEF_HEIGHT, size, dev = -1, c, n = 0;  char *image, *oldimg, *device = VIDEO_DEV;  char lasttime[32], timename[32], filename[64];  time_t now;  struct tm *tm;  int max_try = 5;		/* we try 5 seconds/times to open the device */  int quality = QUAL_DEFAULT;	/* default jpeg quality setting */  int input = IN_DEFAULT;  int norm = NORM_DEFAULT;  int palette = VIDEO_PALETTE_RGB24;  int blk_x = 16;  int blk_y = 8;  int color_lim = 50;  int blk_lim = blk_x * blk_y / 64 + 1;  oldimg = malloc (width * height * 3);  while ((c = getopt (argc, argv, "s:q:a:b:c:n:i:d")) != EOF) {    switch (c) {    case 'd':      device = optarg;      break;    case 's':      sscanf (optarg, "%dx%d", &width, &height);      break;    case 'a':      sscanf (optarg, "%dx%d", &blk_x, &blk_y);      blk_lim = blk_x * blk_y / 64 + 1;      break;    case 'b':      sscanf (optarg, "%d", &blk_lim);      break;    case 'c':      sscanf (optarg, "%d", &color_lim);      break;    case 'n':      if (strcasecmp ("ntsc", optarg) == 0) {	norm = NORM_NTSC;      }      else if (strcasecmp ("pal", optarg) == 0) {	norm = NORM_PAL;      }      else if (strcasecmp ("secam", optarg) == 0) {	norm = NORM_SECAM;      }      break;    case 'q':      sscanf (optarg, "%d", &quality);      break;    case 'i':      if (strcasecmp ("tv", optarg) == 0) {	input = IN_TV;      }      else if (strcasecmp ("comp1", optarg) == 0) {	input = IN_COMPOSITE;      }      else if (strcasecmp ("comp2", optarg) == 0) {	input = IN_COMPOSITE2;      }      else if (strcasecmp ("s-video", optarg) == 0) {	input = IN_SVIDEO;      }      break;    default:      fprintf (stderr,	       "%s, Version %s\n"	       "Usage: %s <options>\n"	       " -s XxY define size of the output image (default: %dx%d)\n"	       " -a HxV define sense areas in Horizantal and Vertical (default: %dx%d)\n"	       " -i {tv|comp1|comp2|s-video} which input channel to use\n"	       " -n {pal|ntsc|secam}         which norm to use, default: PAL\n"	       " -q <quality>                only for jpeg: quality setting (1-100, default: %d)\n"	       " -d <device>                 video device (default: " VIDEO_DEV ")\n"	       " -b <diff_block_limit>       blocks different limit, default: %d\n"	       " -c <diff_color_limit>       color  different limit, default: %d\n",	       argv[0], VERSION, argv[0], DEF_WIDTH, DEF_HEIGHT, blk_x, blk_y,	       QUAL_DEFAULT, blk_lim, color_lim);      exit (1);      break;    }  }#ifdef DEBUG  fprintf (stderr, "-------------------- Debug Info ---------------------\n");  fprintf (stderr, " ImageSize:    %dx%d\n", width, height);  fprintf (stderr, " ImageQuality: %d\n", quality);  fprintf (stderr, " VideoDEV:     %s\n", device);  fprintf (stderr, " VideoInput(TV=0, COMP1=1, COMP2=2, SVIDEO=3): %d\n",	   input);  fprintf (stderr, " VideoNORM(PAL=0, NTSC=1, SECAM=2, AUTO=3): %d\n", norm);  fprintf (stderr, " SenseBlockSize: %dx%d\n", blk_x, blk_y);  fprintf (stderr, " ColorLimit:   %d\n", color_lim);  fprintf (stderr, " BlockLimit:   %d\n", blk_lim);  fprintf (stderr, "-----------------------------------------------------\n");#endifloop:  /* open the video4linux device */  max_try = 5;  while ((dev = open (device, O_RDWR)) == -1 && --max_try)    sleep (1);  if (dev == -1) {    fprintf (stderr, "Can't open device %s\n", VIDEO_DEV);    exit (-1);  }  else  {	  printf("device opening success!");  }  image = get_image (dev, width, height, input, norm, palette, &size);  if (image) {    if (cmp_img(image, oldimg, width, height, blk_x, blk_y, color_lim,	blk_lim) == 1) {      time (&now);      tm = localtime (&now);      strftime (timename, 31, "%Y%m%d-%H%M%S", tm);      if (strcmp (timename, lasttime) == 0)	n++;      else	n = 0;      strcpy (lasttime, timename);      sprintf (filename, "mvc%s-%d.jpg", timename, n);#ifdef DEBUG      printf ("Writing: %s \a\n", filename);#endif      put_image_jpeg (filename, image, width, height, quality);    }    memcpy (oldimg, image, width * height * 3);    if (size)      munmap (image, size);    else if (image)      free (image);  }  else {    fprintf (stderr, "Error: Can't get image\n");  }  close (dev);  usleep (500000);  goto loop;}/* * Compare image img1 and img2 by split blocks,  * if changed, return 1. */intcmp_img (char *img1, char *img2, int width, int height, int split_x,	 int split_y, int c_lim, int b_lim){  int i, count;  RGB a1[8192], a2[8192];  int color_diff[8192];  proc_img (a1, img1, width, height, split_x, split_y);  proc_img (a2, img2, width, height, split_x, split_y);  count = 0;  for (i = 0; i < split_x * split_y; i++) {    color_diff[i] = abs (a1[i].red - a2[i].red) +       abs (a1[i].green - a2[i].green) +      abs (a1[i].blue - a2[i].blue);    if (color_diff[i] > c_lim) {      count++;    }    if (count >= b_lim) {      return 1;    }  }  return 0;}/* * Split image buffer *img (width=w, height=h) into sx * sy blocks.  * For every splited block, calculate its average RGB color, then  * store this RGB color into array r. */intproc_img (RGB * r, char *img, int w, int h, int sx, int sy){  unsigned char *p;  int x, y, m, n;  int blk_wid = w / sx, blk_hgt = h / sy;  int x0, y0, x1, y1;  unsigned long s = blk_wid * blk_hgt;  unsigned long R, G, B;  for (n = 1; n <= sy; n++) {    for (m = 1; m <= sx; m++) {      x0 = (m - 1) * blk_wid;      y0 = (n - 1) * blk_hgt;      x1 = blk_wid * m - 1;      y1 = blk_hgt * n - 1;      R = G = B = 0;      for (y = y0; y <= y1; y++) {	for (x = x0; x <= x1; x++) {	  p = img + (y * w + x) * 3;	  R += *(p + 2);	  G += *(p + 1);	  B += *p;	}      }      r->red = R / s;      r->green = G / s;      r->blue = B / s;      r++;    }  }  return s;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本护士毛茸茸| 国产精品视频一二三区 | 国产精品日韩成人| 亚洲综合在线五月| 国产电影精品久久禁18| 欧美日韩视频在线观看一区二区三区 | 黄一区二区三区| 在线观看一区日韩| 国产精品视频九色porn| 免费观看日韩电影| 欧美日韩在线综合| 亚洲欧洲精品一区二区三区不卡| 日韩精品一二三| 91麻豆免费视频| 国产欧美日韩中文久久| 美女视频黄 久久| 欧美精品丝袜久久久中文字幕| 国产精品日产欧美久久久久| 久久国产乱子精品免费女| 欧美午夜片在线看| 亚洲综合清纯丝袜自拍| 成人精品免费网站| 中文字幕精品在线不卡| 国产精品一区久久久久| 精品国产一区二区国模嫣然| 奇米在线7777在线精品| 制服丝袜亚洲网站| 天堂蜜桃91精品| 欧美性大战久久| 午夜电影久久久| 7777精品久久久大香线蕉| 亚洲主播在线播放| 欧美亚洲日本一区| 亚洲一二三四区| 欧美日韩另类一区| 肉丝袜脚交视频一区二区| 欧美日韩亚洲不卡| 亚洲成av人综合在线观看| 在线国产电影不卡| 日本成人在线网站| 日韩精品专区在线影院重磅| 日本怡春院一区二区| 精品国产乱码久久久久久夜甘婷婷 | 一区二区在线看| 欧美在线视频日韩| 日韩精品三区四区| 欧美成人一区二区三区| 狠狠色丁香久久婷婷综合_中| 欧美v国产在线一区二区三区| 久久99久久久久久久久久久| 日韩欧美一二三| 国产在线精品一区二区夜色| 国产亚洲美州欧州综合国| 国产成人av电影在线| 亚洲日本韩国一区| 8x8x8国产精品| 韩日av一区二区| 最新日韩av在线| 欧美日本在线看| 国产乱淫av一区二区三区 | 日韩欧美一级片| 岛国一区二区在线观看| 亚洲香肠在线观看| 精品久久久久久久久久久院品网| 日韩欧美激情四射| 成人午夜视频福利| 午夜欧美电影在线观看| 久久亚洲捆绑美女| 91美女片黄在线| 裸体健美xxxx欧美裸体表演| 国产免费久久精品| 欧美老女人在线| 国产99精品国产| 午夜av一区二区三区| 久久久91精品国产一区二区精品| 色狠狠色狠狠综合| 精品午夜久久福利影院| 一区二区三区成人| 久久精品人人做| 欧美视频在线一区二区三区| 国产精品一区一区三区| 视频在线在亚洲| 亚洲欧美日韩人成在线播放| 欧美成人猛片aaaaaaa| 欧美无砖专区一中文字| 成人精品视频一区二区三区| 天堂一区二区在线| 亚洲男同1069视频| 久久久精品国产99久久精品芒果| 欧美最猛性xxxxx直播| 成人性生交大合| 国产在线视频一区二区三区| 亚洲亚洲精品在线观看| 亚洲天堂2016| 国产精品入口麻豆原神| 日韩免费高清电影| 91超碰这里只有精品国产| 一本大道综合伊人精品热热| 国产乱码字幕精品高清av| 美女被吸乳得到大胸91| 天天综合天天综合色| 尤物视频一区二区| 亚洲天堂a在线| 国产精品素人视频| 中文在线资源观看网站视频免费不卡 | 欧美午夜影院一区| 色婷婷激情一区二区三区| 成人av电影在线网| 国产suv精品一区二区883| 韩国av一区二区| 国产麻豆视频精品| 国产一区在线不卡| 韩国视频一区二区| 国产精品一区二区三区99| 国产精品自拍av| 国产精品一区二区x88av| 国产一区二区三区久久久| 国产一区二区三区在线看麻豆| 狠狠色丁香婷综合久久| 精品亚洲porn| 成人永久aaa| 懂色av一区二区三区免费看| 国产成a人亚洲精品| 不卡的av网站| 91视频免费观看| 欧美中文字幕不卡| 欧美特级限制片免费在线观看| 欧美伊人久久大香线蕉综合69| 在线观看国产日韩| 91.com视频| 亚洲资源中文字幕| 日本aⅴ精品一区二区三区| 精品一二三四在线| 成人丝袜18视频在线观看| av电影在线观看一区| 91成人在线精品| 91精品国产福利在线观看| 日韩欧美一区在线| 亚洲国产精品二十页| 亚洲精品国产成人久久av盗摄| 五月天激情综合| 国内精品国产成人国产三级粉色| 成人精品高清在线| 欧美在线免费播放| 日韩女优毛片在线| 亚洲免费在线视频一区 二区| 亚洲成va人在线观看| 国产综合一区二区| 色婷婷亚洲一区二区三区| 日韩欧美一区二区免费| 国产精品免费丝袜| 日本视频一区二区| 福利一区二区在线观看| 欧美人xxxx| 国产精品婷婷午夜在线观看| 亚洲一区中文在线| 国产精品一区二区x88av| 91福利国产精品| 久久久久久久久一| 日韩综合小视频| thepron国产精品| 欧美不卡在线视频| 一区二区高清视频在线观看| 国内精品免费在线观看| 在线观看av不卡| 亚洲v精品v日韩v欧美v专区| 国产精品中文字幕日韩精品| 欧美羞羞免费网站| 国产精品美女一区二区| 久久电影网站中文字幕| 91久久线看在观草草青青| 国产亚洲精品bt天堂精选| 日本免费在线视频不卡一不卡二| 色综合视频一区二区三区高清| 欧美变态口味重另类| 亚洲国产综合人成综合网站| 风流少妇一区二区| 日韩视频免费观看高清完整版在线观看 | 久久蜜桃av一区精品变态类天堂| 伊人夜夜躁av伊人久久| 高清成人在线观看| 久久久久青草大香线综合精品| 亚洲一区二三区| 99精品热视频| 国产精品视频一区二区三区不卡| 麻豆精品视频在线观看免费| 色狠狠综合天天综合综合| 国产精品国产三级国产普通话99 | 夜夜操天天操亚洲| 国产剧情一区在线| 日韩欧美成人午夜| 日韩中文字幕1| 欧美日韩久久久| 亚洲综合视频网| gogo大胆日本视频一区| 国产精品另类一区| 成人黄色在线网站| 国产精品久久久久久亚洲毛片 | 精品国产凹凸成av人导航| 天天影视涩香欲综合网|