2011-01-09 14 views
5

Así que todo lo que necesito es simple: una lista de los dispositivos de captura de video actualmente disponibles (cámaras web). Lo necesito en la simple aplicación de consola C++ Qt. Por lista quiero decir algo como tales salida de la consola:Cómo obtener una lista de dispositivos de captura de video NOMBRES (cámaras web) usando Qt (plataforma cruzada)? (C++)

1) Asus Web Camera 
2) Sony Web Camera 

Así que mi pregunta es cómo cout dicha lista usando Qt C++? (Si es posible me gustaría ver cómo hacerlo en el más puro Qt - ninguna librería adicional ...)


también de esta serie:

+1

no creo que hay una manera de plataforma cruzada para hacerlo consigo mismo Qt4. Dado que la captura de video es un trabajo en progreso, probablemente tendrá que escribirlo usted mismo: http://doc.trolltech.com/4.7/phonon-overview.html#work-in-progress – Wolph

+0

@WoLpH: Si tiene razón es muy triste = ( – Rella

Respuesta

1

He escrito el siguiente código para enumerar todos los dispositivos de captura USB. Recuerde incluir webcam.h y libwebcam.h y vincular su código 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

Utilicé este código de ejemplo para enumerar las cámaras y obtener información sobre ellas.

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

recuerde incluir en el archivo de pro:

QT += multimedia 
Cuestiones relacionadas