diff options
Diffstat (limited to 'src')
26 files changed, 283 insertions, 310 deletions
diff --git a/src/multimedia/audio/qaudiodecoder.cpp b/src/multimedia/audio/qaudiodecoder.cpp index 8be33b07e..088852f5c 100644 --- a/src/multimedia/audio/qaudiodecoder.cpp +++ b/src/multimedia/audio/qaudiodecoder.cpp @@ -41,7 +41,12 @@ QT_BEGIN_NAMESPACE QAudioDecoder::QAudioDecoder(QObject *parent) : QObject(parent) { - decoder = QPlatformMediaIntegration::instance()->createAudioDecoder(this); + auto maybeDecoder = QPlatformMediaIntegration::instance()->createAudioDecoder(this); + if (maybeDecoder) { + decoder = maybeDecoder.value(); + } else { + qWarning() << "Failed to initialize QAudioDecoder" << maybeDecoder.error(); + } } @@ -55,7 +60,7 @@ QAudioDecoder::~QAudioDecoder() = default; */ bool QAudioDecoder::isSupported() const { - return decoder != nullptr; + return bool(decoder); } /*! @@ -73,9 +78,7 @@ bool QAudioDecoder::isDecoding() const */ QAudioDecoder::Error QAudioDecoder::error() const { - if (!decoder) - return NotSupportedError; - return decoder->error(); + return decoder ? decoder->error() : NotSupportedError; } /*! @@ -105,12 +108,11 @@ QString QAudioDecoder::errorString() const */ void QAudioDecoder::start() { - if (decoder == nullptr) + if (!decoder) return; // Reset error conditions decoder->clearError(); - decoder->start(); } @@ -119,10 +121,8 @@ void QAudioDecoder::start() */ void QAudioDecoder::stop() { - if (!decoder) - return; - - decoder->stop(); + if (decoder) + decoder->stop(); } /*! @@ -132,9 +132,7 @@ void QAudioDecoder::stop() */ QUrl QAudioDecoder::source() const { - if (decoder) - return decoder->source(); - return QString(); + return decoder ? decoder->source() : QString{}; } /*! @@ -161,9 +159,7 @@ void QAudioDecoder::setSource(const QUrl &fileName) */ QIODevice *QAudioDecoder::sourceDevice() const { - if (decoder) - return decoder->sourceDevice(); - return nullptr; + return decoder ? decoder->sourceDevice() : nullptr; } /*! @@ -177,9 +173,8 @@ QIODevice *QAudioDecoder::sourceDevice() const */ void QAudioDecoder::setSourceDevice(QIODevice *device) { - if (!decoder) - return; - decoder->setSourceDevice(device); + if (decoder) + decoder->setSourceDevice(device); } /*! @@ -192,9 +187,7 @@ void QAudioDecoder::setSourceDevice(QIODevice *device) */ QAudioFormat QAudioDecoder::audioFormat() const { - if (decoder) - return decoder->audioFormat(); - return QAudioFormat(); + return decoder ? decoder->audioFormat() : QAudioFormat{}; } /*! @@ -221,7 +214,7 @@ void QAudioDecoder::setAudioFormat(const QAudioFormat &format) if (isDecoding()) return; - if (decoder != nullptr) + if (decoder) decoder->setAudioFormat(format); } @@ -232,9 +225,7 @@ void QAudioDecoder::setAudioFormat(const QAudioFormat &format) */ bool QAudioDecoder::bufferAvailable() const { - if (decoder) - return decoder->bufferAvailable(); - return false; + return decoder && decoder->bufferAvailable(); } /*! @@ -244,9 +235,7 @@ bool QAudioDecoder::bufferAvailable() const qint64 QAudioDecoder::position() const { - if (decoder) - return decoder->position(); - return -1; + return decoder ? decoder->position() : -1; } /*! @@ -256,9 +245,7 @@ qint64 QAudioDecoder::position() const qint64 QAudioDecoder::duration() const { - if (decoder) - return decoder->duration(); - return -1; + return decoder ? decoder->duration() : -1; } /*! @@ -273,10 +260,7 @@ qint64 QAudioDecoder::duration() const QAudioBuffer QAudioDecoder::read() const { - if (decoder) - return decoder->read(); - - return QAudioBuffer(); + return decoder ? decoder->read() : QAudioBuffer{}; } // Enums diff --git a/src/multimedia/audio/qaudiodecoder.h b/src/multimedia/audio/qaudiodecoder.h index 8594736a4..4a7d6f00a 100644 --- a/src/multimedia/audio/qaudiodecoder.h +++ b/src/multimedia/audio/qaudiodecoder.h @@ -76,7 +76,7 @@ Q_SIGNALS: private: Q_DISABLE_COPY(QAudioDecoder) - QPlatformAudioDecoder *decoder; + QPlatformAudioDecoder *decoder = nullptr; }; QT_END_NAMESPACE diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp index 8da48a82d..c2477539b 100644 --- a/src/multimedia/audio/qaudioinput.cpp +++ b/src/multimedia/audio/qaudioinput.cpp @@ -57,11 +57,17 @@ QAudioInput::QAudioInput(QObject *parent) : QAudioInput(QMediaDevices::defaultAu } QAudioInput::QAudioInput(const QAudioDevice &device, QObject *parent) - : QObject(parent), - d(QPlatformMediaIntegration::instance()->createAudioInput(this)) + : QObject(parent) { - d->device = device.mode() == QAudioDevice::Input ? device : QMediaDevices::defaultAudioInput(); - d->setAudioDevice(d->device); + auto maybeAudioInput = QPlatformMediaIntegration::instance()->createAudioInput(this); + if (maybeAudioInput) { + d = maybeAudioInput.value(); + d->device = device.mode() == QAudioDevice::Input ? device : QMediaDevices::defaultAudioInput(); + d->setAudioDevice(d->device); + } else { + d = new QPlatformAudioInput(nullptr); + qWarning() << "Failed to initialize QAudioInput" << maybeAudioInput.error(); + } } QAudioInput::~QAudioInput() diff --git a/src/multimedia/audio/qaudiooutput.cpp b/src/multimedia/audio/qaudiooutput.cpp index 77f907dc3..0c87ce842 100644 --- a/src/multimedia/audio/qaudiooutput.cpp +++ b/src/multimedia/audio/qaudiooutput.cpp @@ -58,11 +58,17 @@ QAudioOutput::QAudioOutput(QObject *parent) } QAudioOutput::QAudioOutput(const QAudioDevice &device, QObject *parent) - : QObject(parent), - d(QPlatformMediaIntegration::instance()->createAudioOutput(this)) + : QObject(parent) { - d->device = device.mode() == QAudioDevice::Output ? device : QMediaDevices::defaultAudioOutput(); - d->setAudioDevice(d->device); + auto maybeAudioOutput = QPlatformMediaIntegration::instance()->createAudioOutput(this); + if (maybeAudioOutput) { + d = maybeAudioOutput.value(); + d->device = device.mode() == QAudioDevice::Output ? device : QMediaDevices::defaultAudioOutput(); + d->setAudioDevice(d->device); + } else { + d = new QPlatformAudioOutput(nullptr); + qWarning() << "Failed to initialize QAudioOutput" << maybeAudioOutput.error(); + } } QAudioOutput::~QAudioOutput() diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp index b1a8ec84a..f5de46657 100644 --- a/src/multimedia/camera/qcamera.cpp +++ b/src/multimedia/camera/qcamera.cpp @@ -168,12 +168,14 @@ void QCameraPrivate::init(const QCameraDevice &device) { Q_Q(QCamera); - control = QPlatformMediaIntegration::instance()->createCamera(q); - if (!control) { - _q_error(QCamera::CameraError, QString::fromUtf8("Camera not supported")); + auto maybeControl = QPlatformMediaIntegration::instance()->createCamera(q); + if (!maybeControl) { + qWarning() << "Failed to initialize QCamera" << maybeControl.error(); + error = QCamera::CameraError; + errorString = maybeControl.error(); return; } - + control = maybeControl.value(); cameraDevice = !device.isNull() ? device : QMediaDevices::defaultVideoInput(); if (cameraDevice.isNull()) _q_error(QCamera::CameraError, QString::fromUtf8("No camera detected")); @@ -243,7 +245,6 @@ QCamera::~QCamera() Q_D(QCamera); if (d->captureSession) d->captureSession->setCamera(nullptr); - Q_ASSERT(!d->captureSession); } /*! @@ -631,9 +632,8 @@ QPointF QCamera::customFocusPoint() const void QCamera::setCustomFocusPoint(const QPointF &point) { Q_D(QCamera); - if (!d->control) - return; - d->control->setCustomFocusPoint(point); + if (d->control) + d->control->setCustomFocusPoint(point); } /*! @@ -691,7 +691,7 @@ float QCamera::focusDistance() const float QCamera::maximumZoomFactor() const { Q_D(const QCamera); - return d->control ? d->control->maxZoomFactor() : 1.; + return d->control ? d->control->maxZoomFactor() : 1.f; } /*! @@ -713,7 +713,7 @@ float QCamera::maximumZoomFactor() const float QCamera::minimumZoomFactor() const { Q_D(const QCamera); - return d->control ? d->control->minZoomFactor() : 1.; + return d->control ? d->control->minZoomFactor() : 1.f; } /*! @@ -733,14 +733,14 @@ float QCamera::minimumZoomFactor() const float QCamera::zoomFactor() const { Q_D(const QCamera); - return d->control ? d->control->zoomFactor() : 1.; + return d->control ? d->control->zoomFactor() : 1.f; } /*! Zooms to a zoom factor \a factor at a rate of 1 factor per second. */ void QCamera::setZoomFactor(float factor) { - zoomTo(factor, 0.); + zoomTo(factor, 0.f); } /*! @@ -766,9 +766,9 @@ void QCamera::setZoomFactor(float factor) */ void QCamera::zoomTo(float factor, float rate) { - Q_ASSERT(rate >= 0.); - if (rate < 0.) - rate = 0.; + Q_ASSERT(rate >= 0.f); + if (rate < 0.f) + rate = 0.f; Q_D(QCamera); if (!d->control) @@ -941,10 +941,7 @@ void QCamera::setExposureMode(QCamera::ExposureMode mode) bool QCamera::isExposureModeSupported(QCamera::ExposureMode mode) const { Q_D(const QCamera); - if (!d->control) - return false; - - return d->control->isExposureModeSupported(mode); + return d->control && d->control->isExposureModeSupported(mode); } /*! @@ -966,7 +963,7 @@ bool QCamera::isExposureModeSupported(QCamera::ExposureMode mode) const float QCamera::exposureCompensation() const { Q_D(const QCamera); - return d->control ? d->control->exposureCompensation() : 0.; + return d->control ? d->control->exposureCompensation() : 0.f; } void QCamera::setExposureCompensation(float ev) @@ -1064,7 +1061,7 @@ int QCamera::maximumIsoSensitivity() const float QCamera::minimumExposureTime() const { Q_D(const QCamera); - return d->control ? d->control->minExposureTime() : -1.; + return d->control ? d->control->minExposureTime() : -1.f; } /*! @@ -1073,7 +1070,7 @@ float QCamera::minimumExposureTime() const float QCamera::maximumExposureTime() const { Q_D(const QCamera); - return d->control ? d->control->maxExposureTime() : -1.; + return d->control ? d->control->maxExposureTime() : -1.f; } /*! @@ -1263,9 +1260,7 @@ void QCamera::setWhiteBalanceMode(QCamera::WhiteBalanceMode mode) bool QCamera::isWhiteBalanceModeSupported(QCamera::WhiteBalanceMode mode) const { Q_D(const QCamera); - if (!d->control) - return false; - return d->control->isWhiteBalanceModeSupported(mode); + return d->control && d->control->isWhiteBalanceModeSupported(mode); } /*! diff --git a/src/multimedia/camera/qimagecapture.cpp b/src/multimedia/camera/qimagecapture.cpp index 6d62dcb3f..10aa8a854 100644 --- a/src/multimedia/camera/qimagecapture.cpp +++ b/src/multimedia/camera/qimagecapture.cpp @@ -82,8 +82,16 @@ QImageCapture::QImageCapture(QObject *parent) { Q_D(QImageCapture); d->q_ptr = this; - d->control = QPlatformMediaIntegration::instance()->createImageCapture(this); + auto maybeControl = QPlatformMediaIntegration::instance()->createImageCapture(this); + if (!maybeControl) { + qWarning() << "Failed to initialize QImageCapture" << maybeControl.error(); + d->errorString = maybeControl.error(); + d->error = NotReadyError; + return; + } + + d->control = maybeControl.value(); connect(d->control, SIGNAL(imageExposed(int)), this, SIGNAL(imageExposed(int))); connect(d->control, SIGNAL(imageCaptured(int,QImage)), @@ -131,7 +139,7 @@ QImageCapture::~QImageCapture() */ bool QImageCapture::isAvailable() const { - return d_func()->captureSession && d_func()->captureSession->camera(); + return d_func()->control && d_func()->captureSession && d_func()->captureSession->camera(); } /*! @@ -193,7 +201,8 @@ void QImageCapture::setMetaData(const QMediaMetaData &metaData) { Q_D(QImageCapture); d->metaData = metaData; - d->control->setMetaData(d->metaData); + if (d->control) + d->control->setMetaData(d->metaData); emit metaDataChanged(); } @@ -259,14 +268,13 @@ bool QImageCapture::isReadyForCapture() const int QImageCapture::captureToFile(const QString &file) { Q_D(QImageCapture); - - d->unsetError(); - if (!d->control) { - d->_q_error(-1, NotSupportedFeatureError, QPlatformImageCapture::msgCameraNotReady()); + d->_q_error(-1, d->error, d->errorString); return -1; } + d->unsetError(); + if (!isReadyForCapture()) { d->_q_error(-1, NotReadyError, tr("Could not capture in stopped state")); return -1; @@ -290,18 +298,13 @@ int QImageCapture::captureToFile(const QString &file) int QImageCapture::capture() { Q_D(QImageCapture); - - d->unsetError(); - - if (d->control) + if (!d->control) { + d->_q_error(-1, d->error, d->errorString); + return -1; + } else { + d->unsetError(); return d->control->captureToBuffer(); - - d->error = NotSupportedFeatureError; - d->errorString = tr("Device does not support images capture."); - - d->_q_error(-1, d->error, d->errorString); - - return -1; + } } /*! @@ -370,9 +373,7 @@ int QImageCapture::capture() QImageCapture::FileFormat QImageCapture::fileFormat() const { Q_D(const QImageCapture); - if (!d->control) - return UnspecifiedFormat; - return d->control->imageSettings().format(); + return d->control ? d->control->imageSettings().format() : UnspecifiedFormat; } /*! @@ -460,9 +461,7 @@ QString QImageCapture::fileFormatDescription(QImageCapture::FileFormat f) QSize QImageCapture::resolution() const { Q_D(const QImageCapture); - if (!d->control) - return QSize(); - return d->control->imageSettings().resolution(); + return d->control ? d->control->imageSettings().resolution() : QSize{}; } /*! @@ -519,9 +518,7 @@ void QImageCapture::setResolution(int width, int height) QImageCapture::Quality QImageCapture::quality() const { Q_D(const QImageCapture); - if (!d->control) - return NormalQuality; - return d->control->imageSettings().quality(); + return d->control ? d->control->imageSettings().quality() : NormalQuality; } /*! diff --git a/src/multimedia/platform/qplatformmediaintegration.cpp b/src/multimedia/platform/qplatformmediaintegration.cpp index 712d8a47f..e97dca08c 100644 --- a/src/multimedia/platform/qplatformmediaintegration.cpp +++ b/src/multimedia/platform/qplatformmediaintegration.cpp @@ -104,12 +104,12 @@ QList<QCameraDevice> QPlatformMediaIntegration::videoInputs() return m_videoDevices ? m_videoDevices->videoDevices() : QList<QCameraDevice>{}; } -QPlatformAudioInput *QPlatformMediaIntegration::createAudioInput(QAudioInput *q) +QMaybe<QPlatformAudioInput *> QPlatformMediaIntegration::createAudioInput(QAudioInput *q) { return new QPlatformAudioInput(q); } -QPlatformAudioOutput *QPlatformMediaIntegration::createAudioOutput(QAudioOutput *q) +QMaybe<QPlatformAudioOutput *> QPlatformMediaIntegration::createAudioOutput(QAudioOutput *q) { return new QPlatformAudioOutput(q); } diff --git a/src/multimedia/platform/qplatformmediaintegration_p.h b/src/multimedia/platform/qplatformmediaintegration_p.h index 128c5da84..b8308fde7 100644 --- a/src/multimedia/platform/qplatformmediaintegration_p.h +++ b/src/multimedia/platform/qplatformmediaintegration_p.h @@ -15,7 +15,9 @@ // #include <private/qtmultimediaglobal_p.h> +#include <private/qmultimediautils_p.h> #include <qmediarecorder.h> +#include <qstring.h> QT_BEGIN_NAMESPACE @@ -44,6 +46,7 @@ class QPlatformVideoDevices; class Q_MULTIMEDIA_EXPORT QPlatformMediaIntegration { + inline static const QString notAvailable = QStringLiteral("Not available"); public: static QPlatformMediaIntegration *instance(); @@ -54,18 +57,18 @@ public: virtual QPlatformMediaFormatInfo *formatInfo() = 0; virtual QList<QCameraDevice> videoInputs(); - virtual QPlatformCamera *createCamera(QCamera *) { return nullptr; } + virtual QMaybe<QPlatformCamera *> createCamera(QCamera *) { return notAvailable; } - virtual QPlatformAudioDecoder *createAudioDecoder(QAudioDecoder *) { return nullptr; } - virtual QPlatformMediaCaptureSession *createCaptureSession() { return nullptr; } - virtual QPlatformMediaPlayer *createPlayer(QMediaPlayer *) { return nullptr; } - virtual QPlatformMediaRecorder *createRecorder(QMediaRecorder *) { return nullptr; } - virtual QPlatformImageCapture *createImageCapture(QImageCapture *) { return nullptr; } + virtual QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *) { return notAvailable; } + virtual QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() { return notAvailable; } + virtual QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *) { return notAvailable; } + virtual QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *) { return notAvailable; } + virtual QMaybe<QPlatformImageCapture *> createImageCapture(QImageCapture *) { return notAvailable; } - virtual QPlatformAudioInput *createAudioInput(QAudioInput *); - virtual QPlatformAudioOutput *createAudioOutput(QAudioOutput *); + virtual QMaybe<QPlatformAudioInput *> createAudioInput(QAudioInput *); + virtual QMaybe<QPlatformAudioOutput *> createAudioOutput(QAudioOutput *); - virtual QPlatformVideoSink *createVideoSink(QVideoSink *) { return nullptr; } + virtual QMaybe<QPlatformVideoSink *> createVideoSink(QVideoSink *) { return notAvailable; } protected: QPlatformVideoDevices *m_videoDevices = nullptr; diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp index 04a1e4a09..947d27e64 100644 --- a/src/multimedia/playback/qmediaplayer.cpp +++ b/src/multimedia/playback/qmediaplayer.cpp @@ -233,14 +233,14 @@ QMediaPlayer::QMediaPlayer(QObject *parent) { Q_D(QMediaPlayer); - d->control = QPlatformMediaIntegration::instance()->createPlayer(this); - if (!d->control) { // ### Should this be an assertion? - d->setError(QMediaPlayer::ResourceError, QMediaPlayer::tr("Platform does not support media playback.")); - return; + auto maybeControl = QPlatformMediaIntegration::instance()->createPlayer(this); + if (maybeControl) { + d->control = maybeControl.value(); + d->state = d->control->state(); + } else { + qWarning() << "Failed to initialize QMediaPlayer" << maybeControl.error(); + d->setError(QMediaPlayer::ResourceError, maybeControl.error()); } - Q_ASSERT(d->control); - - d->state = d->control->state(); } @@ -289,7 +289,7 @@ QMediaPlayer::PlaybackState QMediaPlayer::playbackState() const // In case if EndOfMedia status is already received // but state is not. - if (d->control != nullptr + if (d->control && d->control->mediaStatus() == QMediaPlayer::EndOfMedia && d->state != d->control->state()) { return d->control->state(); @@ -314,11 +314,7 @@ QMediaPlayer::MediaStatus QMediaPlayer::mediaStatus() const qint64 QMediaPlayer::duration() const { Q_D(const QMediaPlayer); - - if (d->control != nullptr) - return d->control->duration(); - - return 0; + return d->control ? d->control->duration() : 0; } /*! @@ -331,11 +327,7 @@ qint64 QMediaPlayer::duration() const qint64 QMediaPlayer::position() const { Q_D(const QMediaPlayer); - - if (d->control != nullptr) - return d->control->position(); - - return 0; + return d->control ? d->control->position() : 0; } /*! @@ -350,11 +342,7 @@ qint64 QMediaPlayer::position() const float QMediaPlayer::bufferProgress() const { Q_D(const QMediaPlayer); - - if (d->control != nullptr) - return d->control->bufferProgress(); - - return 0.; + return d->control ? d->control->bufferProgress() : 0; } /*! @@ -369,11 +357,7 @@ float QMediaPlayer::bufferProgress() const QMediaTimeRange QMediaPlayer::bufferedTimeRange() const { Q_D(const QMediaPlayer); - - if (d->control) - return d->control->availablePlaybackRanges(); - - return {}; + return d->control ? d->control->availablePlaybackRanges() : QMediaTimeRange{}; } /*! @@ -389,11 +373,7 @@ QMediaTimeRange QMediaPlayer::bufferedTimeRange() const bool QMediaPlayer::hasAudio() const { Q_D(const QMediaPlayer); - - if (d->control != nullptr) - return d->control->isAudioAvailable(); - - return false; + return d->control && d->control->isAudioAvailable(); } /*! @@ -409,11 +389,7 @@ bool QMediaPlayer::hasAudio() const bool QMediaPlayer::hasVideo() const { Q_D(const QMediaPlayer); - - if (d->control != nullptr) - return d->control->isVideoAvailable(); - - return false; + return d->control && d->control->isVideoAvailable(); } /*! @@ -425,11 +401,7 @@ bool QMediaPlayer::hasVideo() const bool QMediaPlayer::isSeekable() const { Q_D(const QMediaPlayer); - - if (d->control != nullptr) - return d->control->isSeekable(); - - return false; + return d->control && d->control->isSeekable(); } /*! @@ -438,11 +410,7 @@ bool QMediaPlayer::isSeekable() const qreal QMediaPlayer::playbackRate() const { Q_D(const QMediaPlayer); - - if (d->control != nullptr) - return d->control->playbackRate(); - - return 0.0; + return d->control ? d->control->playbackRate() : 0.; } /*! @@ -474,11 +442,7 @@ qreal QMediaPlayer::playbackRate() const int QMediaPlayer::loops() const { Q_D(const QMediaPlayer); - - if (d->control) - return d->control->loops(); - - return 1; + return d->control ? d->control->loops() : 1; } void QMediaPlayer::setLoops(int loops) @@ -559,7 +523,7 @@ void QMediaPlayer::pause() { Q_D(QMediaPlayer); - if (d->control != nullptr) + if (d->control) d->control->pause(); } @@ -580,7 +544,7 @@ void QMediaPlayer::stop() { Q_D(QMediaPlayer); - if (d->control != nullptr) + if (d->control) d->control->stop(); } @@ -588,7 +552,7 @@ void QMediaPlayer::setPosition(qint64 position) { Q_D(QMediaPlayer); - if (d->control == nullptr) + if (!d->control) return; if (!d->control->isSeekable()) return; @@ -599,7 +563,7 @@ void QMediaPlayer::setPlaybackRate(qreal rate) { Q_D(QMediaPlayer); - if (d->control != nullptr) + if (d->control) d->control->setPlaybackRate(rate); } @@ -696,12 +660,14 @@ void QMediaPlayer::setAudioOutput(QAudioOutput *output) if (oldOutput == output) return; d->audioOutput = output; - d->control->setAudioOutput(nullptr); + if (d->control) + d->control->setAudioOutput(nullptr); if (oldOutput) oldOutput->setDisconnectFunction({}); if (output) { output->setDisconnectFunction([this](){ setAudioOutput(nullptr); }); - d->control->setAudioOutput(output->handle()); + if (d->control) + d->control->setAudioOutput(output->handle()); } emit audioOutputChanged(); } @@ -807,9 +773,7 @@ QList<QMediaMetaData> QMediaPlayer::subtitleTracks() const int QMediaPlayer::activeAudioTrack() const { Q_D(const QMediaPlayer); - if (d->control) - return d->control->activeTrack(QPlatformMediaPlayer::AudioStream); - return 0; + return d->control ? d->control->activeTrack(QPlatformMediaPlayer::AudioStream) : 0; } /*! @@ -833,9 +797,7 @@ int QMediaPlayer::activeAudioTrack() const int QMediaPlayer::activeVideoTrack() const { Q_D(const QMediaPlayer); - if (d->control) - return d->control->activeTrack(QPlatformMediaPlayer::VideoStream); - return -1; + return d->control ? d->control->activeTrack(QPlatformMediaPlayer::VideoStream) : -1; } /*! @@ -859,9 +821,7 @@ int QMediaPlayer::activeVideoTrack() const int QMediaPlayer::activeSubtitleTrack() const { Q_D(const QMediaPlayer); - if (d->control) - return d->control->activeTrack(QPlatformMediaPlayer::SubtitleStream); - return -1; + return d->control ? d->control->activeTrack(QPlatformMediaPlayer::SubtitleStream) : -1; } void QMediaPlayer::setActiveAudioTrack(int index) @@ -925,16 +885,13 @@ QObject *QMediaPlayer::videoOutput() const void QMediaPlayer::setVideoOutput(QObject *output) { Q_D(QMediaPlayer); - if (!d->control) - return; if (d->videoOutput == output) return; - QVideoSink *sink = qobject_cast<QVideoSink *>(output); + auto *sink = qobject_cast<QVideoSink *>(output); if (!sink && output) { auto *mo = output->metaObject(); - if (output) - mo->invokeMethod(output, "videoSink", Q_RETURN_ARG(QVideoSink *, sink)); + mo->invokeMethod(output, "videoSink", Q_RETURN_ARG(QVideoSink *, sink)); } d->videoOutput = output; d->setVideoSink(sink); @@ -943,9 +900,6 @@ void QMediaPlayer::setVideoOutput(QObject *output) void QMediaPlayer::setVideoSink(QVideoSink *sink) { Q_D(QMediaPlayer); - if (!d->control) - return; - d->videoOutput = nullptr; d->setVideoSink(sink); } @@ -980,11 +934,7 @@ void QMediaPlayer::setVideoOutput(const QList<QVideoSink *> &sinks) bool QMediaPlayer::isAvailable() const { Q_D(const QMediaPlayer); - - if (!d->control) - return false; - - return true; + return bool(d->control); } /*! @@ -1009,7 +959,7 @@ bool QMediaPlayer::isAvailable() const QMediaMetaData QMediaPlayer::metaData() const { Q_D(const QMediaPlayer); - return d->control->metaData(); + return d->control ? d->control->metaData() : QMediaMetaData{}; } // Enums diff --git a/src/multimedia/playback/qmediaplayer_p.h b/src/multimedia/playback/qmediaplayer_p.h index db8412ef8..ce9bf091e 100644 --- a/src/multimedia/playback/qmediaplayer_p.h +++ b/src/multimedia/playback/qmediaplayer_p.h @@ -72,7 +72,8 @@ public: videoSink = sink; if (sink) sink->setSource(q); - control->setVideoSink(sink); + if (control) + control->setVideoSink(sink); emit q->videoOutputChanged(); } }; diff --git a/src/multimedia/recording/qmediacapturesession.cpp b/src/multimedia/recording/qmediacapturesession.cpp index 8fc1acdd5..523735c42 100644 --- a/src/multimedia/recording/qmediacapturesession.cpp +++ b/src/multimedia/recording/qmediacapturesession.cpp @@ -21,7 +21,7 @@ class QMediaCaptureSessionPrivate { public: QMediaCaptureSession *q = nullptr; - QPlatformMediaCaptureSession *captureSession; + QPlatformMediaCaptureSession *captureSession = nullptr; QAudioInput *audioInput = nullptr; QAudioOutput *audioOutput = nullptr; QCamera *camera = nullptr; @@ -39,7 +39,8 @@ public: videoSink = sink; if (sink) sink->setSource(q); - captureSession->setVideoPreview(sink); + if (captureSession) + captureSession->setVideoPreview(sink); emit q->videoOutputChanged(); } @@ -121,9 +122,13 @@ QMediaCaptureSession::QMediaCaptureSession(QObject *parent) d_ptr(new QMediaCaptureSessionPrivate) { d_ptr->q = this; - d_ptr->captureSession = QPlatformMediaIntegration::instance()->createCaptureSession(); - d_ptr->captureSession->setCaptureSession(this); - Q_ASSERT(d_ptr->captureSession); + auto maybeCaptureSession = QPlatformMediaIntegration::instance()->createCaptureSession(); + if (maybeCaptureSession) { + d_ptr->captureSession = maybeCaptureSession.value(); + d_ptr->captureSession->setCaptureSession(this); + } else { + qWarning() << "Failed to initialize QMediaCaptureSession" << maybeCaptureSession.error(); + } } /*! @@ -165,12 +170,14 @@ void QMediaCaptureSession::setAudioInput(QAudioInput *input) if (oldInput == input) return; d_ptr->audioInput = input; - d_ptr->captureSession->setAudioInput(nullptr); + if (d_ptr->captureSession) + d_ptr->captureSession->setAudioInput(nullptr); if (oldInput) oldInput->setDisconnectFunction({}); if (input) { input->setDisconnectFunction([this](){ setAudioInput(nullptr); }); - d_ptr->captureSession->setAudioInput(input->handle()); + if (d_ptr->captureSession) + d_ptr->captureSession->setAudioInput(input->handle()); } emit audioInputChanged(); } @@ -203,7 +210,8 @@ void QMediaCaptureSession::setCamera(QCamera *camera) if (oldCamera == camera) return; d_ptr->camera = camera; - d_ptr->captureSession->setCamera(nullptr); + if (d_ptr->captureSession) + d_ptr->captureSession->setCamera(nullptr); if (oldCamera) { if (oldCamera->captureSession() && oldCamera->captureSession() != this) oldCamera->captureSession()->setCamera(nullptr); @@ -212,7 +220,8 @@ void QMediaCaptureSession::setCamera(QCamera *camera) if (camera) { if (camera->captureSession()) camera->captureSession()->setCamera(nullptr); - d_ptr->captureSession->setCamera(camera->platformCamera()); + if (d_ptr->captureSession) + d_ptr->captureSession->setCamera(camera->platformCamera()); camera->setCaptureSession(this); } emit cameraChanged(); @@ -244,7 +253,8 @@ void QMediaCaptureSession::setImageCapture(QImageCapture *imageCapture) if (oldImageCapture == imageCapture) return; d_ptr->imageCapture = imageCapture; - d_ptr->captureSession->setImageCapture(nullptr); + if (d_ptr->captureSession) + d_ptr->captureSession->setImageCapture(nullptr); if (oldImageCapture) { if (oldImageCapture->captureSession() && oldImageCapture->captureSession() != this) oldImageCapture->captureSession()->setImageCapture(nullptr); @@ -253,7 +263,8 @@ void QMediaCaptureSession::setImageCapture(QImageCapture *imageCapture) if (imageCapture) { if (imageCapture->captureSession()) imageCapture->captureSession()->setImageCapture(nullptr); - d_ptr->captureSession->setImageCapture(imageCapture->platformImageCapture()); + if (d_ptr->captureSession) + d_ptr->captureSession->setImageCapture(imageCapture->platformImageCapture()); imageCapture->setCaptureSession(this); } emit imageCaptureChanged(); @@ -286,7 +297,8 @@ void QMediaCaptureSession::setRecorder(QMediaRecorder *recorder) if (oldRecorder == recorder) return; d_ptr->recorder = recorder; - d_ptr->captureSession->setMediaRecorder(nullptr); + if (d_ptr->captureSession) + d_ptr->captureSession->setMediaRecorder(nullptr); if (oldRecorder) { if (oldRecorder->captureSession() && oldRecorder->captureSession() != this) oldRecorder->captureSession()->setRecorder(nullptr); @@ -295,7 +307,8 @@ void QMediaCaptureSession::setRecorder(QMediaRecorder *recorder) if (recorder) { if (recorder->captureSession()) recorder->captureSession()->setRecorder(nullptr); - d_ptr->captureSession->setMediaRecorder(recorder->platformRecoder()); + if (d_ptr->captureSession) + d_ptr->captureSession->setMediaRecorder(recorder->platformRecoder()); recorder->setCaptureSession(this); } emit recorderChanged(); @@ -366,12 +379,14 @@ void QMediaCaptureSession::setAudioOutput(QAudioOutput *output) if (oldOutput == output) return; d_ptr->audioOutput = output; - d_ptr->captureSession->setAudioOutput(nullptr); + if (d_ptr->captureSession) + d_ptr->captureSession->setAudioOutput(nullptr); if (oldOutput) oldOutput->setDisconnectFunction({}); if (output) { output->setDisconnectFunction([this](){ setAudioOutput(nullptr); }); - d_ptr->captureSession->setAudioOutput(output->handle()); + if (d_ptr->captureSession) + d_ptr->captureSession->setAudioOutput(output->handle()); } emit audioOutputChanged(); } diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp index f9facb2d8..45c8c7546 100644 --- a/src/multimedia/recording/qmediarecorder.cpp +++ b/src/multimedia/recording/qmediarecorder.cpp @@ -107,7 +107,13 @@ QMediaRecorder::QMediaRecorder(QObject *parent) { Q_D(QMediaRecorder); d->q_ptr = this; - d->control = QPlatformMediaIntegration::instance()->createRecorder(this); + auto maybeControl = QPlatformMediaIntegration::instance()->createRecorder(this); + if (maybeControl) { + d->control = maybeControl.value(); + } else { + d->initErrorMessage = maybeControl.error(); + qWarning() << "Failed to initialize QMediaRecorder" << maybeControl.error(); + } } /*! @@ -191,7 +197,7 @@ void QMediaRecorder::setCaptureSession(QMediaCaptureSession *session) */ bool QMediaRecorder::isAvailable() const { - return d_func()->control != nullptr && d_func()->captureSession; + return d_func()->control && d_func()->captureSession; } QUrl QMediaRecorder::outputLocation() const @@ -203,7 +209,7 @@ void QMediaRecorder::setOutputLocation(const QUrl &location) { Q_D(QMediaRecorder); if (!d->control) { - emit errorOccurred(QMediaRecorder::ResourceError, tr("Not available")); + emit errorOccurred(QMediaRecorder::ResourceError, d->initErrorMessage); return; } d->control->setOutputLocation(location); @@ -257,7 +263,7 @@ QString QMediaRecorder::errorString() const { Q_D(const QMediaRecorder); - return d->control ? d->control->errorString() : tr("QMediaRecorder not supported on this platform"); + return d->control ? d->control->errorString() : d->initErrorMessage; } /*! \qmlproperty qint64 QtMultimedia::MediaRecorder::duration diff --git a/src/multimedia/recording/qmediarecorder_p.h b/src/multimedia/recording/qmediarecorder_p.h index 618106848..193aa5f00 100644 --- a/src/multimedia/recording/qmediarecorder_p.h +++ b/src/multimedia/recording/qmediarecorder_p.h @@ -37,6 +37,7 @@ public: QMediaCaptureSession *captureSession = nullptr; QPlatformMediaRecorder *control = nullptr; + QString initErrorMessage; bool settingsChanged = false; diff --git a/src/multimedia/video/qvideosink.cpp b/src/multimedia/video/qvideosink.cpp index 22c8b1bb0..3597255d5 100644 --- a/src/multimedia/video/qvideosink.cpp +++ b/src/multimedia/video/qvideosink.cpp @@ -22,7 +22,12 @@ public: QVideoSinkPrivate(QVideoSink *q) : q_ptr(q) { - videoSink = QPlatformMediaIntegration::instance()->createVideoSink(q); + auto maybeVideoSink = QPlatformMediaIntegration::instance()->createVideoSink(q); + if (maybeVideoSink) { + videoSink = maybeVideoSink.value(); + } else { + qWarning() << "Failed to create QVideoSink" << maybeVideoSink.error(); + } } ~QVideoSinkPrivate() { @@ -109,7 +114,8 @@ void QVideoSink::setRhi(QRhi *rhi) if (d->rhi == rhi) return; d->rhi = rhi; - d->videoSink->setRhi(rhi); + if (d->videoSink) + d->videoSink->setRhi(rhi); } /*! @@ -125,7 +131,7 @@ QPlatformVideoSink *QVideoSink::platformVideoSink() const */ QVideoFrame QVideoSink::videoFrame() const { - return d->videoSink->currentVideoFrame(); + return d->videoSink ? d->videoSink->currentVideoFrame() : QVideoFrame{}; } /*! @@ -133,7 +139,8 @@ QVideoFrame QVideoSink::videoFrame() const */ void QVideoSink::setVideoFrame(const QVideoFrame &frame) { - d->videoSink->setVideoFrame(frame); + if (d->videoSink) + d->videoSink->setVideoFrame(frame); } /*! @@ -141,7 +148,7 @@ void QVideoSink::setVideoFrame(const QVideoFrame &frame) */ QString QVideoSink::subtitleText() const { - return d->videoSink->subtitleText(); + return d->videoSink ? d->videoSink->subtitleText() : QString{}; } /*! @@ -149,7 +156,8 @@ QString QVideoSink::subtitleText() const */ void QVideoSink::setSubtitleText(const QString &subtitle) { - d->videoSink->setSubtitleText(subtitle); + if (d->videoSink) + d->videoSink->setSubtitleText(subtitle); } /*! diff --git a/src/plugins/multimedia/android/qandroidintegration.cpp b/src/plugins/multimedia/android/qandroidintegration.cpp index 1ecd66d49..b33717341 100644 --- a/src/plugins/multimedia/android/qandroidintegration.cpp +++ b/src/plugins/multimedia/android/qandroidintegration.cpp @@ -54,7 +54,7 @@ QAndroidIntegration::~QAndroidIntegration() delete m_formatInfo; } -QPlatformAudioDecoder *QAndroidIntegration::createAudioDecoder(QAudioDecoder *decoder) +QMaybe<QPlatformAudioDecoder *> QAndroidIntegration::createAudioDecoder(QAudioDecoder *decoder) { return new QAndroidAudioDecoder(decoder); } @@ -67,42 +67,42 @@ QPlatformMediaFormatInfo *QAndroidIntegration::formatInfo() } -QPlatformMediaCaptureSession *QAndroidIntegration::createCaptureSession() +QMaybe<QPlatformMediaCaptureSession *> QAndroidIntegration::createCaptureSession() { return new QAndroidMediaCaptureSession(); } -QPlatformMediaPlayer *QAndroidIntegration::createPlayer(QMediaPlayer *player) +QMaybe<QPlatformMediaPlayer *> QAndroidIntegration::createPlayer(QMediaPlayer *player) { return new QAndroidMediaPlayer(player); } -QPlatformCamera *QAndroidIntegration::createCamera(QCamera *camera) +QMaybe<QPlatformCamera *> QAndroidIntegration::createCamera(QCamera *camera) { return new QAndroidCamera(camera); } -QPlatformMediaRecorder *QAndroidIntegration::createRecorder(QMediaRecorder *recorder) +QMaybe<QPlatformMediaRecorder *> QAndroidIntegration::createRecorder(QMediaRecorder *recorder) { return new QAndroidMediaEncoder(recorder); } -QPlatformImageCapture *QAndroidIntegration::createImageCapture(QImageCapture *imageCapture) +QMaybe<QPlatformImageCapture *> QAndroidIntegration::createImageCapture(QImageCapture *imageCapture) { return new QAndroidImageCapture(imageCapture); } -QPlatformAudioOutput *QAndroidIntegration::createAudioOutput(QAudioOutput *q) +QMaybe<QPlatformAudioOutput *> QAndroidIntegration::createAudioOutput(QAudioOutput *q) { return new QAndroidAudioOutput(q); } -QPlatformAudioInput *QAndroidIntegration::createAudioInput(QAudioInput *audioInput) +QMaybe<QPlatformAudioInput *> QAndroidIntegration::createAudioInput(QAudioInput *audioInput) { return new QAndroidAudioInput(audioInput); } -QPlatformVideoSink *QAndroidIntegration::createVideoSink(QVideoSink *sink) +QMaybe<QPlatformVideoSink *> QAndroidIntegration::createVideoSink(QVideoSink *sink) { return new QAndroidVideoSink(sink); } diff --git a/src/plugins/multimedia/android/qandroidintegration_p.h b/src/plugins/multimedia/android/qandroidintegration_p.h index 4072b014d..d6df4dbef 100644 --- a/src/plugins/multimedia/android/qandroidintegration_p.h +++ b/src/plugins/multimedia/android/qandroidintegration_p.h @@ -29,17 +29,17 @@ public: QPlatformMediaFormatInfo *formatInfo() override; - QPlatformAudioDecoder *createAudioDecoder(QAudioDecoder *decoder) override; - QPlatformMediaCaptureSession *createCaptureSession() override; - QPlatformMediaPlayer *createPlayer(QMediaPlayer *player) override; - QPlatformCamera *createCamera(QCamera *camera) override; - QPlatformMediaRecorder *createRecorder(QMediaRecorder *recorder) override; - QPlatformImageCapture *createImageCapture(QImageCapture *imageCapture) override; + QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *decoder) override; + QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() override; + QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *player) override; + QMaybe<QPlatformCamera *> createCamera(QCamera *camera) override; + QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *recorder) override; + QMaybe<QPlatformImageCapture *> createImageCapture(QImageCapture *imageCapture) override; - QPlatformAudioOutput *createAudioOutput(QAudioOutput *q) override; - QPlatformAudioInput *createAudioInput(QAudioInput *audioInput) override; + QMaybe<QPlatformAudioOutput *> createAudioOutput(QAudioOutput *q) override; + QMaybe<QPlatformAudioInput *> createAudioInput(QAudioInput *audioInput) override; - QPlatformVideoSink *createVideoSink(QVideoSink *) override; + QMaybe<QPlatformVideoSink *> createVideoSink(QVideoSink *) override; QList<QCameraDevice> videoInputs() override; QPlatformMediaFormatInfo *m_formatInfo = nullptr; diff --git a/src/plugins/multimedia/darwin/qdarwinintegration.mm b/src/plugins/multimedia/darwin/qdarwinintegration.mm index 314ceaff6..5e26fe5c4 100644 --- a/src/plugins/multimedia/darwin/qdarwinintegration.mm +++ b/src/plugins/multimedia/darwin/qdarwinintegration.mm @@ -57,37 +57,37 @@ QPlatformMediaFormatInfo *QDarwinIntegration::formatInfo() return m_formatInfo; } -QPlatformAudioDecoder *QDarwinIntegration::createAudioDecoder(QAudioDecoder *decoder) +QMaybe<QPlatformAudioDecoder *> QDarwinIntegration::createAudioDecoder(QAudioDecoder *decoder) { return new AVFAudioDecoder(decoder); } -QPlatformMediaCaptureSession *QDarwinIntegration::createCaptureSession() +QMaybe<QPlatformMediaCaptureSession *> QDarwinIntegration::createCaptureSession() { return new AVFCameraService; } -QPlatformMediaPlayer *QDarwinIntegration::createPlayer(QMediaPlayer *player) +QMaybe<QPlatformMediaPlayer *> QDarwinIntegration::createPlayer(QMediaPlayer *player) { return new AVFMediaPlayer(player); } -QPlatformCamera *QDarwinIntegration::createCamera(QCamera *camera) +QMaybe<QPlatformCamera *> QDarwinIntegration::createCamera(QCamera *camera) { return new AVFCamera(camera); } -QPlatformMediaRecorder *QDarwinIntegration::createRecorder(QMediaRecorder *recorder) +QMaybe<QPlatformMediaRecorder *> QDarwinIntegration::createRecorder(QMediaRecorder *recorder) { return new AVFMediaEncoder(recorder); } -QPlatformImageCapture *QDarwinIntegration::createImageCapture(QImageCapture *imageCapture) +QMaybe<QPlatformImageCapture *> QDarwinIntegration::createImageCapture(QImageCapture *imageCapture) { return new AVFImageCapture(imageCapture); } -QPlatformVideoSink *QDarwinIntegration::createVideoSink(QVideoSink *sink) +QMaybe<QPlatformVideoSink *> QDarwinIntegration::createVideoSink(QVideoSink *sink) { return new AVFVideoSink(sink); } diff --git a/src/plugins/multimedia/darwin/qdarwinintegration_p.h b/src/plugins/multimedia/darwin/qdarwinintegration_p.h index eb6bfbdce..f8f897c51 100644 --- a/src/plugins/multimedia/darwin/qdarwinintegration_p.h +++ b/src/plugins/multimedia/darwin/qdarwinintegration_p.h @@ -29,14 +29,14 @@ public: QPlatformMediaFormatInfo *formatInfo() override; - QPlatformAudioDecoder *createAudioDecoder(QAudioDecoder *) override; - QPlatformMediaCaptureSession *createCaptureSession() override; - QPlatformMediaPlayer *createPlayer(QMediaPlayer *player) override; - QPlatformCamera *createCamera(QCamera *camera) override; - QPlatformMediaRecorder *createRecorder(QMediaRecorder *) override; - QPlatformImageCapture *createImageCapture(QImageCapture *) override; - - QPlatformVideoSink *createVideoSink(QVideoSink *) override; + QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *) override; + QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() override; + QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *player) override; + QMaybe<QPlatformCamera *> createCamera(QCamera *camera) override; + QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *) override; + QMaybe<QPlatformImageCapture *> createImageCapture(QImageCapture *) override; + + QMaybe<QPlatformVideoSink *> createVideoSink(QVideoSink *) override; QPlatformMediaFormatInfo *m_formatInfo = nullptr; }; diff --git a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp index b51a9996f..e55444cc2 100644 --- a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp +++ b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp @@ -86,22 +86,22 @@ QPlatformMediaFormatInfo *QFFmpegMediaIntegration::formatInfo() return m_formatsInfo; } -QPlatformAudioDecoder *QFFmpegMediaIntegration::createAudioDecoder(QAudioDecoder *decoder) +QMaybe<QPlatformAudioDecoder *> QFFmpegMediaIntegration::createAudioDecoder(QAudioDecoder *decoder) { return new QFFmpegAudioDecoder(decoder); } -QPlatformMediaCaptureSession *QFFmpegMediaIntegration::createCaptureSession() +QMaybe<QPlatformMediaCaptureSession *> QFFmpegMediaIntegration::createCaptureSession() { return new QFFmpegMediaCaptureSession(); } -QPlatformMediaPlayer *QFFmpegMediaIntegration::createPlayer(QMediaPlayer *player) +QMaybe<QPlatformMediaPlayer *> QFFmpegMediaIntegration::createPlayer(QMediaPlayer *player) { return new QFFmpegMediaPlayer(player); } -QPlatformCamera *QFFmpegMediaIntegration::createCamera(QCamera *camera) +QMaybe<QPlatformCamera *> QFFmpegMediaIntegration::createCamera(QCamera *camera) { #ifdef Q_OS_DARWIN return new QAVFCamera(camera); @@ -115,22 +115,22 @@ QPlatformCamera *QFFmpegMediaIntegration::createCamera(QCamera *camera) #endif } -QPlatformMediaRecorder *QFFmpegMediaIntegration::createRecorder(QMediaRecorder *recorder) +QMaybe<QPlatformMediaRecorder *> QFFmpegMediaIntegration::createRecorder(QMediaRecorder *recorder) { return new QFFmpegMediaRecorder(recorder); } -QPlatformImageCapture *QFFmpegMediaIntegration::createImageCapture(QImageCapture *imageCapture) +QMaybe<QPlatformImageCapture *> QFFmpegMediaIntegration::createImageCapture(QImageCapture *imageCapture) { return new QFFmpegImageCapture(imageCapture); } -QPlatformVideoSink *QFFmpegMediaIntegration::createVideoSink(QVideoSink *sink) +QMaybe<QPlatformVideoSink *> QFFmpegMediaIntegration::createVideoSink(QVideoSink *sink) { return new QFFmpegVideoSink(sink); } -QPlatformAudioInput *QFFmpegMediaIntegration::createAudioInput(QAudioInput *input) +QMaybe<QPlatformAudioInput *> QFFmpegMediaIntegration::createAudioInput(QAudioInput *input) { return new QFFmpegAudioInput(input); } diff --git a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h index 08ca227a2..35c062f16 100644 --- a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h +++ b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h @@ -30,16 +30,17 @@ public: static QFFmpegMediaIntegration *instance() { return static_cast<QFFmpegMediaIntegration *>(QPlatformMediaIntegration::instance()); } QPlatformMediaFormatInfo *formatInfo() override; - QPlatformAudioDecoder *createAudioDecoder(QAudioDecoder *decoder) override; - QPlatformMediaCaptureSession *createCaptureSession() override; - QPlatformMediaPlayer *createPlayer(QMediaPlayer *player) override; - QPlatformCamera *createCamera(QCamera *) override; - QPlatformMediaRecorder *createRecorder(QMediaRecorder *) override; - QPlatformImageCapture *createImageCapture(QImageCapture *) override; - QPlatformVideoSink *createVideoSink(QVideoSink *sink) override; + QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *decoder) override; + QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() override; + QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *player) override; + QMaybe<QPlatformCamera *> createCamera(QCamera *) override; + QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *) override; + QMaybe<QPlatformImageCapture *> createImageCapture(QImageCapture *) override; - QPlatformAudioInput *createAudioInput(QAudioInput *input) override; + QMaybe<QPlatformVideoSink *> createVideoSink(QVideoSink *sink) override; + + QMaybe<QPlatformAudioInput *> createAudioInput(QAudioInput *input) override; // QPlatformAudioOutput *createAudioOutput(QAudioOutput *) override; QFFmpegMediaFormatInfo *m_formatsInfo = nullptr; diff --git a/src/plugins/multimedia/gstreamer/qgstreamerintegration.cpp b/src/plugins/multimedia/gstreamer/qgstreamerintegration.cpp index bb2892f83..817aae1c2 100644 --- a/src/plugins/multimedia/gstreamer/qgstreamerintegration.cpp +++ b/src/plugins/multimedia/gstreamer/qgstreamerintegration.cpp @@ -59,47 +59,47 @@ const QGstreamerFormatInfo *QGstreamerIntegration::gstFormatsInfo() const return m_formatsInfo; } -QPlatformAudioDecoder *QGstreamerIntegration::createAudioDecoder(QAudioDecoder *decoder) +QMaybe<QPlatformAudioDecoder *> QGstreamerIntegration::createAudioDecoder(QAudioDecoder *decoder) { return new QGstreamerAudioDecoder(decoder); } -QPlatformMediaCaptureSession *QGstreamerIntegration::createCaptureSession() +QMaybe<QPlatformMediaCaptureSession *> QGstreamerIntegration::createCaptureSession() { return new QGstreamerMediaCapture(); } -QPlatformMediaPlayer *QGstreamerIntegration::createPlayer(QMediaPlayer *player) +QMaybe<QPlatformMediaPlayer *> QGstreamerIntegration::createPlayer(QMediaPlayer *player) { return new QGstreamerMediaPlayer(player); } -QPlatformCamera *QGstreamerIntegration::createCamera(QCamera *camera) +QMaybe<QPlatformCamera *> QGstreamerIntegration::createCamera(QCamera *camera) { return new QGstreamerCamera(camera); } -QPlatformMediaRecorder *QGstreamerIntegration::createRecorder(QMediaRecorder *recorder) +QMaybe<QPlatformMediaRecorder *> QGstreamerIntegration::createRecorder(QMediaRecorder *recorder) { return new QGstreamerMediaEncoder(recorder); } -QPlatformImageCapture *QGstreamerIntegration::createImageCapture(QImageCapture *imageCapture) +QMaybe<QPlatformImageCapture *> QGstreamerIntegration::createImageCapture(QImageCapture *imageCapture) { return new QGstreamerImageCapture(imageCapture); } -QPlatformVideoSink *QGstreamerIntegration::createVideoSink(QVideoSink *sink) +QMaybe<QPlatformVideoSink *> QGstreamerIntegration::createVideoSink(QVideoSink *sink) { return new QGstreamerVideoSink(sink); } -QPlatformAudioInput *QGstreamerIntegration::createAudioInput(QAudioInput *q) +QMaybe<QPlatformAudioInput *> QGstreamerIntegration::createAudioInput(QAudioInput *q) { return new QGstreamerAudioInput(q); } -QPlatformAudioOutput *QGstreamerIntegration::createAudioOutput(QAudioOutput *q) +QMaybe<QPlatformAudioOutput *> QGstreamerIntegration::createAudioOutput(QAudioOutput *q) { return new QGstreamerAudioOutput(q); } diff --git a/src/plugins/multimedia/gstreamer/qgstreamerintegration_p.h b/src/plugins/multimedia/gstreamer/qgstreamerintegration_p.h index 2668b51d0..387909b2e 100644 --- a/src/plugins/multimedia/gstreamer/qgstreamerintegration_p.h +++ b/src/plugins/multimedia/gstreamer/qgstreamerintegration_p.h @@ -31,17 +31,17 @@ public: static QGstreamerIntegration *instance() { return static_cast<QGstreamerIntegration *>(QPlatformMediaIntegration::instance()); } QPlatformMediaFormatInfo *formatInfo() override; - QPlatformAudioDecoder *createAudioDecoder(QAudioDecoder *decoder) override; - QPlatformMediaCaptureSession *createCaptureSession() override; - QPlatformMediaPlayer *createPlayer(QMediaPlayer *player) override; - QPlatformCamera *createCamera(QCamera *) override; - QPlatformMediaRecorder *createRecorder(QMediaRecorder *) override; - QPlatformImageCapture *createImageCapture(QImageCapture *) override; + QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *decoder) override; + QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() override; + QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *player) override; + QMaybe<QPlatformCamera *> createCamera(QCamera *) override; + QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *) override; + QMaybe<QPlatformImageCapture *> createImageCapture(QImageCapture *) override; - QPlatformVideoSink *createVideoSink(QVideoSink *sink) override; + QMaybe<QPlatformVideoSink *> createVideoSink(QVideoSink *sink) override; - QPlatformAudioInput *createAudioInput(QAudioInput *) override; - QPlatformAudioOutput *createAudioOutput(QAudioOutput *) override; + QMaybe<QPlatformAudioInput *> createAudioInput(QAudioInput *) override; + QMaybe<QPlatformAudioOutput *> createAudioOutput(QAudioOutput *) override; const QGstreamerFormatInfo *gstFormatsInfo() const; GstDevice *videoDevice(const QByteArray &id) const; diff --git a/src/plugins/multimedia/qnx/qqnxmediaintegration.cpp b/src/plugins/multimedia/qnx/qqnxmediaintegration.cpp index 05f63cc4c..0af18e95b 100644 --- a/src/plugins/multimedia/qnx/qqnxmediaintegration.cpp +++ b/src/plugins/multimedia/qnx/qqnxmediaintegration.cpp @@ -49,32 +49,32 @@ QPlatformMediaFormatInfo *QQnxMediaIntegration::formatInfo() return m_formatInfo; } -QPlatformVideoSink *QQnxMediaIntegration::createVideoSink(QVideoSink *sink) +QMaybe<QPlatformVideoSink *> QQnxMediaIntegration::createVideoSink(QVideoSink *sink) { return new QQnxVideoSink(sink); } -QPlatformMediaPlayer *QQnxMediaIntegration::createPlayer(QMediaPlayer *parent) +QMaybe<QPlatformMediaPlayer *> QQnxMediaIntegration::createPlayer(QMediaPlayer *parent) { return new QQnxMediaPlayer(parent); } -QPlatformMediaCaptureSession *QQnxMediaIntegration::createCaptureSession() +QMaybe<QPlatformMediaCaptureSession *> QQnxMediaIntegration::createCaptureSession() { return new QQnxMediaCaptureSession(); } -QPlatformMediaRecorder *QQnxMediaIntegration::createRecorder(QMediaRecorder *parent) +QMaybe<QPlatformMediaRecorder *> QQnxMediaIntegration::createRecorder(QMediaRecorder *parent) { return new QQnxMediaRecorder(parent); } -QPlatformCamera *QQnxMediaIntegration::createCamera(QCamera *parent) +QMaybe<QPlatformCamera *> QQnxMediaIntegration::createCamera(QCamera *parent) { return new QQnxPlatformCamera(parent); } -QPlatformImageCapture *QQnxMediaIntegration::createImageCapture(QImageCapture *parent) +QMaybe<QPlatformImageCapture *> QQnxMediaIntegration::createImageCapture(QImageCapture *parent) { return new QQnxImageCapture(parent); } diff --git a/src/plugins/multimedia/qnx/qqnxmediaintegration_p.h b/src/plugins/multimedia/qnx/qqnxmediaintegration_p.h index 7d185543d..1cb7c0219 100644 --- a/src/plugins/multimedia/qnx/qqnxmediaintegration_p.h +++ b/src/plugins/multimedia/qnx/qqnxmediaintegration_p.h @@ -30,17 +30,17 @@ public: QPlatformMediaFormatInfo *formatInfo() override; - QPlatformVideoSink *createVideoSink(QVideoSink *sink) override; + QMaybe<QPlatformVideoSink *> createVideoSink(QVideoSink *sink) override; - QPlatformMediaPlayer *createPlayer(QMediaPlayer *parent) override; + QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *parent) override; - QPlatformMediaCaptureSession *createCaptureSession() override; + QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() override; - QPlatformMediaRecorder *createRecorder(QMediaRecorder *parent) override; + QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *parent) override; - QPlatformCamera *createCamera(QCamera *parent) override; + QMaybe<QPlatformCamera *> createCamera(QCamera *parent) override; - QPlatformImageCapture *createImageCapture(QImageCapture *parent) override; + QMaybe<QPlatformImageCapture *> createImageCapture(QImageCapture *parent) override; QQnxFormatInfo *m_formatInfo = nullptr; }; diff --git a/src/plugins/multimedia/windows/qwindowsintegration.cpp b/src/plugins/multimedia/windows/qwindowsintegration.cpp index 883eda6cf..7cb8dd908 100644 --- a/src/plugins/multimedia/windows/qwindowsintegration.cpp +++ b/src/plugins/multimedia/windows/qwindowsintegration.cpp @@ -56,37 +56,37 @@ QPlatformMediaFormatInfo *QWindowsMediaIntegration::formatInfo() return m_formatInfo; } -QPlatformMediaCaptureSession *QWindowsMediaIntegration::createCaptureSession() +QMaybe<QPlatformMediaCaptureSession *> QWindowsMediaIntegration::createCaptureSession() { return new QWindowsMediaCaptureService(); } -QPlatformAudioDecoder *QWindowsMediaIntegration::createAudioDecoder(QAudioDecoder *decoder) +QMaybe<QPlatformAudioDecoder *> QWindowsMediaIntegration::createAudioDecoder(QAudioDecoder *decoder) { return new MFAudioDecoderControl(decoder); } -QPlatformMediaPlayer *QWindowsMediaIntegration::createPlayer(QMediaPlayer *parent) +QMaybe<QPlatformMediaPlayer *> QWindowsMediaIntegration::createPlayer(QMediaPlayer *parent) { return new MFPlayerControl(parent); } -QPlatformCamera *QWindowsMediaIntegration::createCamera(QCamera *camera) +QMaybe<QPlatformCamera *> QWindowsMediaIntegration::createCamera(QCamera *camera) { return new QWindowsCamera(camera); } -QPlatformMediaRecorder *QWindowsMediaIntegration::createRecorder(QMediaRecorder *recorder) +QMaybe<QPlatformMediaRecorder *> QWindowsMediaIntegration::createRecorder(QMediaRecorder *recorder) { return new QWindowsMediaEncoder(recorder); } -QPlatformImageCapture *QWindowsMediaIntegration::createImageCapture(QImageCapture *imageCapture) +QMaybe<QPlatformImageCapture *> QWindowsMediaIntegration::createImageCapture(QImageCapture *imageCapture) { return new QWindowsImageCapture(imageCapture); } -QPlatformVideoSink *QWindowsMediaIntegration::createVideoSink(QVideoSink *sink) +QMaybe<QPlatformVideoSink *> QWindowsMediaIntegration::createVideoSink(QVideoSink *sink) { return new MFEvrVideoWindowControl(sink); } diff --git a/src/plugins/multimedia/windows/qwindowsintegration_p.h b/src/plugins/multimedia/windows/qwindowsintegration_p.h index 2ab9f82c4..81f5b4572 100644 --- a/src/plugins/multimedia/windows/qwindowsintegration_p.h +++ b/src/plugins/multimedia/windows/qwindowsintegration_p.h @@ -31,15 +31,15 @@ public: QPlatformMediaFormatInfo *formatInfo() override; - QPlatformMediaCaptureSession *createCaptureSession() override; + QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() override; - QPlatformAudioDecoder *createAudioDecoder(QAudioDecoder *decoder) override; - QPlatformMediaPlayer *createPlayer(QMediaPlayer *parent) override; - QPlatformCamera *createCamera(QCamera *camera) override; - QPlatformMediaRecorder *createRecorder(QMediaRecorder *recorder) override; - QPlatformImageCapture *createImageCapture(QImageCapture *imageCapture) override; + QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *decoder) override; + QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *parent) override; + QMaybe<QPlatformCamera *> createCamera(QCamera *camera) override; + QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *recorder) override; + QMaybe<QPlatformImageCapture *> createImageCapture(QImageCapture *imageCapture) override; - QPlatformVideoSink *createVideoSink(QVideoSink *sink) override; + QMaybe<QPlatformVideoSink *> createVideoSink(QVideoSink *sink) override; QWindowsFormatInfo *m_formatInfo = nullptr; }; |