Modèle testé : ELP 5MP 2592x1944 Aptina MI5100 uvc caméra Webcam USB www.amazon.fr
Caractéristiques :
Détection sous Linux :
$ dmesg
...
[453794.929614] usb 1-5.4.2: new high-speed USB device number 70 using xhci_hcd
[453795.055377] usb 1-5.4.2: New USB device found, idVendor=05a3, idProduct=9530
[453795.055378] usb 1-5.4.2: New USB device strings: Mfr=2, Product=1, SerialNumber=3
[453795.055379] usb 1-5.4.2: Product: USB 2.0 Camera
[453795.055380] usb 1-5.4.2: Manufacturer: Sonix Technology Co., Ltd.
[453795.055381] usb 1-5.4.2: SerialNumber: SN5100
[453795.115252] media: Linux media interface: v0.10
[453795.120461] Linux video capture interface: v2.00
[453795.127707] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (05a3:9530)
[453795.142689] uvcvideo 1-5.4.2:1.0: Entity type for entity Extension 4 was not initialized!
[453795.142690] uvcvideo 1-5.4.2:1.0: Entity type for entity Extension 3 was not initialized!
[453795.142691] uvcvideo 1-5.4.2:1.0: Entity type for entity Processing 2 was not initialized!
[453795.142692] uvcvideo 1-5.4.2:1.0: Entity type for entity Camera 1 was not initialized!
[453795.142814] input: USB 2.0 Camera: HD USB Camera as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.4/1-5.4.2/1-5.4.2:1.0/input/input49
[453795.142934] usbcore: registered new interface driver uvcvideo
[453795.142934] USB Video Class driver (1.1.1)
$ lsusb
...
Bus 001 Device 070: ID 05a3:9530 ARC International
$ dpkg -l | grep v4l
ii libv4l-0:amd64 1.14.2-1 amd64 Collection of video4linux support libraries
ii libv4l2rds0:amd64 1.14.2-1 amd64 Video4Linux Radio Data System (RDS) decoding library
ii libv4lconvert0:amd64 1.14.2-1 amd64 Video4linux frame format conversion library
ii v4l-utils 1.14.2-1 amd64 Collection of command line video4linux utilities
$ ffmpeg -f v4l2 -list_formats all -i /dev/video0
...
[video4linux2,v4l2 @ 0x557c3d4188c0] Compressed: mjpeg : Motion-JPEG : 1600x1200 2592x1944 2048x1536 1920x1080 1280x1024 1280x720 1024x768 800x600 640x480 1600x1200
[video4linux2,v4l2 @ 0x557c3d4188c0] Raw: yuyv422 : YUYV 4:2:2 : 1600x1200 2592x1944 2048x1536 1920x1080 1280x1024 1280x720 1024x768 800x600 640x480 1600x1200
$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1600x1200
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x1024
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1024x768
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.067s (15.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1600x1200
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.333s (3.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.250s (4.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x1024
Interval: Discrete 0.111s (9.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1024x768
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.050s (20.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.200s (5.000 fps)
Pour vérifier que la caméra est fonctionnelle, on peut visualiser son flux avec VLC :
$ vlc v4l2:///dev/video0
Le support multimédia dans Qt5 est fourni par le module Qt Multimedia. L’API multimédia Qt (C++ et QML) fournit un certain nombre de classes pour gérer des caméras et ainsi accéder aux images et aux vidéos de ces périphériques.
Le module multimédia regroupent quatre composants principaux : l’audio, la vidéo, la radio et la caméra.
Pour utiliser les classes de QtMultimedia, il faut donc ajouter au fichier de projet .pro
:
QT += multimedia multimediawidgets
D’autre part, il faudra aussi disposer du module multimedia
pour le développement (et des plugins pour les codecs) :
$ sudo apt-get install qtmultimedia5-dev qtmultimedia5-examples qtmultimedia5-doc qml-module-qtmultimedia
Le composant caméra fournit les classes C++ suivantes :
Voir la liste des exemples fournis par Qt.
La classe QCameraInfo permet de déterminer le nombre de caméras détectées et accèder à quelques informations :
if (QCameraInfo::availableCameras().count() > 0)
{
qDebug() << "Caméra(s) disponible(s)" << QCameraInfo::availableCameras().count();
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
foreach (const QCameraInfo &cameraInfo, cameras)
{
qDebug() << "Device" << cameraInfo.deviceName();
qDebug() << "Description" << cameraInfo.description();
if (cameraInfo.position() == QCamera::FrontFace)
qDebug() << "Position : FrontFace";
else if (cameraInfo.position() == QCamera::BackFace)
qDebug() << "Position : BackFace";
qDebug() << "Orientation" << cameraInfo.orientation() << "degrés";
}
}
else
{
qDebug() << "Aucune caméra disponible !";
}
On obtient ceci :
Caméra(s) disponible(s) 1
Device "/dev/video0"
Description "USB 2.0 Camera: HD USB Camera"
Orientation 0 degrés
La classe QCameraViewfinder fournit un widget qui hérite de QVideoWidget pour le rendu de la caméra.
Il faut créer un objet de type QCamera puis l’associer à un “rendu” pour visualiser son flux dans la fenêtre de l’application.
En C++, on a le choix car la méthode setViewfinder()
qui assure l’association permet les cas suivants :
setViewfinder(QVideoWidget *viewfinder)
: avec un widget de type QCameraViewfinder ou QVideoWidgetsetViewfinder(QGraphicsVideoItem *viewfinder)
: avec un QGraphicsVideoItem
si on utilise QGraphicsView
setViewfinder(QAbstractVideoSurface *surface)
: avec son propre objet hérité de QAbstractVideoSurface
pour une utilisation avancée (traitement d’images comme la détection d’objets)On utilisera ici un widget de type QCameraViewfinder :
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets>
#include <QCamera>
#include <QCameraViewfinder>
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QCamera *camera;
QCameraViewfinder *viewfinder;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QCameraInfo>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), camera(NULL), viewfinder(NULL)
{
viewfinder = new QCameraViewfinder(this);
if (QCameraInfo::availableCameras().count() > 0)
{
// la caméra détectée par défaut
//camera = new QCamera;
// ou directement en choisissant le périphérique :
camera = new QCamera("/dev/video0", this);
camera->setViewfinder(viewfinder);
camera->start();
}
else
{
qDebug() << "Aucune caméra disponible !";
}
setCentralWidget(viewfinder);
setWindowTitle(QString::fromUtf8("Test Caméra USB"));
}
MainWindow::~MainWindow()
{
}
On obtient ceci :
Il est possible de faire quelques paramétrages du QCameraViewfinder
avec la classe QCameraViewfinderSettings :
setResolution()
: modifier la résolutionsetMaximumFrameRate()
: modifier le nombre max de frames par seconde (fps)setMinimumFrameRate()
: modifier le nombre max de frames par seconde (fps)setPixelAspectRatio()
: modifier l’aspect en fixant un ratiosetPixelFormat()
: le format QVideoFrame::PixelFormatIl faut donc créer un objet de type QCameraViewfinderSettings puis on l’associe au QCameraViewfinder
avec setViewfinderSettings()
:
// Par exemple :
QCameraViewfinderSettings viewfinderSettings;
//viewfinderSettings.setResolution(2592, 1944);
viewfinderSettings.setResolution(1920, 1080);
viewfinderSettings.setMaximumFrameRate(5.0);
viewfinderSettings.setPixelFormat(QVideoFrame::Format_YUYV);
camera->setViewfinderSettings(viewfinderSettings);
Voir les commandes ffmepg
et v4l2-ctl
ci-dessus pour connaître les réglages supportées par la caméra.
Il est possible d’enregistrer à partir de la caméra :
l’enregistrement d’une image nécessite l’utilisation d’un objet QCameraImageCapture associé à un objet de type QCamera. Il faut ensuite configurer le mode de capture QCamera::CaptureStillImage
avec setCaptureMode()
.
l’enregistrement d’une vidéo nécessite l’utilisation d’un objet QMediaRecorder associé à un objet de type QCamera. Il faut ensuite configurer le mode de capture QCamera::CaptureVideo
avec setCaptureMode()
.
Code source : qt5-camera-1.zip
L’exemple complet Camera Example C++ fourni par Qt.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QMediaRecorder>
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QCamera *camera;
QCameraViewfinder *viewfinder;
QCameraImageCapture *captureImage;
QMediaRecorder *captureVideo;
bool enregistre;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void etatCamera(QCamera::State etat);
void statusCamera(QCamera::Status etat);
void etatCaptureVideo(QMediaRecorder::State etat);
void afficherTempsEnregistrement(qint64 temps);
void enregistrerImage();
void enregistrerVideo();
void estPretCaptureImage(bool pret);
void imageCaptured(int id, QImage image);
void imageSauvegardee(int id, QString nomFichier);
void selectionnerCapture(int index);
};
#endif // MAINWINDOW_H
On crée une GUI pour visualiser le flux et choisir le type de capture :
#include "mainwindow.h"
#include <QCameraInfo>
#include <QDebug>
#include <QCameraViewfinderSettings>
#include <QMediaMetaData>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), camera(NULL), cameraInfo(NULL), viewfinder(NULL), captureImage(NULL), captureVideo(NULL)
{
viewfinder = new QCameraViewfinder(this);
if (QCameraInfo::availableCameras().count() > 0)
{
//camera = new QCamera;
camera = new QCamera("/dev/video0", this);
cameraInfo = new QCameraInfo(*camera);
this->statusBar()->showMessage(cameraInfo->description() + " [" + cameraInfo->deviceName() + "]");
connect(camera, SIGNAL(statusChanged(QCamera::Status)), this, SLOT(statusCamera(QCamera::Status)));
connect(camera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(etatCamera(QCamera::State)));
camera->setViewfinder(viewfinder);
}
else
{
qDebug() << "Aucune caméra disponible !";
}
captureImage = new QCameraImageCapture(camera, this);
// ...
captureVideo = new QMediaRecorder(camera, this);
// ...
// GUI
QWidget *widgetPrincipal = new QWidget;
QVBoxLayout *layoutPrincipal = new QVBoxLayout;
QHBoxLayout *layoutFlux = new QHBoxLayout;
viewfinder->setFixedSize(640, 480);
layoutFlux->addWidget(viewfinder);
QHBoxLayout *layoutBoutons = new QHBoxLayout;
QPushButton *boutonImage = new QPushButton(QString::fromUtf8("Image"), this);
connect(boutonImage, SIGNAL(clicked(bool)), this, SLOT(enregistrerImage()));
QPushButton *boutonVideo = new QPushButton(QString::fromUtf8("Vidéo"), this);
connect(boutonVideo, SIGNAL(clicked(bool)), this, SLOT(enregistrerVideo()));
QComboBox *listeTypeCapture = new QComboBox(this);
connect(listeTypeCapture, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerCapture(int)));
listeTypeCapture->addItem(QString::fromUtf8("Image"));
listeTypeCapture->addItem(QString::fromUtf8("Vidéo"));
layoutBoutons->addStretch();
layoutBoutons->addWidget(listeTypeCapture);
layoutBoutons->addWidget(boutonImage);
layoutBoutons->addWidget(boutonVideo);
layoutPrincipal->addLayout(layoutFlux);
layoutPrincipal->addLayout(layoutBoutons);
widgetPrincipal->setLayout(layoutPrincipal);
setCentralWidget(widgetPrincipal);
setWindowTitle(QString::fromUtf8("Test Caméra USB"));
if(camera != NULL)
camera->start();
}
MainWindow::~MainWindow()
{
if(camera != NULL)
camera->stop();
}
void MainWindow::etatCamera(QCamera::State etat)
{
qDebug() << Q_FUNC_INFO << etat;
}
void MainWindow::statusCamera(QCamera::Status etat)
{
qDebug() << Q_FUNC_INFO << etat;
}
void MainWindow::selectionnerCapture(int index)
{
switch (index)
{
case 0:
camera->setCaptureMode(QCamera::CaptureStillImage);
break;
case 1:
camera->setCaptureMode(QCamera::CaptureVideo);
break;
default:
break;
}
if(camera->captureMode() == QCamera::CaptureStillImage)
qDebug() << "Capture Mode " << camera->captureMode() << "CaptureStillImage";
else if(camera->captureMode() == QCamera::CaptureVideo)
qDebug() << "Capture Mode " << camera->captureMode() << "CaptureVideo";
else
qDebug() << "Capture Mode " << camera->captureMode();
}
...
L’enregistrement d’une image nécessite l’utilisation d’un objet QCameraImageCapture associé à un objet de type QCamera. Il faut ensuite configurer le mode de capture QCamera::CaptureStillImage
avec setCaptureMode()
.
Pour capturer une image, on utilisera donc un objet QCameraImageCapture
. Il suffit ensuite :
camera->start()
),camera->searchAndLock()
) pour que la mise au point soit nette et que les réglages ne changent pas pendant la capture de l’image,captureImage->capture()
) l’image et enfincamera->unlock()
) pour la photo suivante.Il est possible de choisir le chemin (path) où sera stockée l’image au moment de la capture. Ici, on choisit de les stoker dans le répertoire de l’application (qApp->applicationDirPath()
). Les images sont nommées automatiquement “IMG_0000000x.jpg” avec x incrémenté à chaque capture d’image.
...
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), camera(NULL), cameraInfo(NULL), viewfinder(NULL), captureImage(NULL), captureVideo(NULL)
{
// ...
captureImage = new QCameraImageCapture(camera, this);
qDebug() << "Capture Image available" << captureImage->isAvailable() << "CaptureToBuffer" << captureImage->isCaptureDestinationSupported(QCameraImageCapture::CaptureToBuffer);
qDebug() << "Capture Image codecs" << captureImage->supportedImageCodecs();
qDebug() << "Capture Image resolution(s)" << captureImage->supportedResolutions();
connect(captureImage, SIGNAL(readyForCaptureChanged(bool)), this, SLOT(estPretCaptureImage(bool)));
connect(captureImage, SIGNAL(imageCaptured(int,QImage)), this, SLOT(imageCaptured(int,QImage)));
connect(captureImage, SIGNAL(imageSaved(int,QString)), this, SLOT(imageSauvegardee(int,QString)));
camera->setCaptureMode(QCamera::CaptureStillImage);
// ...
if(camera != NULL)
camera->start();
}
//...
void MainWindow::enregistrerImage()
{
if(camera == NULL)
return;
if(camera->captureMode() == QCamera::CaptureStillImage)
{
camera->searchAndLock();
captureImage->capture(qApp->applicationDirPath());
camera->unlock();
}
}
void MainWindow::estPretCaptureImage(bool pret)
{
qDebug() << Q_FUNC_INFO << pret;
}
void MainWindow::imageCaptured(int id, QImage image)
{
qDebug() << Q_FUNC_INFO << id;
}
void MainWindow::imageSauvegardee(int id, QString nomFichier)
{
qDebug() << Q_FUNC_INFO << id << QDir::toNativeSeparators(nomFichier);
this->statusBar()->showMessage("Image " + nomFichier + QString::fromUtf8(" sauvegardée"), 2000);
}
On obtient ceci :
Starting qt5-camera-1...
Caméra(s) disponible(s) 1
Device "/dev/video0"
Description "USB 2.0 Camera: HD USB Camera"
Capture Image available true CaptureToBuffer true
Capture Image codecs ("jpeg")
Capture Image resolution(s) ()
Capture Mode QFlags(0x1) CaptureStillImage
void MainWindow::statusCamera(QCamera::Status) QCamera::LoadingStatus
void MainWindow::etatCamera(QCamera::State) QCamera::ActiveState
void MainWindow::statusCamera(QCamera::Status) QCamera::LoadedStatus
void MainWindow::statusCamera(QCamera::Status) QCamera::StartingStatus
void MainWindow::enregistrerImage()
void MainWindow::statusCamera(QCamera::Status) QCamera::ActiveStatus
void MainWindow::estPretCaptureImage(bool) true
void MainWindow::estPretCaptureImage(bool) false
void MainWindow::statusCamera(QCamera::Status) QCamera::StoppingStatus
void MainWindow::etatCamera(QCamera::State) QCamera::LoadedState
qt5-camera-1 exited with code 0
Il est possible de faire quelques paramétrages de l’encodage de l’image avec la classe QImageEncoderSettings :
setResolution()
: modifier la résolutionsetEncodingOption()
et setEncodingOptions()
: modifier les options d’encodagesetQuality()
: modifier la qualitésetCodec()
: modifier le codecOn modifiera ensuite les paramètres de l’objet de type QCameraImageCapture avec setEncodingSettings()
.
L’enregistrement d’une vidéo nécessite l’utilisation d’un objet QMediaRecorder associé à un objet de type QCamera. Il faut ensuite configurer le mode de capture QCamera::CaptureVideo
avec setCaptureMode()
.
Pour capturer une vidéo, on utilisera donc un objet QMediaRecorder
. Il suffit ensuite :
camera->start()
),captureVideo->record()
)captureVideo->stop()
)Il est possible de choisir le chemin (path) où sera stockée la vidéo avec setOutputLocation()
. Ici, on choisit de les stoker dans le répertoire de l’application (qApp->applicationDirPath()
). Les vidéos sont nommées automatiquement “clip_0000000x.ogg” avec x incrémenté à chaque enregistrement.
...
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), camera(NULL), cameraInfo(NULL), viewfinder(NULL), captureImage(NULL), captureVideo(NULL)
{
// ...
captureVideo = new QMediaRecorder(camera, this);
qDebug() << "Capture Video available" << captureVideo->isAvailable();
qDebug() << "Capture Video codecs" << captureVideo->supportedVideoCodecs();
qDebug() << "Capture Video resolution(s)" << captureVideo->supportedResolutions();
qDebug() << "Capture Video frame rate(s)" << captureVideo->supportedFrameRates();
qDebug() << "Capture Video containers" << captureVideo->supportedContainers();
captureVideo->setMetaData(QMediaMetaData::Title, QVariant(QLatin1String("Test Camera USB")));
captureVideo->setOutputLocation(qApp->applicationDirPath());
connect(captureVideo, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(etatCaptureVideo(QMediaRecorder::State)));
connect(captureVideo, SIGNAL(durationChanged(qint64)), this, SLOT(afficherTempsEnregistrement(qint64)));
//connect(captureVideo, SIGNAL(), this, SLOT());
enregistre = false;
camera->setCaptureMode(QCamera::CaptureVideo);
// ...
if(camera != NULL)
camera->start();
}
void MainWindow::etatCaptureVideo(QMediaRecorder::State etat)
{
qDebug() << Q_FUNC_INFO << etat;
}
void MainWindow::enregistrerVideo()
{
if(camera == NULL)
return;
if(camera->captureMode() == QCamera::CaptureVideo)
{
if(!enregistre)
{
captureVideo->record();
enregistre = true;
}
else if (captureVideo->state() == QMediaRecorder::RecordingState)
{
captureVideo->stop();
enregistre = false;
}
}
}
void MainWindow::afficherTempsEnregistrement(qint64 temps)
{
QString str = QString::fromUtf8("Enregistrement vidéo %1 s").arg(captureVideo->duration()/1000);
this->statusBar()->showMessage(str);
}
...
On obtient ceci :
Starting qt5-camera-1...
Caméra(s) disponible(s) 1
Device "/dev/video0"
Description "USB 2.0 Camera: HD USB Camera"
Capture Video available true
Capture Video codecs ("image/jpeg", "image/png", "video/x-theora", "video/x-vp8", "video/x-vp9", "video/x-h264", "application/x-yuv4mpeg", "video/x-amv", "video/x-asus", "image/bmp", "video/x-cinepak", "video/x-cirrus-logic-accupak", "video/x-dnxhd", "video/x-dv", "video/x-ffv", "video/x-gst-av-ffvhuff", "video/x-flash-screen", "video/x-flash-screen2", "video/x-flash-video", "video/x-h261", "video/x-h263, variant=(string)itu", "video/x-huffyuv", "image/x-j2c", "video/mpeg, mpegversion=(int)1", "video/mpeg, mpegversion=(int)2", "video/mpeg, mpegversion=(int)4", "video/x-divx", "video/x-msmpeg", "video/x-msvideocodec", "image/x-portable-anymap", "image/pbm", "image/x-pcx", "image/x-portable-graymap", "video/x-gst-av-pgmyuv", "image/ppm", "video/x-prores", "video/x-rle, layout=(string)quicktime", "video/x-gst-av-roqvideo", "video/x-pn-realvideo", "image/x-sgi", "image/x-sun-raster", "video/x-svq", "image/x-tga", "image/tiff", "video/x-wmv, wmvversion=(int)1", "video/x-wmv, wmvversion=(int)2", "video/x-zmbv")
Capture Video resolution(s) ()
Capture Video frame rate(s) ()
Capture Video containers ("video/quicktime, variant=(string)3gpp", "video/x-msvideo", "video/x-flv", "video/quicktime, variant=(string)iso-fragmented", "video/x-matroska", "video/x-matroska-3d", "audio/x-matroska", "video/mj2", "video/quicktime, variant=(string)iso", "application/ogg", "audio/ogg", "video/ogg", "video/quicktime, variant=(string)apple", "video/quicktime", "audio/x-wav", "audio/x-rf64", "video/webm", "audio/webm", "video/quicktime, variant=(string)3g2", "application/x-gst-av-a64", "application/x-gst-av-adx", "audio/x-amr-nb-sh", "application/x-gst-av-apng", "application/x-gst-av-ast", "audio/x-au", "application/x-gst-av-avm2", "application/x-gst-av-bit", "application/x-gst-av-caf", "application/x-gst-av-chromaprint", "application/x-gst-av-dash", "application/x-gst-av-daud", "video/x-dv", "application/x-gst-av-dvd", "application/x-gst-av-f4v", "application/x-gst-av-ffm", "application/x-gst-av-filmstrip", "application/x-gst-av-fits", "application/gxf", "application/x-gst-av-hash", "application/x-gst-av-hds", "application/x-gst-av-hls", "application/x-gst-av-ico", "application/x-gst-av-ilbc", "video/quicktime, variant=(string)ipod", "application/x-gst-av-ircam", "application/x-gst-av-ismv", "video/x-ivf", "application/x-gst-av-latm", "application/x-gst-av-md5", "application/x-gst-av-mkvtimestamp_v2", "application/x-gst-av-mmf", "video/mpeg", "application/mxf", "application/x-gst-av-mxf_opatom", "application/x-gst-av-nut", "application/x-gst-av-oga", "application/x-gst-av-ogv", "application/x-gst-av-oma", "application/x-gst-av-opus", "video/quicktime, variant=(string)psp", "application/x-pn-realmedia", "application/x-gst-av-rso", "application/x-gst-av-rtsp", "application/x-gst-av-sap", "application/x-gst-av-singlejpeg", "application/x-gst-av-smjpeg", "application/x-gst-av-smoothstreaming", "application/x-gst-av-sox", "application/x-gst-av-spdif", "application/x-gst-av-spx", "application/x-gst-av-svcd", "application/x-shockwave-flash", "audio/x-ttafile", "application/x-gst-av-uncodedframecrc", "application/x-gst-av-vc1test", "application/x-gst-av-vcd", "application/x-gst-av-vob", "audio/x-voc", "application/x-gst-av-w64", "application/x-gst-av-webp", "application/x-gst-av-wtv", "audio/mpeg, mpegversion=(int)1")
void MainWindow::statusCamera(QCamera::Status) QCamera::LoadingStatus
void MainWindow::etatCamera(QCamera::State) QCamera::ActiveState
void MainWindow::statusCamera(QCamera::Status) QCamera::LoadedStatus
void MainWindow::statusCamera(QCamera::Status) QCamera::StartingStatus
void MainWindow::statusCamera(QCamera::Status) QCamera::ActiveStatus
Capture Mode QFlags(0x2) CaptureVideo
void MainWindow::statusCamera(QCamera::Status) QCamera::LoadedStatus
void MainWindow::statusCamera(QCamera::Status) QCamera::StartingStatus
void MainWindow::statusCamera(QCamera::Status) QCamera::ActiveStatus
void MainWindow::enregistrerVideo() record()
void MainWindow::etatCaptureVideo(QMediaRecorder::State) QMediaRecorder::RecordingState
void MainWindow::afficherTempsEnregistrement(qint64) 0 ms "Enregistrement vidéo 0 s"
void MainWindow::afficherTempsEnregistrement(qint64) 0 ms "Enregistrement vidéo 0 s"
void MainWindow::afficherTempsEnregistrement(qint64) 1666 ms "Enregistrement vidéo 1 s"
void MainWindow::afficherTempsEnregistrement(qint64) 2666 ms "Enregistrement vidéo 2 s"
void MainWindow::enregistrerVideo() stop()
void MainWindow::etatCaptureVideo(QMediaRecorder::State) QMediaRecorder::StoppedState
qt5-camera-1 exited with code 0
Il est possible de faire quelques paramétrages de la vidéo avec la classe QVideoEncoderSettings et QAudioEncoderSettings. On modifiera ensuite les paramètres de l’objet de type QMediaRecorder avec setEncodingSettings()
.