<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
    91精品国产福利尤物| 久久精品卫校国产小美女| 久热爱精品视频在线| 人妻少妇精品一区二区三区| 欧洲国产成人精品91铁牛tv| 日本内射精品一区二区视频 | 精品国产福利片在线观看| 国产精品自产拍在线18禁| AAA级久久久精品无码片| 国产精品186在线观看在线播放| 国产成人精品无码专区| 亚洲精品乱码久久久久久下载| 99久久精品国产高清一区二区| 高清国产精品久久| 久久精品国产亚洲av麻豆图片 | 高清国产精品久久| 91精品国产自产在线老师啪| 国产精品无码一区二区三级| 亚洲国产婷婷综合在线精品| 国产精品99久久久久久| 国产成人精品免费视频动漫| 亚洲国产另类久久久精品| 精品免费久久久久国产一区| 国内精品一区二区三区最新| 国产精品久久久天天影视| 一区二区三区日韩精品| 久久国产免费观看精品| 国产亚洲精品无码专区| 亚洲午夜福利精品无码| 精品无码黑人又粗又大又长| 国产乱码精品一区二区三区麻豆| 国产69精品久久久久777| 久久99国产乱子伦精品免费| 久久国产精品只做精品| 国产精品亲子乱子伦xxxx裸| 91精品视频网站| aaaaaa精品视频在线观看 | 精品人妻V?出轨中文字幕| 亚洲国产精品综合久久网络| 日韩精品无码永久免费网站| 国产精品国语对白露脸在线播放 |