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

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

?? v4l2video.c

?? 網(wǎng)上大多數(shù)linux/unix視頻采集程序都是基于video4linux的.而基于V4L2的程序比較少. 本人自己寫的基于video4linux2(V4L2)的視頻采集程序.已經(jīng)測試成功.編譯請(qǐng)用G
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
        default :             fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;    }    //fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;    fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;    if (-1 == ioctl (videofd, VIDIOC_S_FMT, &fmt)){       fprintf(stderr,"Failed: VIDIOC_S_FMT");       exit(EXIT_FAILURE);     }        captureSize = fmt.fmt.pix.sizeimage;/*   min = fmt.fmt.pix.width * 2;   if (fmt.fmt.pix.bytesperline < min)      fmt.fmt.pix.bytesperline = min;   min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height;   if (fmt.fmt.pix.sizeimage < min)       fmt.fmt.pix.sizeimage=min;    fprintf(stderr,"fmt size : %u \n",fmt.fmt.pix.sizeimage); */ //   printf("%width:%u,height:%u,sizeimage:%u\n",fmt.fmt.pix.width,fmt.fmt.pix.height,fmt.fmt.pix.sizeimage);   //allocate  buffer:   switch(io){        case IO_METHOD_READ:             init_read(fmt.fmt.pix.sizeimage);             break;        case IO_METHOD_MMAP:             init_mmap();             break;        case IO_METHOD_USERPTR:             init_usrptr(fmt.fmt.pix.sizeimage);             break;        default:              fprintf(stderr,"IO_METHOD : No such method\n");             break;     }}void startCapturing(void){    unsigned int i;    enum v4l2_buf_type type;    switch (io) {        case IO_METHOD_READ:             /* Nothing to do. */             break;        case IO_METHOD_MMAP:             for (i = 0; i < n_buffers; ++i) {                 struct v4l2_buffer buf;                 CLEAR (buf);                 buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;                buf.memory = V4L2_MEMORY_MMAP;                buf.index = i;                if (-1 == xioctl (videofd, VIDIOC_QBUF, &buf))  {  //enqueue an empty capturing buffer allocated in                                                                    //driver space                      fprintf(stderr,"Failed(MMAP):VIDIOC_QBUF\n");                      exit(EXIT_FAILURE);                }              }              type = V4L2_BUF_TYPE_VIDEO_CAPTURE;              if (-1 == ioctl (videofd, VIDIOC_STREAMON, &type)){ //start capturing                       fprintf(stderr,"Failed(MMAP):VIDIOC_STREAMON\n");                       exit(EXIT_FAILURE);              }              break;        case IO_METHOD_USERPTR:             for (i = 0; i < n_buffers; ++i) {                 struct v4l2_buffer buf;                 CLEAR (buf);                 buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;                 buf.memory = V4L2_MEMORY_USERPTR;                 buf.m.userptr = (unsigned long) buffers[i].start;                 buf.length = buffers[i].length;                 if (-1 == ioctl (videofd, VIDIOC_QBUF, &buf)) {  //encode an empty buffer allocated in usr space                                                                   // in the capturing queue                     fprintf(stderr,"Failed(USERPTR):VIDIOC_QBUF\n");                     exit(EXIT_FAILURE);                 }              }              type = V4L2_BUF_TYPE_VIDEO_CAPTURE;              if (-1 == ioctl (videofd, VIDIOC_STREAMON, &type)) {  //start capturing                     fprintf(stderr,"Failed(USERPTR):VIDIOC_STREAMON\n");                     exit(EXIT_FAILURE);              }     }}static int process_image(const void *p){                 return 0;}static int read_frame (void){    struct v4l2_buffer buf;    unsigned int i;    switch (io) {        case IO_METHOD_READ:           if (-1 == read (videofd, buffers[0].start, buffers[0].length)) {  //read data into the usr buffer,                                                                             //note there is only one buffer              switch (errno) {                 case EAGAIN:                    return 0;                 case EIO:                   /* Could ignore EIO, see spec. */                   /* fall through */                 default:                    {                    fprintf(stderr,"Failed : read");                    exit(EXIT_FAILURE);                                     }                }             }        // if (write(outputfd, buffers[buf.index].start , captureSize ) == -1)    //write to the output file
        //       fprintf(stderr,"Error writing the data to output file\n");            process_image (buffers[0].start);              //process this buffer           break;       case IO_METHOD_MMAP:           CLEAR (buf);           buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;           buf.memory = V4L2_MEMORY_MMAP;           if (-1 == xioctl (videofd, VIDIOC_DQBUF, &buf)) {    //dequeue a buffer               switch (errno) {                   case EAGAIN:                        return 0;                   case EIO:                   /* Could ignore EIO, see spec. */                   /* fall through */                   default:                      {                       fprintf(stderr,"Failed : VIDIOC_DQBUF");                       exit(EXIT_FAILURE);                      }                }            }           assert (buf.index < n_buffers);                //    if (write(outputfd, buffers[buf.index].start , captureSize ) == -1);
           process_image (buffers[buf.index].start);      //process this buffer           if (-1 == xioctl (videofd, VIDIOC_QBUF, &buf)) {    //enqueue this buffer in order to reuse it                   fprintf(stderr,"Failed : VIDIOC_QBUF\n");                   exit(EXIT_FAILURE);           }           break;        case IO_METHOD_USERPTR:           CLEAR (buf);           buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;                  buf.memory = V4L2_MEMORY_USERPTR;           if (-1 == xioctl (videofd, VIDIOC_DQBUF, &buf)) {                 switch (errno) {                  case EAGAIN:                     return 0;                  case EIO:                  /* Could ignore EIO, see spec. */                  /* fall through */                  default:                     {                       fprintf(stderr,"Failed : VIDIOC_DQBUF");                      exit(EXIT_FAILURE);                     }                 }              }            for (i = 0; i < n_buffers; ++i)            //find the dequeued buffer in usr space               if (buf.m.userptr == (unsigned long) buffers[i].start && buf.length == buffers[i].length)                    break;                                   assert (i < n_buffers);  //        if (write(outputfd, buffers[i].start , captureSize ) == -1)    //write to the output file
   //              fprintf(stderr,"Error writing the data to output file\n");             process_image ((void *) buf.m.userptr);            if (-1 == xioctl (videofd, VIDIOC_QBUF, &buf)) { //reuse                  fprintf(stderr,"Failed : VIDIOC_QBUF");                  exit(EXIT_FAILURE);              }             break;    }   return 0;}///////////////////////////////////////////////////////////////////////////////////////////////////////void timehandle(int signo) {    fprintf(stderr,"EXIT : time over !--->%u\n",timelimit);   exit(0); } void init_sigaction(void) {   struct sigaction act;   act.sa_handler=timehandle;   act.sa_flags=0;   sigemptyset(&act.sa_mask);   sigaction(SIGPROF,&act,NULL); } void init_time() {   struct itimerval value;   value.it_value.tv_sec= 1;   value.it_value.tv_usec=0;   value.it_interval=value.it_value;   setitimer(ITIMER_PROF,&value,NULL); }///////////////////////////////////////////////////////////////////////////////////////////////////////void mainloop (void){   static  int framecount=0;       outputfd = open(OUTPUTFILE , O_WRONLY | O_CREAT | O_TRUNC, 00644);   if (outputfd == -1) {
        fprintf(stderr,"Failed to open %s for writing\n", OUTPUTFILE);        exit(EXIT_FAILURE);
    }       if(flag == TIME)     {       //init_sigaction( ) ;       //init_time( ) ;       while( 1 ){          fd_set fds;          struct timeval tv;          int r;          FD_ZERO (&fds);          FD_SET (videofd, &fds);          /* Timeout. */          tv.tv_sec = 2;          tv.tv_usec = 0;          r = select (videofd + 1, &fds, NULL, NULL, &tv);  //wait for a new frame          if (-1 == r) {             if (EINTR == errno)                 continue;             fprintf(stderr,"select");             exit(EXIT_FAILURE);           }          if (0 == r) {             fprintf (stderr, "select timeout\n");             exit (EXIT_FAILURE);           }          if (read_frame ())              break;          printf("capturing frame %d \n",framecount);          framecount++;          /* EAGAIN - continue select loop. */        }    }   else        while( framecount < totalframes ){          fd_set fds;          struct timeval tv;          int r;          FD_ZERO (&fds);          FD_SET (videofd, &fds);          /* Timeout. */          tv.tv_sec = 2;          tv.tv_usec = 0;         // fprintf(stderr,"wait for a new frame\n");          r = select (videofd + 1, &fds, NULL, NULL, &tv);  //wait for a new frame          if (-1 == r) {             if (EINTR == errno)                 continue;             fprintf(stderr,"select");             exit(EXIT_FAILURE);           }          if (0 == r) {             fprintf (stderr, "select timeout\n");             exit (EXIT_FAILURE);           }          //fprintf(stderr,"Read next frame :\n");          if (read_frame ())              break;          printf("capturing frame %d \n",framecount);          framecount++;          /* EAGAIN - continue select loop. */       }   if( outputfd != -1 )      close(outputfd);}//---------------------------------------------void stop_capturing (void)     //stop catpureing pictures{  enum v4l2_buf_type type;  switch (io) {     case IO_METHOD_READ:      /* Nothing to do. */           break;     case IO_METHOD_MMAP:     case IO_METHOD_USERPTR:         type = V4L2_BUF_TYPE_VIDEO_CAPTURE;         if (-1 == xioctl (videofd, VIDIOC_STREAMOFF, &type)){             fprintf (stderr,"VIDIOC_STREAMOFF");             exit(EXIT_FAILURE);                   }          break; }void uninit(void){     unsigned int i;     switch (io) {        case IO_METHOD_READ:           free (buffers[0].start);           break;        case IO_METHOD_MMAP:           for (i = 0; i < n_buffers; ++i)               if (-1 == munmap (buffers[i].start, buffers[i].length)){                  fprintf(stderr,"munmap");                  exit(EXIT_FAILURE);                 }           break;        case IO_METHOD_USERPTR:           for (i = 0; i < n_buffers; ++i)               free (buffers[i].start);           break;          }        free (buffers);     }}void close_device (void){    if (-1 == close (videofd))     {       fprintf(stderr,"close");       exit(EXIT_FAILURE);     }    videofd = -1;}///////////////////////////////////////////////////////////////////////////entry:int main(int argc,char **argv){  process_command(argc,argv);  open_device();  fprintf(stderr,"SUCCESS : open_device \n");   init_device();  fprintf(stderr,"SUCCESS : Init_device \n");  startCapturing();  fprintf(stderr,"SUCCESS : startCapturing\n");   mainloop();  fprintf(stderr,"SUCCESS : stopCapturing\n");  stop_capturing() ;   fprintf(stderr,"SUCCUSS : closeDevice\n");  close_device();   return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合天天综合在线视频| 亚洲成av人在线观看| 国产美女一区二区三区| 欧美一区二区视频观看视频| 日日摸夜夜添夜夜添精品视频| 精品视频999| 热久久久久久久| 日韩成人dvd| 51精品国自产在线| 久久精品国产澳门| 久久婷婷国产综合精品青草 | 欧美日韩dvd在线观看| 亚洲h在线观看| 精品国产麻豆免费人成网站| 国产精品 日产精品 欧美精品| 国产精品视频你懂的| 日本福利一区二区| 美女国产一区二区三区| 久久久国产精品麻豆| 色综合久久综合网| 日韩主播视频在线| 欧美激情艳妇裸体舞| 欧美亚洲国产一卡| 国内成人精品2018免费看| 国产精品国产a| 777亚洲妇女| 国产一区二区三区免费在线观看| **网站欧美大片在线观看| 欧美日韩黄视频| 国产麻豆精品一区二区| 亚洲黄一区二区三区| 欧美成人三级在线| 精品嫩草影院久久| 色婷婷激情一区二区三区| 麻豆91免费观看| 亚洲三级在线看| 2021国产精品久久精品| 91国在线观看| 国产成人精品一区二区三区四区 | 国产精品中文字幕欧美| 亚洲男人的天堂网| 精品国产91洋老外米糕| 欧美综合亚洲图片综合区| 国产一区二区三区视频在线播放| 亚洲成人动漫在线观看| 欧美激情在线免费观看| 欧美一区二区三区精品| a在线播放不卡| 久久99精品视频| 亚洲一区二区三区在线播放| 国产日韩精品一区二区三区| 日韩一区二区视频在线观看| 91黄色小视频| 99re8在线精品视频免费播放| 久久国产成人午夜av影院| 亚洲福利国产精品| 自拍偷在线精品自拍偷无码专区| 精品第一国产综合精品aⅴ| 欧美日韩情趣电影| 日本久久精品电影| 不卡一区二区三区四区| 国产原创一区二区三区| 男男gaygay亚洲| 三级亚洲高清视频| 亚洲成人综合在线| 亚洲影视资源网| 一级特黄大欧美久久久| 国产精品对白交换视频| 久久久99久久精品欧美| 精品国产乱码久久久久久夜甘婷婷| 欧美日韩精品久久久| 欧美性极品少妇| 欧美亚洲另类激情小说| 不卡欧美aaaaa| av激情成人网| 色综合亚洲欧洲| 色丁香久综合在线久综合在线观看| jlzzjlzz亚洲日本少妇| 99国产精品99久久久久久| 99久久精品国产一区| 成人免费毛片嘿嘿连载视频| 国产91丝袜在线18| 成人av在线一区二区| 国产成a人亚洲精| 99久久精品99国产精品| 91亚洲精品久久久蜜桃| 91国偷自产一区二区开放时间| 91影视在线播放| 中文字幕免费一区| 亚洲色图.com| 亚洲黄色尤物视频| 首页欧美精品中文字幕| 日韩中文字幕亚洲一区二区va在线| 日产精品久久久久久久性色| 免费三级欧美电影| 国产精品正在播放| 91免费版在线| 欧美日韩电影在线| 精品久久人人做人人爽| 国产欧美日韩三级| 国产精品久久久一本精品| 一区二区三区波多野结衣在线观看| 亚洲电影中文字幕在线观看| 人人爽香蕉精品| 高清国产一区二区| 色久综合一二码| 日韩一区二区中文字幕| 久久久久久久网| 亚洲精品大片www| 日本欧美一区二区三区乱码| 国产精品1024| 欧美体内she精视频| 欧美一级欧美三级在线观看 | 欧美性视频一区二区三区| 欧美人与禽zozo性伦| 久久夜色精品一区| 亚洲免费三区一区二区| 久久精品国产秦先生| 成人av网站在线观看| 欧美久久高跟鞋激| 欧美激情在线看| 性做久久久久久久免费看| 国产精品99久久久久久宅男| 在线一区二区三区做爰视频网站| 欧美大胆一级视频| 亚洲免费色视频| 国产精品综合网| 337p亚洲精品色噜噜狠狠| 国产精品丝袜久久久久久app| 丝袜美腿亚洲一区二区图片| 国产99一区视频免费| 91精品蜜臀在线一区尤物| 自拍偷拍欧美激情| 国产做a爰片久久毛片| 欧美特级限制片免费在线观看| 精品国产乱码久久久久久久| 亚洲一区二区av电影| 国v精品久久久网| 精品盗摄一区二区三区| 午夜久久电影网| 色婷婷久久久综合中文字幕| 国产日产欧美精品一区二区三区| 午夜精品久久久久久| 色婷婷精品久久二区二区蜜臀av | 国产精品女同互慰在线看| 青青草原综合久久大伊人精品| 一本色道亚洲精品aⅴ| 国产亚洲一本大道中文在线| 蜜臀a∨国产成人精品| 欧美在线观看一二区| 亚洲欧洲成人自拍| 国产高清一区日本| 精品国产一区a| 日本视频一区二区三区| 欧美亚洲一区二区在线观看| 亚洲少妇30p| www..com久久爱| 中文字幕第一区| 国产成人鲁色资源国产91色综| 欧美v国产在线一区二区三区| 日韩av在线发布| 678五月天丁香亚洲综合网| 一区二区激情小说| 欧美专区日韩专区| 亚洲影视资源网| 欧美丝袜自拍制服另类| 亚洲午夜免费电影| 欧美色视频一区| 午夜精品视频在线观看| 欧美日本乱大交xxxxx| 亚洲成a人v欧美综合天堂下载 | 亚洲国产日产av| 在线观看国产一区二区| 亚洲精品美国一| 色噜噜久久综合| 亚洲国产va精品久久久不卡综合| 日本高清不卡一区| 午夜视频一区二区| 欧美一区二区国产| 国产一区二区看久久| 国产日产欧美一区二区三区| 成人性生交大片免费看中文| 中文字幕中文乱码欧美一区二区| 成人av在线资源网| 玉足女爽爽91| 亚洲三级电影网站| 欧洲国内综合视频| 一二三四社区欧美黄| 337p亚洲精品色噜噜狠狠| 天天做天天摸天天爽国产一区| 日韩视频永久免费| 国产成人午夜视频| 亚洲日本护士毛茸茸| 欧美三级一区二区| 九色综合狠狠综合久久| 久久综合狠狠综合久久激情| 成人激情动漫在线观看| 一区二区三区四区高清精品免费观看| 欧美日韩免费在线视频| 精品亚洲成a人在线观看|