如何使用Qt(跨平台)获取列表视频捕获设备NAMES(网络摄像头)? (C ++)

时间:2011-01-09 03:52:23

标签: c++ qt cross-platform webcam device

所以我需要的只是简单 - 目前可用的视频捕获设备(网络摄像头)列表。我需要在简单的C ++ Qt控制台应用程序中。按列表我的意思是像这样的控制台输出:

1) Asus Web Camera
2) Sony Web Camera

所以我的问题是如何使用Qt C ++来表达这样的列表? (如果可能的话,我很想看到如何在纯Qt中做到这一点 - 没有额外的库...)


也来自这个系列:

2 个答案:

答案 0 :(得分:1)

我已经编写了以下代码来列出所有USB捕获设备。请记住包含webcam.h和libwebcam.h,并使用-lwebcam将您的代码链接到libwecam。

bool QextCamera::listAvailableDevices(QStringList * captureDeviceList){
    CResult ret;
    CDevice *devices = NULL;

    quint32 req_size = 0;
    quint32 buffer_size = 0;
    quint32 count = 0;
    QStringList availableDevices;

    c_init();

    do {
        if (devices){
        free(devices);
    }

    if(req_size){
        devices = (CDevice *)malloc(req_size);

        if(devices == NULL){
                // LOG ERROR...
        return false;
        }

        buffer_size = req_size;
   }

   // Try to enumerate. If the buffer is not large enough, the required size is returned.
   ret = c_enum_devices(devices, &req_size, &count);

   if(ret != C_SUCCESS && ret != C_BUFFER_TOO_SMALL){
       // LOG ERROR...
       return false;
   }

    } while(buffer_size < req_size);

    if(count == 0) {
        // LOG ERROR...
    return false;
    }

    for(quint32 i = 0; i < count; i++) {
        CDevice *device = &devices[i];
    availableDevices << QString("%1 : %2 : %3").arg(device->shortName).arg(device->driver).arg(device->location);
    }

    if(devices){
        free(devices);
    }

    c_cleanup();

    *captureDeviceList = availableDevices;

    return true;
}

答案 1 :(得分:1)

我使用此示例代码列出相机并获取有关它们的一些信息。

#include <QtMultimedia/QCameraInfo>

QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
foreach (const QCameraInfo &cameraInfo, cameras) {
    qDebug() << "Name: " << cameraInfo.deviceName();
    qDebug() << "Position: " << cameraInfo.position();
    qDebug() << "Orientation: " << cameraInfo.orientation();
}

请记住包含在专业档案中:

QT += multimedia