<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • CSI攝像頭接口及在英創主板上的應用

     2017-10-19     作者:黃志超         
    文章標簽:C/C++ESM6800

      目前,英創公司在低成本核心板ESM6800的基礎上,推出了支持攝像頭的版本ESM6800V,ESM6800V是在ESM6800H的基礎上,去掉了一路網口和6路擴展串口,增加了一路CSI(COMS Sensor Interface)信號接口。ESM6800V的其它系統及接口配置與ESM6800完全相同。CSI是一個標準的視頻輸出接口,視頻處理芯片可以直接輸出,不需要涉及到USB接口攝像頭所需的視頻壓縮芯片以及USB接口芯片,所以較市面上普通的USB攝像頭來說,CSI接口的攝像頭更便宜,配合ESM6800V形成了一個低成本的圖像應用方案。


      ESM6800的內核版本為Linux-4.1.15,同時英創公司在ESM6800上移植了基于xcb(X11)平臺的Qt-5.8.0,關于Qt和X11的介紹,可以參考網站文章《ESM6802 X11桌面圖形系統簡介》。CSI攝像頭選用Omnivision公司130萬像素的ov9652(最高分辨率1280×1024)和500萬像素的ov5640(最高分辨率2560×1920),在ESM6800V的系統中已經集成了這兩款攝像頭的驅動,并且能夠自動識別并加載相應的驅動,加載驅動后會自動生成設備節點:“/dev/video0",應用程序可以操作該設備節點對攝像頭進行圖像的采集和控制。


      CSI攝像頭都是用了V4L2驅動提供的標準API來操作的。Video for Linux 2簡稱V4L2,是V4L的改進版。本例中采集的圖像分辨率為640×480,接下來就來介紹一下主要的操作,首先打開設備文件:

      int fd;

           fd=open("/dev/video0",O_RDWR);


      設置視頻的制式和幀格式,制式包括PAL,NTSC,幀的格式個包括寬度和高度等:

      /*set the form of camera capture data*/

      tv_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;      /*v4l2_buf_typea,camera must use V4L2_BUF_TYPE_VIDEO_CAPTURE*/

      tv_fmt.fmt.pix.width = 640;                                        /*設置圖形分辨率,水平:640 像素*/

      tv_fmt.fmt.pix.height = 480;                                       /*設置圖形分辨率,垂直:480 像素*/

      tv_fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;   /*V4L2_PIX_FMT_YYUV*/

      tv_fmt.fmt.pix.field = V4L2_FIELD_NONE;                  /*V4L2_FIELD_NONE*/

      if (ioctl(fd, VIDIOC_S_FMT, &tv_fmt)< 0)

      {

        fprintf(stderr,"VIDIOC_S_FMT set err\n");

        exit(-1);

        close(fd);

      }


      向驅動申請幀緩沖,一般不超過五個:

      struct v4l2_requestbuffers req;

      req.count=2;

      req.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

      req.memory=V4L2_MEMORY_MMAP;

      //申請幀緩沖

      ret=ioctl(fd,VIDIOC_REQBUFS,&req);

      if(ret<0)

      {

        printf("failture VIDIOC_REQBUFS\n");

        return -1;

      }


      將申請到的幀緩沖映射到用戶空間,這樣就能夠直接操作幀緩沖了:

      for (n_buffers = 0; n_buffers < req.count; ++n_buffers)

      {

        struct v4l2_buffer buf;

        memset(&buf,0,sizeof(buf));

        buf.type =V4L2_BUF_TYPE_VIDEO_CAPTURE;

        buf.memory =V4L2_MEMORY_MMAP;

        buf.index =n_buffers;

        // 查詢序號為n_buffers 的緩沖區,得到其起始物理地址和大小

        if (-1 == ioctl(fd, VIDIOC_QUERYBUF, &buf))

        {

          printf("failture VIDIOC_QUERYBUF\n");

          return -1;

        }

        buffers[n_buffers].length= buf.length;

        // 映射內存

        buffers[n_buffers].start=mmap (NULL,buf.length,PROT_READ | PROT_WRITE ,MAP_SHARED,fd, buf.m.offset);

        if (MAP_FAILED == buffers[n_buffers].start)

        {

          printf("failture mmap\n");

          return -1;

        }

      }


      開始視頻的采集:

      type =V4L2_BUF_TYPE_VIDEO_CAPTURE;

      ioctl (fd,VIDIOC_STREAMON, &type);


      struct v4l2_buffer camera_buf;

      CLEAR (camera_buf);

      camera_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

      camera_buf.memory = V4L2_MEMORY_MMAP;

      //取出一個緩沖幀

      i1 = ioctl (fd, VIDIOC_DQBUF, &usr_buf);

      if(i1<0)

      {

        printf("failture\n");

        return -1;

      }


      例程的效果如下:


    CSI攝像頭接口及在英創主板上的應用.gif


      所以通過這一套通用的V4L2接口來操作攝像頭的工作流程就能夠讀取攝像頭的數據了,基于CSI接口攝像頭,英創公司提供了一套完整的應用方案,有興趣的客戶請點擊下載:《ESM6800V支持CSI接口攝像頭》

    文章標簽:C/C++ESM6800
    精品国偷自产在线视频99| 日韩精品乱码AV一区二区| 亚洲精品理论电影在线观看| 亚洲欧洲精品无码AV| 久久97久久97精品免视看秋霞 | 99热这里只有精品6免费| 精品一区二区三区在线视频观看| 2021国产精品自产拍在线观看 | 青草国产精品视频。| 亚洲午夜国产精品无卡| 国产精品一区二区久久国产| 国产成人精品影院狼色在线| 国产成人精品免费视| 国产精品丝袜黑色高跟鞋| 中日韩精品视频在线观看| 亚洲日韩精品国产一区二区三区| 无码精品A∨在线观看| 精品亚洲一区二区三区在线播放| 国产精品黄页在线播放免费| 四虎精品视频在线永久免费观看| 国产精品久久久久国产A级| 亚洲精品无码成人片在线观看| 久久精品国产亚洲av品善| 久久精品www人人爽人人 | 情侣视频精品免费的国产| 97精品久久天干天天天按摩| 99热这里只/这里有精品| 国产精品亚洲片在线观看不卡 | 老司机亚洲精品影视www| 国产精品国产色综合色| 国产精品爽黄69天堂a片| 精品国产午夜理论片不卡| 久久夜色精品国产噜噜亚洲AV | 亚洲精品第一国产综合精品| 亚洲AV永久青草无码精品| a级亚洲片精品久久久久久久| 国产成人精品久久一区二区三区av| 精品国产AV无码一区二区三区| 国产成人精品手机在线观看| 91麻豆国产福利精品| 精品一区二区三区色花堂|