2013-03-12 171 views

回答

5

使用VIDIOC_ENUM_FRAMESIZES IOCTL:

enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 
    struct v4l2_fmtdesc fmt; 
    struct v4l2_frmsizeenum frmsize; 
    struct v4l2_frmivalenum frmival; 

    fmt.index = 0; 
    fmt.type = type; 
    while (ioctl(fd, VIDIOC_ENUM_FMT, &fmt) >= 0) { 
     frmsize.pixel_format = fmt.pixelformat; 
     frmsize.index = 0; 
     while (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0) { 
      if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) { 
       printf("%dx%d\n", 
            frmsize.discrete.width, 
            frmsize.discrete.height); 
      } else if (frmsize.type == V4L2_FRMSIZE_TYPE_STEPWISE) { 
       printf("%dx%d\n", 
            frmsize.stepwise.max_width, 
            frmsize.stepwise.max_height); 
      } 
       frmsize.index++; 
      } 
      fmt.index++; 
    } 

据我所知,VIDIOC_ENUM_FRAMESIZES在linux-2.6.29

介绍