查询相机所有参数的通用程序

发布于:2025-02-15 ⋅ 阅读:(16) ⋅ 点赞:(0)
#include <iostream>
#include <fcntl.h>       // open
#include <unistd.h>      // close
#include <sys/ioctl.h>   // ioctl
#include <linux/videodev2.h>
#include<string.h>

void printCapabilities(const struct v4l2_capability &cap) {
    std::cout << "Driver Name: " << cap.driver << "\n"
              << "Card Type: " << cap.card << "\n"
              << "Bus Info: " << cap.bus_info << "\n"
              << "Version: " << (cap.version >> 16) << "." << ((cap.version >> 8) & 0xFF) << "." << (cap.version & 0xFF) << "\n"
              << "Capabilities: " << std::hex << cap.capabilities << std::dec << "\n";
}

void enumerateFormats(int fd) {
    struct v4l2_fmtdesc fmt;
    fmt.index = 0;
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    while (ioctl(fd, VIDIOC_ENUM_FMT, &fmt) == 0) {
        std::cout << "Pixel Format: " << (char)(fmt.pixelformat & 0xff)
                  << (char)((fmt.pixelformat >> 8) & 0xff)
                  << (char)((fmt.pixelformat >> 16) & 0xff)
                  << (char)((fmt.pixelformat >> 24) & 0xff)
                  << " Description: " << fmt.description << std::endl;

        struct v4l2_frmsizeenum frmsize;
        memset(&frmsize, 0, sizeof(frmsize));
        frmsize.pixel_format = fmt.pixelformat;
        for (frmsize.index = 0; ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) == 0; frmsize.index++) {
            if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) {
                std::cout << "  Resolution: " << frmsize.discrete.width << "x" << frmsize.discrete.height << std::endl;
            }
        }
        fmt.index++;
    }
}

void enumerateControls(int fd) {
    struct v4l2_queryctrl queryctrl;
    memset(&queryctrl, 0, sizeof(queryctrl));
    queryctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
    while (ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl) == 0) {
        if (!(queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)) {
            std::cout << "Control ID: " << queryctrl.id << "\n"
                      << "Name: " << queryctrl.name << "\n"
                      << "Minimum Value: " << queryctrl.minimum << "\n"
                      << "Maximum Value: " << queryctrl.maximum << "\n"
                      << "Default Value: " << queryctrl.default_value << "\n"
                      << "Step: " << queryctrl.step << "\n"
                      << "Type: " << queryctrl.type << "\n\n";
        }
        queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
    }
}

int main() {
    const char* devicePath = "/dev/video0";
    int fd = open(devicePath, O_RDWR);
    if (fd == -1) {
        perror("Error opening video device");
        return EXIT_FAILURE;
    }

    struct v4l2_capability cap;
    if (-1 == ioctl(fd, VIDIOC_QUERYCAP, &cap)) {
        perror("Error querying capabilities");
        close(fd);
        return EXIT_FAILURE;
    }

    printCapabilities(cap);

    std::cout << "Supported formats and resolutions:\n";
    enumerateFormats(fd);

    std::cout << "Device controls:\n";
    enumerateControls(fd);

    close(fd);
    return EXIT_SUCCESS;
}

运行效果

allwinner R528 上

 ./query_camera_allinfo
Driver name: uvcvideo
Card type: HS Camera: HS Camera
Bus info: usb-sunxi-ehci-1
Version: 5.4.61
Capabilities: 84a00001
Device supports video capture.
Pixel Format: 1196444237 Description: Motion-JPEG
mbtc@TinaLinux:/overlay/work# ./query_camera_info
Driver Name: uvcvideo
Card Type: HS Camera: HS Camera
Bus Info: usb-sunxi-ehci-1
Version: 5.4.61
Capabilities: 84a00001
Supported formats and resolutions:
Pixel Format: MJPG Description: Motion-JPEG
  Resolution: 4032x3024
  Resolution: 4032x32
  Resolution: 1080x1440
Device controls:
Control ID: 9963776
Name: Brightness
Minimum Value: 0
Maximum Value: 64
Default Value: 15
Step: 1
Type: 1

Control ID: 9963777
Name: Contrast
Minimum Value: 1
Maximum Value: 64
Default Value: 32
Step: 1
Type: 1

Control ID: 9963778
Name: Saturation
Minimum Value: 1
Maximum Value: 64
Default Value: 32
Step: 1
Type: 1

Control ID: 9963779
Name: Hue
Minimum Value: 1
Maximum Value: 64
Default Value: 32
Step: 1
Type: 1

Control ID: 9963788
Name: White Balance Temperature, Auto
Minimum Value: 0
Maximum Value: 1
Default Value: 0
Step: 1
Type: 2

Control ID: 9963792
Name: Gamma
Minimum Value: 0
Maximum Value: 64
Default Value: 32
Step: 1
Type: 1

Control ID: 9963795
Name: Gain
Minimum Value: 0
Maximum Value: 15
Default Value: 0
Step: 1
Type: 1

Control ID: 9963800
Name: Power Line Frequency
Minimum Value: 0
Maximum Value: 2
Default Value: 1
Step: 1
Type: 3

Control ID: 9963802
Name: White Balance Temperature
Minimum Value: 2800
Maximum Value: 6800
Default Value: 5500
Step: 1
Type: 1

Control ID: 9963803
Name: Sharpness
Minimum Value: 1
Maximum Value: 64
Default Value: 32
Step: 1
Type: 1

Control ID: 9963804
Name: Backlight Compensation
Minimum Value: 0
Maximum Value: 15
Default Value: 0
Step: 1
Type: 1

Control ID: 10094849
Name: Exposure, Auto
Minimum Value: 0
Maximum Value: 3
Default Value: 1
Step: 1
Type: 3

Control ID: 10094850
Name: Exposure (Absolute)
Minimum Value: 1
Maximum Value: 5000
Default Value: 625
Step: 1
Type: 1

Control ID: 10094856
Name: Pan (Absolute)
Minimum Value: -576000
Maximum Value: 576000
Default Value: 0
Step: 3600
Type: 1

Control ID: 10094857
Name: Tilt (Absolute)
Minimum Value: -576000
Maximum Value: 576000
Default Value: 0
Step: 3600
Type: 1

Control ID: 10094861
Name: Zoom, Absolute
Minimum Value: 0
Maximum Value: 100
Default Value: 0
Step: 1
Type: 1

Control ID: 10094863
Name: Zoom, Continuous
Minimum Value: 0
Maximum Value: 0
Default Value: 0
Step: 0
Type: 1

树莓派3b+imx219相机查询结果

./query_camera_allinfo
Driver Name: bcm2835 mmal
Card Type: mmal service 16.1
Bus Info: platform:bcm2835_v4l2-0
Version: 6.6.74
Capabilities: 85200005
Supported formats and resolutions:
Pixel Format: YU12 Description: Planar YUV 4:2:0
Pixel Format: YUYV Description: YUYV 4:2:2
Pixel Format: RGB3 Description: 24-bit RGB 8-8-8
Pixel Format: JPEG Description: JFIF JPEG
Pixel Format: H264 Description: H.264
Pixel Format: MJPG Description: Motion-JPEG
Pixel Format: YVYU Description: YVYU 4:2:2
Pixel Format: VYUY Description: VYUY 4:2:2
Pixel Format: UYVY Description: UYVY 4:2:2
Pixel Format: NV12 Description: Y/UV 4:2:0
Pixel Format: BGR3 Description: 24-bit BGR 8-8-8
Pixel Format: YV12 Description: Planar YVU 4:2:0
Pixel Format: NV21 Description: Y/VU 4:2:0
Pixel Format: RX24 Description: 32-bit XBGR 8-8-8-8
Device controls:
Control ID: 9961473
Name: User Controls
Minimum Value: 0
Maximum Value: 0
Default Value: 0
Step: 0
Type: 6

Control ID: 9963776
Name: Brightness
Minimum Value: 0
Maximum Value: 100
Default Value: 50
Step: 1
Type: 1

Control ID: 9963777
Name: Contrast
Minimum Value: -100
Maximum Value: 100
Default Value: 0
Step: 1
Type: 1

Control ID: 9963778
Name: Saturation
Minimum Value: -100
Maximum Value: 100
Default Value: 0
Step: 1
Type: 1

Control ID: 9963790
Name: Red Balance
Minimum Value: 1
Maximum Value: 7999
Default Value: 1000
Step: 1
Type: 1

Control ID: 9963791
Name: Blue Balance
Minimum Value: 1
Maximum Value: 7999
Default Value: 1000
Step: 1
Type: 1

Control ID: 9963796
Name: Horizontal Flip
Minimum Value: 0
Maximum Value: 1
Default Value: 0
Step: 1
Type: 2

Control ID: 9963797
Name: Vertical Flip
Minimum Value: 0
Maximum Value: 1
Default Value: 0
Step: 1
Type: 2

Control ID: 9963800
Name: Power Line Frequency
Minimum Value: 0
Maximum Value: 3
Default Value: 1
Step: 1
Type: 3

Control ID: 9963803
Name: Sharpness
Minimum Value: -100
Maximum Value: 100
Default Value: 0
Step: 1
Type: 1

Control ID: 9963807
Name: Color Effects
Minimum Value: 0
Maximum Value: 15
Default Value: 0
Step: 1
Type: 3

Control ID: 9963810
Name: Rotate
Minimum Value: 0
Maximum Value: 360
Default Value: 0
Step: 90
Type: 1

Control ID: 9963818
Name: Color Effects, CbCr
Minimum Value: 0
Maximum Value: 65535
Default Value: 32896
Step: 1
Type: 1

Control ID: 10027009
Name: Codec Controls
Minimum Value: 0
Maximum Value: 0
Default Value: 0
Step: 0
Type: 6

Control ID: 10029518
Name: Video Bitrate Mode
Minimum Value: 0
Maximum Value: 1
Default Value: 0
Step: 1
Type: 3

Control ID: 10029519
Name: Video Bitrate
Minimum Value: 25000
Maximum Value: 25000000
Default Value: 10000000
Step: 25000
Type: 1

Control ID: 10029538
Name: Repeat Sequence Header
Minimum Value: 0
Maximum Value: 1
Default Value: 0
Step: 1
Type: 2

Control ID: 10029541
Name: Force Key Frame
Minimum Value: 0
Maximum Value: 0
Default Value: 0
Step: 0
Type: 4

Control ID: 10029665
Name: H264 Minimum QP Value
Minimum Value: 0
Maximum Value: 51
Default Value: 0
Step: 1
Type: 1

Control ID: 10029666
Name: H264 Maximum QP Value
Minimum Value: 0
Maximum Value: 51
Default Value: 0
Step: 1
Type: 1

Control ID: 10029670
Name: H264 I-Frame Period
Minimum Value: 0
Maximum Value: 2147483647
Default Value: 60
Step: 1
Type: 1

Control ID: 10029671
Name: H264 Level
Minimum Value: 0
Maximum Value: 13
Default Value: 11
Step: 1
Type: 3

Control ID: 10029675
Name: H264 Profile
Minimum Value: 0
Maximum Value: 4
Default Value: 4
Step: 1
Type: 3

Control ID: 10092545
Name: Camera Controls
Minimum Value: 0
Maximum Value: 0
Default Value: 0
Step: 0
Type: 6

Control ID: 10094849
Name: Auto Exposure
Minimum Value: 0
Maximum Value: 3
Default Value: 0
Step: 1
Type: 3

Control ID: 10094850
Name: Exposure Time, Absolute
Minimum Value: 1
Maximum Value: 10000
Default Value: 1000
Step: 1
Type: 1

Control ID: 10094851
Name: Exposure, Dynamic Framerate
Minimum Value: 0
Maximum Value: 1
Default Value: 0
Step: 1
Type: 2

Control ID: 10094867
Name: Auto Exposure, Bias
Minimum Value: 0
Maximum Value: 24
Default Value: 12
Step: 1
Type: 9

Control ID: 10094868
Name: White Balance, Auto & Preset
Minimum Value: 0
Maximum Value: 10
Default Value: 1
Step: 1
Type: 3

Control ID: 10094870
Name: Image Stabilization
Minimum Value: 0
Maximum Value: 1
Default Value: 0
Step: 1
Type: 2

Control ID: 10094871
Name: ISO Sensitivity
Minimum Value: 0
Maximum Value: 4
Default Value: 0
Step: 1
Type: 9

Control ID: 10094872
Name: ISO Sensitivity, Auto
Minimum Value: 0
Maximum Value: 1
Default Value: 1
Step: 1
Type: 3

Control ID: 10094873
Name: Exposure, Metering Mode
Minimum Value: 0
Maximum Value: 3
Default Value: 0
Step: 1
Type: 3

Control ID: 10094874
Name: Scene Mode
Minimum Value: 0
Maximum Value: 13
Default Value: 0
Step: 1
Type: 3

Control ID: 10289153
Name: JPEG Compression Controls
Minimum Value: 0
Maximum Value: 0
Default Value: 0
Step: 0
Type: 6

Control ID: 10291459
Name: Compression Quality
Minimum Value: 1
Maximum Value: 100
Default Value: 30
Step: 1
Type: 1