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

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

?? v4l2video.c

?? 網(wǎng)上大多數(shù)linux/unix視頻采集程序都是基于video4linux的.而基于V4L2的程序比較少. 本人自己寫的基于video4linux2(V4L2)的視頻采集程序.已經(jīng)測(cè)試成功.編譯請(qǐng)用G
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*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;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区二区三区久久久蜜月| 亚洲高清免费一级二级三级| 男女男精品视频| 欧美日韩国产天堂| 午夜激情综合网| 7777精品伊人久久久大香线蕉 | 欧美巨大另类极品videosbest | 色先锋aa成人| 亚洲一区二区三区小说| 欧美日韩和欧美的一区二区| 国产精品123区| 玉米视频成人免费看| 欧美日韩中字一区| 热久久免费视频| 亚洲欧美日韩综合aⅴ视频| 欧美天天综合网| 美女视频黄 久久| 国产精品理论片| 欧美丝袜自拍制服另类| 成人精品电影在线观看| 亚洲一区在线电影| 亚洲欧洲精品一区二区三区不卡| 欧美性色aⅴ视频一区日韩精品| 国产成人久久精品77777最新版本| 日韩高清一区二区| 中文一区二区完整视频在线观看| 色悠久久久久综合欧美99| 国产风韵犹存在线视精品| 久久99久久99| 亚洲欧洲精品天堂一级| 国产精品妹子av| 欧美一区二区精品| 国产不卡视频一区| 亚洲国产你懂的| 亚洲综合久久av| 亚洲欧美另类图片小说| 国产精品高潮呻吟| 国产精品成人网| 一区在线观看免费| 国产精品国模大尺度视频| 国产精品女主播av| 一色屋精品亚洲香蕉网站| 亚洲欧洲日产国产综合网| 国产精品网站一区| ...av二区三区久久精品| 亚洲欧洲无码一区二区三区| 国产精品久久99| 亚洲免费成人av| 亚洲午夜免费电影| 午夜精品一区二区三区电影天堂 | 91精品欧美久久久久久动漫| 欧美人xxxx| 日韩午夜在线影院| 欧美性感一类影片在线播放| 色乱码一区二区三区88| 国产成人精品免费网站| 国产1区2区3区精品美女| 成人18视频在线播放| 91麻豆国产福利精品| 国产精品性做久久久久久| 日本欧美在线观看| 狠狠色狠狠色综合| 免费人成在线不卡| 国产精品一线二线三线精华| 高清不卡一区二区| 在线一区二区视频| 欧美一区二区三区成人| 久久久久久99精品| 久久网站热最新地址| 欧美不卡一区二区| 欧美成人猛片aaaaaaa| 欧美国产日韩精品免费观看| 亚洲视频 欧洲视频| 国产精品无遮挡| 亚洲一区二区三区在线看| 美洲天堂一区二卡三卡四卡视频| 国产激情视频一区二区在线观看| 99久久国产综合精品色伊 | 成人一区二区三区在线观看| 国产一区二区精品在线观看| 久久99精品一区二区三区| 成人黄色小视频| 在线不卡免费欧美| 欧美激情在线观看视频免费| 亚洲午夜视频在线| 国产成人免费xxxxxxxx| 欧美日韩一区二区三区高清| 久久久综合精品| 一区二区三区不卡视频在线观看| 亚洲视频1区2区| 玖玖九九国产精品| 国产激情精品久久久第一区二区| 91久久香蕉国产日韩欧美9色| 日韩欧美国产系列| 日韩欧美国产高清| 自拍偷拍欧美激情| 久久99久久99| 91福利资源站| 久久精品一区二区三区四区 | 亚洲一区二区欧美| 国产乱码精品一区二区三| 欧美日韩一区二区三区四区五区| 欧美精品一区二区久久婷婷| 亚洲综合色在线| 北岛玲一区二区三区四区| 色综合中文字幕国产 | 亚洲视频免费观看| 国产精品88888| 日韩一区二区精品葵司在线| 亚洲欧美aⅴ...| 懂色av一区二区三区蜜臀| 欧美精品自拍偷拍| 亚洲欧美日韩人成在线播放| 国产盗摄一区二区| 日韩欧美精品三级| 午夜在线电影亚洲一区| 狠狠色综合播放一区二区| 国产精品―色哟哟| 激情小说欧美图片| 欧美福利视频导航| 亚洲一区二区美女| 91亚洲永久精品| 中文字幕欧美日本乱码一线二线| 久久国产乱子精品免费女| 欧美性猛交xxxx黑人交| 一区二区三区资源| 91在线视频官网| 亚洲欧美中日韩| 成人激情综合网站| 国产精品高清亚洲| 岛国精品在线播放| 国产日韩精品久久久| 亚洲成人自拍一区| 欧美亚洲国产一区在线观看网站| 亚洲激情五月婷婷| 日本高清成人免费播放| 亚洲精品成人a在线观看| 91啦中文在线观看| 亚洲精品中文在线观看| 色综合色综合色综合| 亚洲欧美综合另类在线卡通| av在线免费不卡| 亚洲色欲色欲www| 色婷婷综合久色| 一区二区三区在线免费视频| 色婷婷久久久亚洲一区二区三区| 亚洲欧美电影一区二区| 色吊一区二区三区| 午夜激情综合网| 欧美大片免费久久精品三p| 激情偷乱视频一区二区三区| 久久久精品欧美丰满| 成人av午夜影院| 夜夜亚洲天天久久| 欧美放荡的少妇| 麻豆久久一区二区| 国产欧美日韩精品a在线观看| 粉嫩嫩av羞羞动漫久久久| 国产精品传媒入口麻豆| 91激情五月电影| 蜜桃在线一区二区三区| 久久综合五月天婷婷伊人| 成人国产精品免费观看动漫| 亚洲精品一二三四区| 欧美精三区欧美精三区| 国产在线精品一区二区| 国产精品伦一区二区三级视频| 色综合久久久网| 性欧美疯狂xxxxbbbb| 精品国产一区二区三区四区四| 国产成人在线免费| 一区二区三区蜜桃网| 日韩欧美成人一区二区| 懂色av中文字幕一区二区三区| 一区二区三区四区精品在线视频| 在线播放91灌醉迷j高跟美女 | 国产日韩欧美激情| 日本韩国精品一区二区在线观看| 久久精品久久综合| 国产精品美女一区二区三区| 欧美日韩一区二区在线观看视频| 国产麻豆精品一区二区| 一区二区三区精品视频在线| 精品美女在线播放| 99re热这里只有精品免费视频| 日本不卡不码高清免费观看| 国产精品久久久久永久免费观看 | 91精品国产色综合久久久蜜香臀| 国产高清精品久久久久| 亚洲国产三级在线| 国产亚洲精品中文字幕| 欧美日本韩国一区二区三区视频| 国产乱对白刺激视频不卡| 亚洲图片一区二区| 国产精品色婷婷| 欧美va亚洲va| 欧美日韩免费在线视频| jizz一区二区| 国内精品嫩模私拍在线| 亚洲一二三四区不卡|