Advertisement
Guest User

Untitled

a guest
Aug 17th, 2015
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.11 KB | None | 0 0
  1. #include <fcntl.h>
  2. #include <sys/ioctl.h>
  3. #include <linux/videodev2.h>
  4. #include <iostream>
  5. #include <string.h>
  6. #include <errno.h>
  7.  
  8. char v4l_output_dev[100] = "/dev/video0";
  9. int fd_output_v4l = 0;
  10. int g_output = 1;
  11. int g_fmt = V4L2_PIX_FMT_UYVY;
  12. int g_frame_size = 0;
  13. int g_output_num_buffers = 1;
  14.  
  15.  
  16. using namespace std;
  17.  
  18. int main() {
  19.  
  20.     if ((fd_output_v4l = open(v4l_output_dev, O_RDWR, 0)) < 0)
  21.     {
  22.         cout << "Unable to open " << v4l_output_dev << ": " << strerror(errno) << endl;
  23.         return -1;
  24.     }
  25.  
  26.     struct v4l2_control ctrl;
  27.     struct v4l2_format fmt;
  28.     struct v4l2_framebuffer fb;
  29.     struct v4l2_cropcap cropcap;
  30.     struct v4l2_crop crop;
  31.     struct v4l2_requestbuffers buf_req;
  32.  
  33.     if (ioctl(fd_output_v4l, VIDIOC_S_OUTPUT, &g_output) < 0)
  34.     {
  35.             cout << "set output failed: " << strerror(errno) << endl;
  36.             return -1;
  37.     }
  38.  
  39.     memset(&cropcap, 0, sizeof(cropcap));
  40.     cropcap.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
  41.  
  42.     if (ioctl(fd_output_v4l, VIDIOC_CROPCAP, &cropcap) < 0)
  43.     {
  44.             cout << "get crop capability failed: " << strerror(errno) << endl;
  45.             return -1;
  46.     }
  47.  
  48.     crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
  49.     crop.c.top = 0;
  50.     crop.c.left = 0;
  51.     crop.c.width = 800;
  52.     crop.c.height = 480;
  53.  
  54.     if (ioctl(fd_output_v4l, VIDIOC_S_CROP, &crop) < 0)
  55.     {
  56.             cout << "set crop failed: " << strerror(errno) << endl;
  57.             return -1;
  58.     }
  59.  
  60.     ctrl.id = V4L2_CID_PRIVATE_BASE;
  61.     ctrl.value = 0;
  62.  
  63.     if (ioctl(fd_output_v4l, VIDIOC_S_CTRL, &ctrl) < 0)
  64.     {
  65.         cout << "set ctrl failed: " << strerror(errno) << endl;
  66.         return -1;
  67.     }
  68.  
  69.     ctrl.id = V4L2_CID_PRIVATE_BASE + 3;
  70.     ctrl.value = 0;
  71.  
  72.     if (ioctl(fd_output_v4l, VIDIOC_S_CTRL, &ctrl) < 0)
  73.     {
  74.         cout << "set ctrl failed: " << strerror(errno) << endl;
  75.         return -1;
  76.     }
  77.  
  78.     fb.flags = V4L2_FBUF_FLAG_OVERLAY;
  79.     ioctl(fd_output_v4l, VIDIOC_S_FBUF, &fb);
  80.  
  81.     memset(&fmt, 0, sizeof(fmt));
  82.     fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
  83.     fmt.fmt.pix.width= 800;
  84.     fmt.fmt.pix.height= 480;
  85.     fmt.fmt.pix.pixelformat = g_fmt;
  86.     fmt.fmt.pix.bytesperline = 480;
  87.     fmt.fmt.pix.priv = 0;
  88.     fmt.fmt.pix.sizeimage = 0;
  89.  
  90.     //if (g_tb)
  91.         fmt.fmt.pix.field = V4L2_FIELD_INTERLACED_TB;
  92.     //else fmt.fmt.pix.field = V4L2_FIELD_INTERLACED_BT;
  93.  
  94.     if (ioctl(fd_output_v4l, VIDIOC_S_FMT, &fmt) < 0)
  95.     {
  96.         cout << "set format failed: " << strerror(errno) << endl;
  97.         return -1;
  98.     }
  99.  
  100.     if (ioctl(fd_output_v4l, VIDIOC_G_FMT, &fmt) < 0)
  101.     {
  102.         cout << "get format failed: " << strerror(errno) << endl;
  103.         return -1;
  104.     }
  105.  
  106.     g_frame_size = fmt.fmt.pix.sizeimage;
  107.  
  108.     memset(&buf_req, 0, sizeof(buf_req));
  109.     buf_req.count = g_output_num_buffers;
  110.     buf_req.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
  111.     buf_req.memory = V4L2_MEMORY_MMAP;
  112.  
  113.     if (ioctl(fd_output_v4l, VIDIOC_REQBUFS, &buf_req) < 0)
  114.     {
  115.         cout << "request buffers failed: " << strerror(errno) << endl;
  116.         return -1;
  117.     }
  118.  
  119.     //close(fd_output_v4l);
  120.  
  121.     return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement