2

接続されたビデオ デバイスが提供できる最大解像度を検出するにはどうすればよいですか?

何もキャプチャしたくありません。v4l2 からこの情報を取得するだけです。

ありがとう!

4

1 に答える 1

8

VIDIOC_ENUM_FRAMESIZESioctlを使用します。

    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_FRAMESIZESlinux-2.6.29 で導入されました

于 2013-03-28T13:26:06.363 に答える