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

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

?? v4l2video.c~

?? 網(wǎng)上大多數(shù)linux/unix視頻采集程序都是基于video4linux的.而基于V4L2的程序比較少. 本人自己寫的基于video4linux2(V4L2)的視頻采集程序.已經(jīng)測試成功.編譯請用G
?? C~
?? 第 1 頁 / 共 2 頁
字號:
/*head files:*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>#include <assert.h>#include <getopt.h>

#include <fcntl.h>
#include <unistd.h>
#include <errno.h>#include <signal.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <asm/types.h>

#include <linux/videodev2.h>//////////////////////////////////////////declarations://state reset:#define CLEAR(x)  memset(&(x),0,sizeof(x))//devices:#define V4L2_DEVICE     "/dev/video0"
#define FBVID_DEVICE    "/dev/fb/3"#define OUTPUTFILE      "/mnt/gjf/vidrecord.uyvy"///////////////////////////////////////////////////////////////////////////////////////////#define SCREEN_BPP          16#define D1_WIDTH            352#define D1_HEIGHT           288#define D1_LINE_WIDTH       (D1_WIDTH * SCREEN_BPP / 8)#define D1_FRAME_SIZE       (D1_LINE_WIDTH * D1_HEIGHT)////////////////////////////////////////////////////////////////////////////////////////////typedef enum{    IO_METHOD_READ,    IO_METHOD_MMAP,    IO_METHOD_USERPTR}io_method;struct buffer{     void*  start;      size_t length;};static char* video_device=NULL;static char* output_device=NULL;static io_method io=IO_METHOD_MMAP;struct buffer* buffers=NULL;static unsigned int n_buffers=0;static int   videofd = -1 ;    //device discription for video device;static int   outputfd  = -1 ;  //device discprition for output device; static int   captureSize = 0 ;     //picture sizestatic unsigned int imagewidth = 0 ;  //image widthstatic unsigned int imageheight = 0 ; //image heightstatic unsigned int timelimit = 1 ;   //capturing timestatic unsigned int totalframes = 0 ; //catpturing frames#define FRAME 0#define TIME  1static int flag = FRAME;////////////////////////////////////////////////////////typedef enum{YUYV=0,UYVY}imageType;static imageType format=YUYV;/////////////////////////////////////////////////////////command line:static const char short_options[]="d:pmruw:h:t:f:o:";static const struct option long_options[] ={     {"device",required_argument,NULL,'d'},     {"help",no_argument,NULL,'p'},     {"mmap",no_argument,NULL,'m'},     {"read",no_argument,NULL,'r'},     {"usrptr",no_argument,NULL,'u'},     {"width",required_argument,NULL,'w'},     {"height",required_argument,NULL,'h'},     {"time",required_argument,NULL,'t'},     {"frame",required_argument,NULL,'f'},      {"format",required_argument,NULL,'o'},      { 0 , 0 , 0 , 0 }};static void usage(FILE* fp,int argc,char **argv){  fprintf (fp,"Usage: %s [options]\n\n"              "Options:\n"              "-d | --device name Video device name [/dev/video]\n"              "-p | --help Print this message\n"              "-m | --mmap Use memory mapped buffers\n"              "-r | --read Use read() calls\n"              "-u | --userp Use application allocated buffers\n"              "-w | --image width\n"              "-h | --image height\n"              "-t | --capture time\n"              "-f | --number of frames\n"              "-o | --image format\n"                "",             argv[0]);}void process_command(int argc,char **argv){     int index ;     int next_option ;     int f = -1;     video_device = V4L2_DEVICE ;     output_device = FBVID_DEVICE ;     imagewidth  = D1_WIDTH ;     imageheight = D1_HEIGHT ;     timelimit = 1 ;     totalframes = 0 ;     format = UYVY ;      flag = FRAME ;         do{         next_option = getopt_long(argc,argv,short_options,long_options,&index) ;         switch(next_option) {             case 'd' :                  video_device=optarg ;                  break;             case 'p' :                  usage(stdout,argc,argv) ;                                                           exit(EXIT_FAILURE) ;             case 'm':                  io = IO_METHOD_MMAP ;                  break ;             case 'r':                  io = IO_METHOD_READ ;                  break ;             case 'u':                  io = IO_METHOD_USERPTR ;                  break ;             case 'w':                  imagewidth = atoi(optarg);                  break;             case 'h':                  imageheight = atoi(optarg);                  break;             case 't':                  flag = TIME;                  timelimit = atoi( optarg ) ;                  break;                case 'f':                   flag = FRAME;                  totalframes = atoi( optarg ) ;                    break;                  case 'o':                  f = atoi(optarg);                  format = ( f >= YUYV && f <= UYVY )? f : UYVY;                  break;                     case -1:                  break ;             default:                   usage(stdout,argc,argv) ;                   exit(EXIT_FAILURE) ;                                 }      }while(next_option!=-1);}///////////////////videoCapture:void open_device(){     struct stat st;      if (-1 == stat (video_device, &st)) {         fprintf (stderr, "Cannot identify ’%s’: %d, %s\n",video_device, errno, strerror (errno));         exit (EXIT_FAILURE);      }     if (!S_ISCHR (st.st_mode)) {         fprintf (stderr, "%s is no device\n", video_device);         exit (EXIT_FAILURE);      }     videofd = open (video_device, O_RDWR | O_NONBLOCK, 0);     if (videofd == -1) {         fprintf ( stderr, "Cannot open ’%s’: %d, %s\n", video_device , errno , strerror (errno) );         exit (EXIT_FAILURE);      }}static void init_read(unsigned int bufSize)  //directly read{   buffers = calloc (1, sizeof (*buffers));   if (!buffers) {       fprintf (stderr, "Out of memory\n");       exit (EXIT_FAILURE);    }    buffers[0].length = bufSize ;    buffers[0].start = malloc (bufSize);    if (!buffers[0].start) {          fprintf (stderr, "Out of memory\n");          exit (EXIT_FAILURE);    }}static void init_mmap() //map the driver's buffer to application buffer{   struct v4l2_requestbuffers req;   CLEAR (req);   req.count = 4;   req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;   req.memory = V4L2_MEMORY_MMAP;   if (ioctl(videofd, VIDIOC_REQBUFS, &req) == -1) { //allocate buffer in the driver memory space      if (EINVAL == errno) {          fprintf (stderr, "%s does not support ""memory mapping\n", video_device);          exit (EXIT_FAILURE);      } else {          fprintf(stderr,"Failed:VIDIOC_REQBUFS");          exit (EXIT_FAILURE);       }    }     if (req.count < 2) {    //double buffers      fprintf (stderr, "Insufficient buffer memory on %s\n", video_device);      exit (EXIT_FAILURE);    }   buffers = calloc (req.count, sizeof (*buffers));   if (!buffers) {       fprintf (stderr, "Out of memory\n");       exit (EXIT_FAILURE);    }   for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {       struct v4l2_buffer buf;       CLEAR (buf);       buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;       buf.memory = V4L2_MEMORY_MMAP;       buf.index = n_buffers;       if (-1 == ioctl (videofd, VIDIOC_QUERYBUF, &buf)) {  //query the state of one of the  buffers in driver space            fprintf(stderr,"Failed:VIDIOC_QUERYBUF ");             exit(EXIT_FAILURE);              }       buffers[n_buffers].length = buf.length;              buffers[n_buffers].start = mmap (	NULL /* start anywhere */,							buf.length,							PROT_READ | PROT_WRITE /* required */,							MAP_SHARED /* recommended */,							videofd, buf.m.offset);	if (buffers[n_buffers].start == MAP_FAILED ) {            fprintf(stderr,"Failed:when MMAP");            exit(EXIT_FAILURE);         }     }}static void init_usrptr(unsigned int bufSize)  //{   struct v4l2_requestbuffers req;   CLEAR (req);   req.count = 4;   req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;   req.memory = V4L2_MEMORY_USERPTR;   if (-1 == ioctl (videofd, VIDIOC_REQBUFS, &req)) {       if (EINVAL == errno) {            fprintf (stderr, "%s does not support ""user pointer i/o\n", video_device);            exit (EXIT_FAILURE);        }        else {            fprintf(stderr,"Failed:VIDIOC_REQBUFS\n");        }    }   buffers = calloc (4, sizeof (*buffers));   if (!buffers) {       fprintf (stderr, "Out of memory\n");       exit (EXIT_FAILURE);    }   for (n_buffers = 0; n_buffers < 4; ++n_buffers) {       buffers[n_buffers].length = bufSize;       buffers[n_buffers].start = malloc (bufSize);  //allocate buffers in user space       if (!buffers[n_buffers].start) {            fprintf (stderr, "Out of memory\n");            exit (EXIT_FAILURE);        }    } }static int xioctl( int fd,int request,void * arg){    int r;    do{         r = ioctl (fd, request, arg);     }    while (-1 == r && EINTR == errno);    return r;}#define VPFE_STD_AUTO ((v4l2_std_id)(0x1000000000000000ULL))void init_device(){    struct v4l2_capability      cap;
    struct v4l2_cropcap         cropCap;
    struct v4l2_crop            crop;
    struct v4l2_format          fmt;     unsigned int min;
     //get  the capture device's capabilities    if (ioctl(videofd, VIDIOC_QUERYCAP, &cap) == -1) {
       if (errno == EINVAL) {
            fprintf ( stderr, "%s is no V4L2 device\n",video_device);
            exit(EXIT_FAILURE);
        }
       fprintf(stderr,"Failed VIDIOC_QUERYCAP on %s (%s)\n", video_device,strerror(errno));
       exit(EXIT_FAILURE);
    }   if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
       fprintf(stderr,"%s is no video capture device\n", video_device);
       exit(EXIT_FAILURE);
    }
                   switch (io) {      case IO_METHOD_READ:      	   if (!(cap.capabilities & V4L2_CAP_READWRITE)) {              fprintf (stderr, "%s does not support read i/o\n",video_device);               exit (EXIT_FAILURE);       	    }	   break;      case IO_METHOD_MMAP:      case IO_METHOD_USERPTR:	   if (!(cap.capabilities & V4L2_CAP_STREAMING)) {	        fprintf (stderr, "%s does not support streaming i/o\n",video_device);	        exit (EXIT_FAILURE);            }    }    //set croping and scaling attribure    CLEAR(cropCap);    cropCap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;    if (0 == ioctl (videofd, VIDIOC_CROPCAP, &cropCap)) {         crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;         crop.c = cropCap.defrect; /* reset to default */         if (-1 == ioctl (videofd, VIDIOC_S_CROP, &crop)) {              switch (errno) {                 case EINVAL:                    fprintf(stderr,"Cropping not supported\n");                    //exit (EXIT_FAILURE);                 default:                    fprintf(stderr, "Failed:VIDIOC_S_CROP");                   // exit (EXIT_FAILURE);                 }           }     }     else {         fprintf(stderr,"Failed:VIDIOC_CROPCAP");         //exit(EXIT_FAILURE);    }           //set picture format    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;    fmt.fmt.pix.width  = D1_WIDTH;    //720    fmt.fmt.pix.height = D1_HEIGHT;   //480       switch(format) {        case YUYV :             fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;             break;        case UYVY :             fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;             break;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产亚洲一区二区三区| 国产亚洲女人久久久久毛片| 亚洲天堂免费看| www.久久精品| 一级中文字幕一区二区| 欧美日韩国产高清一区| 日本三级亚洲精品| 久久久久久久精| youjizz久久| 亚洲一卡二卡三卡四卡| 91精品国产欧美一区二区18| 久久精品国产澳门| 中文字幕精品在线不卡| 色婷婷综合五月| 秋霞影院一区二区| 国产女人水真多18毛片18精品视频 | 久久精品国产一区二区三区免费看| 91精品久久久久久久91蜜桃| 国产一区激情在线| 一区二区视频在线看| 91精品麻豆日日躁夜夜躁| 国产伦精品一区二区三区在线观看| 中文一区二区完整视频在线观看| 91麻豆6部合集magnet| 日日欢夜夜爽一区| 中文字幕高清不卡| 欧美日本一区二区在线观看| 极品少妇xxxx精品少妇偷拍 | 国产伦精品一区二区三区免费| 国产精品青草综合久久久久99| 色综合一区二区| 精品一区二区三区蜜桃| 亚洲码国产岛国毛片在线| 欧美一区二区女人| 99久久er热在这里只有精品15| 视频一区视频二区中文| 国产精品初高中害羞小美女文| 欧美日韩激情一区二区三区| 国产福利不卡视频| 肉丝袜脚交视频一区二区| 欧美极品美女视频| 日韩三级电影网址| 91精彩视频在线观看| 国产尤物一区二区在线| 亚洲大片一区二区三区| 国产精品美女久久久久久 | 在线不卡一区二区| 99在线热播精品免费| 日韩不卡一二三区| 亚洲一区二区在线视频| 国产精品久久久久精k8| 欧美videossexotv100| 欧美视频一区二区三区| 不卡电影一区二区三区| 国内精品久久久久影院色| 亚洲国产日韩a在线播放性色| 国产精品色一区二区三区| 26uuu国产日韩综合| 欧美电影影音先锋| 欧美日韩在线不卡| 色婷婷久久久久swag精品| 国产经典欧美精品| 久久国产生活片100| 日韩国产高清影视| 婷婷久久综合九色综合伊人色| 亚洲欧美日韩中文播放| 亚洲欧洲www| 一区二区中文字幕在线| 国产精品网友自拍| 国产精品午夜免费| 国产精品日韩成人| 国产精品剧情在线亚洲| 国产欧美视频在线观看| 国产婷婷一区二区| 国产欧美日韩麻豆91| 久久久噜噜噜久久中文字幕色伊伊 | 欧美高清hd18日本| 欧美精品一二三四| 91精品国产品国语在线不卡| 7777精品伊人久久久大香线蕉超级流畅 | 粉嫩在线一区二区三区视频| 国产一区二区三区蝌蚪| 国产精品一区一区| 成人在线综合网站| av一二三不卡影片| 色丁香久综合在线久综合在线观看| 一本一道波多野结衣一区二区| www.一区二区| 欧美在线观看一区| 69p69国产精品| 精品国产一区二区三区不卡| 精品国产sm最大网站| 欧美激情综合五月色丁香| 中文字幕第一区综合| 亚洲免费在线视频一区 二区| 中文字幕日本不卡| 首页亚洲欧美制服丝腿| 久久国产欧美日韩精品| 国产成人午夜精品5599| 国产白丝精品91爽爽久久| 91麻豆国产福利在线观看| 欧美伊人久久大香线蕉综合69 | 成人18视频日本| 在线观看一区二区精品视频| 777奇米成人网| 国产亚洲欧美日韩日本| 一区二区在线观看视频| 日本不卡在线视频| 丁香一区二区三区| 欧美日韩一区三区| 久久蜜桃av一区二区天堂| 国产精品日韩成人| 日韩电影在线一区二区三区| 国产一区视频网站| 91福利精品第一导航| 精品国产一区二区三区四区四| 亚洲欧美自拍偷拍色图| 青椒成人免费视频| 成人免费高清视频在线观看| 欧美日精品一区视频| 久久这里只有精品视频网| 樱桃视频在线观看一区| 狠狠色狠狠色综合系列| 在线视频你懂得一区| 2024国产精品| 亚洲aⅴ怡春院| 成人av一区二区三区| 日韩一区二区三免费高清| 亚洲欧洲av在线| 久草这里只有精品视频| 欧洲一区二区三区免费视频| 久久久亚洲综合| 日日夜夜免费精品视频| 91丨porny丨国产入口| 久久这里只有精品6| 日韩中文欧美在线| 色婷婷久久久亚洲一区二区三区| 亚洲精品一区二区精华| 亚洲大型综合色站| 99re热这里只有精品免费视频| 精品福利一区二区三区 | 中文字幕一区二区三区不卡在线| 日本不卡视频在线| 欧洲精品在线观看| 亚洲欧美一区二区视频| 国产精品综合久久| 日韩三级视频中文字幕| 亚洲成人在线免费| 色94色欧美sute亚洲线路一久| 久久精品男人的天堂| 极品少妇xxxx偷拍精品少妇| 欧美精品乱码久久久久久按摩| 亚洲欧洲综合另类在线| 99久久精品国产一区| 欧美国产视频在线| 国产成人av一区二区三区在线观看| 日韩三级免费观看| 免费三级欧美电影| 欧美一区二区精品久久911| 丝袜a∨在线一区二区三区不卡| 在线一区二区观看| 亚洲综合成人在线视频| 日本韩国精品一区二区在线观看| 国产精品国产三级国产有无不卡| 国产91高潮流白浆在线麻豆 | 视频一区二区中文字幕| 欧美日韩综合在线免费观看| 亚洲激情综合网| 日本高清免费不卡视频| 亚洲精品视频一区| 欧美在线影院一区二区| 亚洲一区二区三区激情| 欧美午夜在线观看| 婷婷开心激情综合| 欧美va在线播放| 国产成都精品91一区二区三| 国产夜色精品一区二区av| 丁香网亚洲国际| 中文字幕在线播放不卡一区| 91丝袜美腿高跟国产极品老师 | 粉嫩一区二区三区性色av| 国产欧美中文在线| 成人av在线资源| 一区二区三区波多野结衣在线观看| 91久久久免费一区二区| 午夜精品久久久久久久久久久| 欧美日韩一区二区三区在线 | 国内成+人亚洲+欧美+综合在线 | 日本一区二区三区四区| 91片在线免费观看| 婷婷一区二区三区| 久久亚洲免费视频| 成人精品小蝌蚪| 亚洲成人高清在线| 精品国产免费久久| aaa欧美色吧激情视频| 亚洲高清中文字幕| 久久亚洲一区二区三区四区| 成年人午夜久久久| 日韩高清电影一区|