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

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

?? v4l2video.c~

?? 網上大多數linux/unix視頻采集程序都是基于video4linux的.而基于V4L2的程序比較少. 本人自己寫的基于video4linux2(V4L2)的視頻采集程序.已經測試成功.編譯請用G
?? C~
?? 第 1 頁 / 共 2 頁
字號:
        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;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久91精品国产一区二区精品 | 日韩欧美精品三级| 日韩欧美一区二区三区在线| 中文字幕在线观看不卡| 亚洲免费观看高清完整版在线观看熊| 美女精品一区二区| 欧美性色综合网| 国产欧美一二三区| 蜜臀精品一区二区三区在线观看| 97精品久久久午夜一区二区三区| 日韩欧美一级二级三级久久久| 亚洲欧美另类久久久精品| 精品一区二区三区在线播放| 欧美无砖专区一中文字| 亚洲婷婷国产精品电影人久久| 韩国女主播成人在线观看| 欧美视频你懂的| 亚洲色图.com| 成人免费av资源| 精品动漫一区二区三区在线观看| 亚洲精品福利视频网站| 亚洲chinese男男1069| 91免费观看在线| 久久综合九色综合久久久精品综合| 亚洲日本在线看| 久久不见久久见中文字幕免费| 成人黄动漫网站免费app| 欧美酷刑日本凌虐凌虐| 欧美极品aⅴ影院| 蜜臀av亚洲一区中文字幕| 色婷婷综合久久久中文字幕| 久久久精品中文字幕麻豆发布| 日韩在线播放一区二区| 色偷偷成人一区二区三区91| 亚洲国产高清在线观看视频| 国内精品嫩模私拍在线| 欧美一级高清片| 亚洲超丰满肉感bbw| 色婷婷综合激情| 中文字幕在线免费不卡| 国产成人福利片| 久久中文娱乐网| 狠狠色综合播放一区二区| 91精品国产综合久久蜜臀| 亚洲自拍另类综合| 91国产成人在线| 国产精品成人免费在线| 成人成人成人在线视频| 国产三区在线成人av| 国内精品久久久久影院薰衣草| 一本色道久久综合狠狠躁的推荐 | 美女在线一区二区| 欧美国产乱子伦 | 欧美色欧美亚洲另类二区| 亚洲伊人色欲综合网| 欧美极品另类videosde| 久久国产精品露脸对白| 日本在线不卡一区| 欧美精品免费视频| 香蕉久久夜色精品国产使用方法| 在线视频欧美区| 亚洲午夜电影在线观看| 欧美日韩免费一区二区三区 | 国产亚洲人成网站| ●精品国产综合乱码久久久久| 久久久久国色av免费看影院| 亚洲人精品午夜| 狠狠色狠狠色综合系列| 丁香婷婷综合色啪| 色成年激情久久综合| 中文字幕精品一区| 美女视频黄免费的久久| 国产激情精品久久久第一区二区 | 五月婷婷欧美视频| 日韩精品高清不卡| 不卡视频一二三| 精品国产露脸精彩对白| 国产亚洲欧洲997久久综合| 亚洲欧美另类小说视频| 久久九九影视网| 成人h动漫精品| 一区二区欧美在线观看| 欧美一区二区三区婷婷月色| 国产一区二区三区国产| 欧美一区二区三区在| 色综合天天综合网天天看片| 一本色道久久综合亚洲91| 五月婷婷激情综合| 成人深夜视频在线观看| 国产精品久久久久久久久免费桃花 | 青青青爽久久午夜综合久久午夜| 精品国产三级电影在线观看| 懂色中文一区二区在线播放| 亚洲成人久久影院| 国产精品人妖ts系列视频| 日韩欧美中文字幕一区| 99国产精品久久久久| 国产在线不卡一卡二卡三卡四卡| 亚洲蜜臀av乱码久久精品蜜桃| 精品黑人一区二区三区久久| 色综合天天天天做夜夜夜夜做| 国产一区二区三区蝌蚪| 一区二区三区日韩精品视频| 7777精品伊人久久久大香线蕉完整版| 国产麻豆欧美日韩一区| 亚洲成人一区在线| 洋洋成人永久网站入口| 国产日产欧美精品一区二区三区| 日韩欧美一区中文| 欧美色偷偷大香| 欧亚一区二区三区| av电影天堂一区二区在线| 国产91在线观看丝袜| 精品一区二区久久| 精品一区二区三区香蕉蜜桃| 性欧美大战久久久久久久久| 亚洲国产精品人人做人人爽| 亚洲女女做受ⅹxx高潮| www久久精品| 欧美变态tickling挠脚心| 欧美一区二区三区视频| 色8久久精品久久久久久蜜| 一本大道av一区二区在线播放| 国产91精品在线观看| 国产一区二区主播在线| 麻豆精品一区二区三区| 日本怡春院一区二区| 亚洲亚洲人成综合网络| 亚洲三级免费电影| 中文字幕一区二区三区不卡在线| 国产日韩精品一区二区三区| 欧美第一区第二区| 日韩精品一区在线观看| 欧美少妇bbb| 欧美剧情电影在线观看完整版免费励志电影 | 7799精品视频| 欧美日韩不卡在线| 欧美精选午夜久久久乱码6080| 欧美视频在线一区| 欧美性xxxxx极品少妇| 在线观看亚洲a| 欧美日韩精品一区二区三区蜜桃 | 精品国产露脸精彩对白| 精品国产精品一区二区夜夜嗨| 欧美精品一区在线观看| 精品国产乱子伦一区| 国产亚洲一区二区三区在线观看| 久久免费午夜影院| 久久精品网站免费观看| 国产精品久久夜| 一区二区三区四区不卡在线 | 亚洲精品高清在线| 午夜成人在线视频| 蜜桃精品在线观看| 国产又粗又猛又爽又黄91精品| 国产成人精品aa毛片| 91视频在线观看免费| 欧美日韩一区 二区 三区 久久精品| 欧美顶级少妇做爰| 久久综合视频网| 国产亚洲欧美日韩在线一区| 亚洲精品高清在线| 一区二区三区四区激情| 色综合久久中文综合久久97| 91传媒视频在线播放| 欧美顶级少妇做爰| 久久久另类综合| 久久久www免费人成精品| 麻豆久久久久久| 美腿丝袜一区二区三区| 国产盗摄一区二区| 久久久久免费观看| 国产一区二区免费视频| 91毛片在线观看| 欧美一级日韩不卡播放免费| 国产精品私人自拍| 亚洲午夜激情网页| 国产91高潮流白浆在线麻豆| 日本精品裸体写真集在线观看| 日韩三级视频中文字幕| 国产偷v国产偷v亚洲高清| 亚洲欧美日韩国产综合| 亚洲成人av一区二区| 成人黄色一级视频| 欧美一区二区福利视频| 中文字幕一区二区在线播放| 国产欧美一区二区在线| 视频一区在线播放| 91污在线观看| 国产视频一区二区在线| 日本不卡不码高清免费观看| av成人老司机| 国产色婷婷亚洲99精品小说| 日韩精品福利网| 色婷婷综合久久| 久久久久久久久久电影| 成人中文字幕合集| 欧美一级日韩不卡播放免费| 五月天激情综合| 91麻豆6部合集magnet|