2011-01-09 75 views
5

所以我需要的只是簡單 - 一個當前可用視頻捕捉設備(網絡攝像頭)的列表。我需要它在簡單的C++ Qt控制檯應用程序中。通過列表我的意思是像這樣的控制檯輸出:如何使用Qt(跨平臺)獲取列表視頻捕獲設備名稱(網絡攝像頭)? (C++)

1) Asus Web Camera 
2) Sony Web Camera 

所以我的問題是如何使用Qt C++來清點該名單? (如果可能的話我很想看看如何做到這一點的純Qt的 - 沒有多餘的庫...)


也從這個系列:

+1

我不認爲這是一個跨平臺的方式與自己的Qt4做到這一點。由於視頻捕獲是一項正在進行的工作,因此您可能必須親自編寫它:http://doc.trolltech.com/4.7/phonon-overview.html#work-in-progress – Wolph 2011-01-09 05:21:08

回答

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; 
} 
0

我用這個示例代碼來列出攝像頭並獲取關於它們的一些信息。

#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(); 
} 

記得在Pro文件,包括:

QT += multimedia 
相關問題