2011-01-09 19 views
5

Vì vậy, tất cả những gì tôi cần là đơn giản - một danh sách các thiết bị quay video hiện có (máy ảnh web). Tôi cần nó trong ứng dụng giao diện điều khiển C++ Qt đơn giản. Theo danh sách, tôi có nghĩa là một cái gì đó như đầu ra giao diện điều khiển như vậy:Làm cách nào để có được danh sách các thiết bị quay video NAMES (máy ảnh web) sử dụng Qt (crossplatform)? (C++)

1) Asus Web Camera 
2) Sony Web Camera 

Vì vậy, câu hỏi của tôi là làm thế nào để cout danh sách đó bằng cách sử dụng Qt C++? (Nếu có thể tôi rất muốn xem làm thế nào để làm điều đó trong tinh khiết Qt - không phải trả thêm libs ...)


cũng từ loạt bài này:

+1

Tôi không nghĩ rằng có một cách nền tảng để làm điều đó với Qt4 riêng của mình. Vì việc quay video là một công việc đang diễn ra, có thể bạn sẽ phải tự viết nó: http://doc.trolltech.com/4.7/phonon-overview.html#work-in-progress – Wolph

+0

@WoLpH: Nếu bạn đúng nó rất buồn = ( – Rella

Trả lời

1

Tôi đã viết mã sau để liệt kê tất cả các thiết bị chụp USB. Hãy nhớ bao gồm webcam.h và libwebcam.h và liên kết mã của bạn với libwecam bằng cách sử dụng -lwebcam.

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

Tôi đã sử dụng mã ví dụ này để liệt kê máy ảnh và nhận một số thông tin về chúng.

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

nhớ để đưa vào tập tin pro:

QT += multimedia 
Các vấn đề liên quan