<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
    国产亚洲精品bv在线观看| 久久夜色精品国产噜噜麻豆| 精品亚洲AV无码一区二区三区| 2021国产精品久久精品| 国产精品久久久久久久久99热 | 十八18禁国产精品www| 亚洲首页国产精品丝袜| 久久久亚洲精品无码| 亚洲精品无码久久久久牙蜜区| 午夜精品久久久久久久无码| 无码精品人妻一区二区三区漫画 | 国产精品酒店视频免费看| 自拍偷自拍亚洲精品被多人伦好爽| 69p69国产精品| 国产精品尹人在线观看| 在线观看日韩精品| 久久这里只有精品66| 国产精品亚洲片在线花蝴蝶| 国产v精品成人免费视频400条| 国产亚洲精品自在线观看| 亚洲精品无码久久久久久| 91精品啪在线观看国产电影| 国产小呦泬泬99精品| 亚洲午夜精品一级在线播放放| 久久精品国产四虎| 99精品国产综合久久久久五月天 | 成人精品视频一区二区三区尤物| 亚洲精品国产成人中文| 色欲久久久天天天综合网精品| 国内精品免费视频精选在线观看| 国产精品自在线天天看片| 精品日韩一区二区三区视频| 久久精品亚洲精品国产色婷 | 久久这里只精品国产免费10| 久久99国产精品一区二区| 国产亚洲精品成人AA片新蒲金| 无码专区国产精品视频| 亚洲婷婷第一狠人综合精品| 亚洲国产成人精品无码一区二区| 中文字幕亚洲综合精品一区| 日韩精品免费一级视频|