diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-03-05 11:16:53 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-03-16 12:58:22 +0000 |
commit | c93b4b54c44ca28e34fe7e12cc2fb279f3e84b54 (patch) | |
tree | 74dcff9f6fca1d5a7706b242b0a9bae8c9bd38fc /examples | |
parent | 4c7a93115a6346d318c4a23f70cf858781ec4591 (diff) |
Make QMediaCaptureSession the new central class for media capturing
You now need to instantiate a capture session and hook up
camera, image capture and recording to it.
This gives a cleaner architecture for the whole capturing process.
Change-Id: I7c7f6c4a841512b038834f4653ef7ab790c43f8f
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'examples')
5 files changed, 14 insertions, 6 deletions
diff --git a/examples/multimedia/audiorecorder/audiorecorder.cpp b/examples/multimedia/audiorecorder/audiorecorder.cpp index 821b6481c..0d0ad8355 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.cpp +++ b/examples/multimedia/audiorecorder/audiorecorder.cpp @@ -69,7 +69,8 @@ AudioRecorder::AudioRecorder() { ui->setupUi(this); - m_audioRecorder = new QMediaRecorder(QMediaRecorder::AudioOnly, this); + m_audioRecorder = new QMediaRecorder(this); + m_captureSession.setRecorder(m_audioRecorder); // ### replace with a monitoring output once we have it. // m_probe = new QAudioProbe(this); // connect(m_probe, &QAudioProbe::audioBufferProbed, diff --git a/examples/multimedia/audiorecorder/audiorecorder.h b/examples/multimedia/audiorecorder/audiorecorder.h index 4d253d6b6..76968674b 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.h +++ b/examples/multimedia/audiorecorder/audiorecorder.h @@ -53,6 +53,7 @@ #include <QMainWindow> #include <QMediaRecorder> +#include <QMediaCaptureSession> #include <QUrl> QT_BEGIN_NAMESPACE @@ -88,6 +89,7 @@ private: Ui::AudioRecorder *ui = nullptr; + QMediaCaptureSession m_captureSession; QMediaRecorder *m_audioRecorder = nullptr; QList<AudioLevel*> m_audioLevels; bool m_outputLocationSet = false; diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp index b8fd7c4d5..8fa860901 100644 --- a/examples/multimediawidgets/camera/camera.cpp +++ b/examples/multimediawidgets/camera/camera.cpp @@ -104,14 +104,17 @@ Camera::Camera() : ui(new Ui::Camera) void Camera::setCamera(const QCameraInfo &cameraInfo) { m_camera.reset(new QCamera(cameraInfo)); + m_captureSession.setCamera(m_camera.data()); connect(m_camera.data(), &QCamera::activeChanged, this, &Camera::updateCameraActive); connect(m_camera.data(), &QCamera::errorOccurred, this, &Camera::displayCameraError); - m_mediaRecorder.reset(new QMediaRecorder(m_camera.data())); + m_mediaRecorder.reset(new QMediaRecorder); + m_captureSession.setRecorder(m_mediaRecorder.data()); connect(m_mediaRecorder.data(), &QMediaRecorder::stateChanged, this, &Camera::updateRecorderState); - m_imageCapture = new QCameraImageCapture(m_camera.data()); + m_imageCapture = new QCameraImageCapture; + m_captureSession.setImageCapture(m_imageCapture); connect(m_mediaRecorder.data(), &QMediaRecorder::durationChanged, this, &Camera::updateRecordTime); connect(m_mediaRecorder.data(), QOverload<QMediaRecorder::Error>::of(&QMediaRecorder::error), @@ -119,7 +122,7 @@ void Camera::setCamera(const QCameraInfo &cameraInfo) connect(ui->exposureCompensation, &QAbstractSlider::valueChanged, this, &Camera::setExposureCompensation); - m_camera->setViewfinder(ui->viewfinder); + m_captureSession.setVideoPreview(ui->viewfinder); updateCameraActive(m_camera->isActive()); updateRecorderState(m_mediaRecorder->state()); diff --git a/examples/multimediawidgets/camera/camera.h b/examples/multimediawidgets/camera/camera.h index 8b8968142..fe47acf75 100644 --- a/examples/multimediawidgets/camera/camera.h +++ b/examples/multimediawidgets/camera/camera.h @@ -56,6 +56,7 @@ #include <QMediaRecorder> #include <QScopedPointer> #include <QMediaMetaData> +#include <QMediaCaptureSession> #include <QMainWindow> @@ -128,6 +129,7 @@ private: QActionGroup *videoDevicesGroup = nullptr; + QMediaCaptureSession m_captureSession; QScopedPointer<QCamera> m_camera; QCameraImageCapture *m_imageCapture; QScopedPointer<QMediaRecorder> m_mediaRecorder; diff --git a/examples/multimediawidgets/camera/imagesettings.cpp b/examples/multimediawidgets/camera/imagesettings.cpp index a74982854..df0056029 100644 --- a/examples/multimediawidgets/camera/imagesettings.cpp +++ b/examples/multimediawidgets/camera/imagesettings.cpp @@ -55,7 +55,7 @@ #include <QDebug> #include <QCameraImageCapture> #include <QCamera> - +#include <QMediaCaptureSession> ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent) : QDialog(parent), @@ -75,7 +75,7 @@ ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent) ui->imageQualitySlider->setRange(0, int(QImageEncoderSettings::VeryHighQuality)); ui->imageResolutionBox->addItem(tr("Default Resolution")); - const QList<QSize> supportedResolutions = imagecapture->camera()->cameraInfo().photoResolutions(); + const QList<QSize> supportedResolutions = imagecapture->captureSession()->camera()->cameraInfo().photoResolutions(); for (const QSize &resolution : supportedResolutions) { ui->imageResolutionBox->addItem(QString("%1x%2").arg(resolution.width()).arg(resolution.height()), QVariant(resolution)); |