2011-01-09 7 views
5

Quindi tutto ciò di cui ho bisogno è semplice: un elenco di dispositivi di acquisizione video attualmente disponibili (webcam). Ne ho bisogno nella semplice app console C++ Qt. Con la lista intendo qualcosa di simile come output della console:Come ottenere un elenco di dispositivi di acquisizione video NAMES (webcam) utilizzando Qt (crossplatform)? (C++)

1) Asus Web Camera 
2) Sony Web Camera 

Quindi la mia domanda è come a cout tale elenco utilizzando Qt C++? (Se è possibile mi piacerebbe vedere come si fa in puro Qt - senza librerie in più ...)


anche da questa serie:

+1

Non credo ci sia un modo cross-platform di farlo con Qt4 sé. Dal momento che l'acquisizione di video è in corso, probabilmente dovrai scrivere tu stesso: http://doc.trolltech.com/4.7/phonon-overview.html#work-in-progress – Wolph

+0

@WoLpH: Se sei corretto è molto triste = ( – Rella

risposta

1

Ho scritto il seguente codice per elencare tutti i dispositivi di acquisizione USB. Ricordati di includere webcam.h e libwebcam.h e collegare il tuo codice a libwecam usando -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

Ho utilizzato questo codice di esempio per elencare le telecamere e ottenere informazioni su di esse.

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

ricordarsi di includere nel file di pro:

QT += multimedia