diff options
233 files changed, 3390 insertions, 918 deletions
diff --git a/.qmake.conf b/.qmake.conf index 0338efe07..dc68d3884 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.10.1 +MODULE_VERSION = 5.11.0 diff --git a/examples/multimedia/video/qmlvideofilter_opencl/main.cpp b/examples/multimedia/video/qmlvideofilter_opencl/main.cpp index df8222432..cf2fcbd7b 100644 --- a/examples/multimedia/video/qmlvideofilter_opencl/main.cpp +++ b/examples/multimedia/video/qmlvideofilter_opencl/main.cpp @@ -88,7 +88,7 @@ public: qreal factor() const { return m_factor; } void setFactor(qreal v); - QVideoFilterRunnable *createFilterRunnable() Q_DECL_OVERRIDE; + QVideoFilterRunnable *createFilterRunnable() override; signals: void factorChanged(); @@ -102,7 +102,7 @@ class CLFilterRunnable : public QVideoFilterRunnable public: CLFilterRunnable(CLFilter *filter); ~CLFilterRunnable(); - QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags) Q_DECL_OVERRIDE; + QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags) override; private: void releaseTextures(); @@ -423,7 +423,7 @@ class InfoFilter : public QAbstractVideoFilter Q_OBJECT public: - QVideoFilterRunnable *createFilterRunnable() Q_DECL_OVERRIDE; + QVideoFilterRunnable *createFilterRunnable() override; signals: void finished(QObject *result); @@ -436,7 +436,7 @@ class InfoFilterRunnable : public QVideoFilterRunnable { public: InfoFilterRunnable(InfoFilter *filter) : m_filter(filter) { } - QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags) Q_DECL_OVERRIDE; + QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags) override; private: InfoFilter *m_filter; diff --git a/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp b/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp index 2f5c16d5e..7ee3eb541 100644 --- a/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp +++ b/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp @@ -102,7 +102,7 @@ void VideoWidget::paintEvent(QPaintEvent *event) QBrush brush = palette().background(); - foreach (const QRect &rect, region.rects()) + for (const QRect &rect : region) painter.fillRect(rect, brush); } diff --git a/examples/multimediawidgets/player/main.cpp b/examples/multimediawidgets/player/main.cpp index 9e6d9358c..a20fb1c4f 100644 --- a/examples/multimediawidgets/player/main.cpp +++ b/examples/multimediawidgets/player/main.cpp @@ -63,14 +63,21 @@ int main(int argc, char *argv[]) QCoreApplication::setOrganizationName("QtProject"); QCoreApplication::setApplicationVersion(QT_VERSION_STR); QCommandLineParser parser; + QCommandLineOption customAudioRoleOption("custom-audio-role", + "Set a custom audio role for the player.", + "role"); parser.setApplicationDescription("Qt MultiMedia Player Example"); parser.addHelpOption(); parser.addVersionOption(); - parser.addPositionalArgument("url", "The URL to open."); + parser.addOption(customAudioRoleOption); + parser.addPositionalArgument("url", "The URL(s) to open."); parser.process(app); Player player; + if (parser.isSet(customAudioRoleOption)) + player.setCustomAudioRole(parser.value(customAudioRoleOption)); + if (!parser.positionalArguments().isEmpty() && player.isPlayerAvailable()) { QList<QUrl> urls; for (auto &a: parser.positionalArguments()) diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp index 8113df70e..89246e65c 100644 --- a/examples/multimediawidgets/player/player.cpp +++ b/examples/multimediawidgets/player/player.cpp @@ -174,6 +174,15 @@ Player::Player(QWidget *parent) layout->addLayout(hLayout); layout->addLayout(controlLayout); layout->addLayout(histogramLayout); +#if defined(Q_OS_QNX) + // On QNX, the main window doesn't have a title bar (or any other decorations). + // Create a status bar for the status information instead. + m_statusLabel = new QLabel; + m_statusBar = new QStatusBar; + m_statusBar->addPermanentWidget(m_statusLabel); + m_statusBar->setSizeGripEnabled(false); // Without mouse grabbing, it doesn't work very well. + layout->addWidget(m_statusBar); +#endif setLayout(layout); @@ -234,6 +243,11 @@ void Player::addToPlaylist(const QList<QUrl> &urls) } } +void Player::setCustomAudioRole(const QString &role) +{ + m_player->setCustomAudioRole(role); +} + void Player::durationChanged(qint64 duration) { m_duration = duration / 1000; @@ -303,15 +317,17 @@ void Player::statusChanged(QMediaPlayer::MediaStatus status) case QMediaPlayer::UnknownMediaStatus: case QMediaPlayer::NoMedia: case QMediaPlayer::LoadedMedia: - case QMediaPlayer::BufferingMedia: - case QMediaPlayer::BufferedMedia: setStatusInfo(QString()); break; case QMediaPlayer::LoadingMedia: setStatusInfo(tr("Loading...")); break; + case QMediaPlayer::BufferingMedia: + case QMediaPlayer::BufferedMedia: + setStatusInfo(tr("Buffering %1%").arg(m_player->bufferStatus())); + break; case QMediaPlayer::StalledMedia: - setStatusInfo(tr("Media Stalled")); + setStatusInfo(tr("Stalled %1%").arg(m_player->bufferStatus())); break; case QMediaPlayer::EndOfMedia: QApplication::alert(this); @@ -342,7 +358,10 @@ void Player::handleCursor(QMediaPlayer::MediaStatus status) void Player::bufferingProgress(int progress) { - setStatusInfo(tr("Buffering %4%").arg(progress)); + if (m_player->mediaStatus() == QMediaPlayer::StalledMedia) + setStatusInfo(tr("Stalled %1%").arg(progress)); + else + setStatusInfo(tr("Buffering %1%").arg(progress)); } void Player::videoAvailableChanged(bool available) @@ -364,19 +383,31 @@ void Player::videoAvailableChanged(bool available) void Player::setTrackInfo(const QString &info) { m_trackInfo = info; - if (!m_statusInfo.isEmpty()) - setWindowTitle(QString("%1 | %2").arg(m_trackInfo).arg(m_statusInfo)); - else - setWindowTitle(m_trackInfo); + + if (m_statusBar) { + m_statusBar->showMessage(m_trackInfo); + m_statusLabel->setText(m_statusInfo); + } else { + if (!m_statusInfo.isEmpty()) + setWindowTitle(QString("%1 | %2").arg(m_trackInfo).arg(m_statusInfo)); + else + setWindowTitle(m_trackInfo); + } } void Player::setStatusInfo(const QString &info) { m_statusInfo = info; - if (!m_statusInfo.isEmpty()) - setWindowTitle(QString("%1 | %2").arg(m_trackInfo).arg(m_statusInfo)); - else - setWindowTitle(m_trackInfo); + + if (m_statusBar) { + m_statusBar->showMessage(m_trackInfo); + m_statusLabel->setText(m_statusInfo); + } else { + if (!m_statusInfo.isEmpty()) + setWindowTitle(QString("%1 | %2").arg(m_trackInfo).arg(m_statusInfo)); + else + setWindowTitle(m_trackInfo); + } } void Player::displayErrorMessage() diff --git a/examples/multimediawidgets/player/player.h b/examples/multimediawidgets/player/player.h index 1b30204f9..3002c9811 100644 --- a/examples/multimediawidgets/player/player.h +++ b/examples/multimediawidgets/player/player.h @@ -62,6 +62,7 @@ class QMediaPlayer; class QModelIndex; class QPushButton; class QSlider; +class QStatusBar; class QVideoProbe; class QVideoWidget; class QAudioProbe; @@ -81,6 +82,7 @@ public: bool isPlayerAvailable() const; void addToPlaylist(const QList<QUrl> &urls); + void setCustomAudioRole(const QString &role); signals: void fullScreenChanged(bool fullScreen); @@ -122,6 +124,8 @@ private: QPushButton *m_fullScreenButton = nullptr; QPushButton *m_colorButton = nullptr; QDialog *m_colorDialog = nullptr; + QLabel *m_statusLabel = nullptr; + QStatusBar *m_statusBar = nullptr; QLabel *m_labelHistogram = nullptr; HistogramWidget *m_videoHistogram = nullptr; diff --git a/src/gsttools/qgstreamerbushelper.cpp b/src/gsttools/qgstreamerbushelper.cpp index 89b2c4ae7..bd35d4b0a 100644 --- a/src/gsttools/qgstreamerbushelper.cpp +++ b/src/gsttools/qgstreamerbushelper.cpp @@ -58,7 +58,7 @@ public: m_tag(0), m_bus(bus), m_helper(parent), - m_intervalTimer(Q_NULLPTR) + m_intervalTimer(nullptr) { // glib event loop can be disabled either by env variable or QT_NO_GLIB define, so check the dispacher QAbstractEventDispatcher *dispatcher = QCoreApplication::eventDispatcher(); diff --git a/src/imports/audioengine/qaudioengine_openal_p.h b/src/imports/audioengine/qaudioengine_openal_p.h index c1dbf6aa2..92735ba86 100644 --- a/src/imports/audioengine/qaudioengine_openal_p.h +++ b/src/imports/audioengine/qaudioengine_openal_p.h @@ -91,12 +91,12 @@ public: StaticSoundBufferAL(QObject *parent, const QUrl &url, QSampleCache *sampleLoader); ~StaticSoundBufferAL(); - State state() const Q_DECL_OVERRIDE; + State state() const override; - void load() Q_DECL_OVERRIDE; + void load() override; - void bindToSource(ALuint alSource) Q_DECL_OVERRIDE; - void unbindFromSource(ALuint alSource) Q_DECL_OVERRIDE; + void bindToSource(ALuint alSource) override; + void unbindFromSource(ALuint alSource) override; inline long addRef() { return ++m_ref; } inline long release() { return --m_ref; } diff --git a/src/imports/multimedia/Video.qml b/src/imports/multimedia/Video.qml index 66b86c74b..19c437869 100644 --- a/src/imports/multimedia/Video.qml +++ b/src/imports/multimedia/Video.qml @@ -38,7 +38,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtMultimedia 5.9 +import QtMultimedia 5.11 /*! \qmltype Video @@ -302,13 +302,31 @@ Item { \li MediaPlayer.AccessibilityRole - for accessibility, such as with a screen reader. \li MediaPlayer.SonificationRole - sonification, such as with user interface sounds. \li MediaPlayer.GameRole - game audio. + \li MediaPlayer.CustomRole - The role is specified by customAudioRole. \endlist + customAudioRole is cleared when this property is set to anything other than CustomRole. + \since 5.6 */ property alias audioRole: player.audioRole /*! + \qmlproperty string Video::customAudioRole + + This property holds the role of the audio stream when the backend supports audio roles + unknown to Qt. It can be set to specify the type of audio being played, allowing the + system to make appropriate decisions when it comes to volume, routing or post-processing. + + The audio role must be set before setting the source property. + + audioRole is set to CustomRole when this property is set. + + \since 5.11 + */ + property alias customAudioRole: player.customAudioRole + + /*! \qmlproperty bool Video::seekable This property holds whether the playback position of the video can be diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp index 6a316a298..6d9292221 100644 --- a/src/imports/multimedia/multimedia.cpp +++ b/src/imports/multimedia/multimedia.cpp @@ -151,6 +151,16 @@ public: qmlRegisterUncreatableType<QDeclarativeCameraFlash, 1>(uri, 5, 9, "CameraFlash", trUtf8("CameraFlash is provided by Camera")); + // 5.11 types + qmlRegisterType<QDeclarativeAudio, 3>(uri, 5, 11, "Audio"); + qmlRegisterType<QDeclarativeAudio, 3>(uri, 5, 11, "MediaPlayer"); + qmlRegisterUncreatableType<QDeclarativeCameraFocus, 1>(uri, 5, 11, "CameraFocus", + trUtf8("CameraFocus is provided by Camera")); + qmlRegisterUncreatableType<QDeclarativeCameraExposure, 1>(uri, 5, 11, "CameraExposure", + trUtf8("CameraExposure is provided by Camera")); + qmlRegisterUncreatableType<QDeclarativeCameraImageProcessing, 3>(uri, 5, 11, "CameraImageProcessing", + trUtf8("CameraImageProcessing is provided by Camera")); + qmlRegisterType<QDeclarativeMediaMetaData>(); qmlRegisterType<QAbstractVideoFilter>(); } diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp index 652296509..65606b3cf 100644 --- a/src/imports/multimedia/qdeclarativeaudio.cpp +++ b/src/imports/multimedia/qdeclarativeaudio.cpp @@ -179,8 +179,11 @@ QDeclarativeAudio::Availability QDeclarativeAudio::availability() const \li AccessibilityRole - for accessibility, such as with a screen reader. \li SonificationRole - sonification, such as with user interface sounds. \li GameRole - game audio. + \li CustomRole - The role is specified by customAudioRole. \endlist + customAudioRole is cleared when this property is set to anything other than CustomRole. + \since 5.6 */ QDeclarativeAudio::AudioRole QDeclarativeAudio::audioRole() const @@ -196,12 +199,49 @@ void QDeclarativeAudio::setAudioRole(QDeclarativeAudio::AudioRole audioRole) if (m_complete) { m_player->setAudioRole(QAudio::Role(audioRole)); } else { + if (!m_customAudioRole.isEmpty()) { + m_customAudioRole.clear(); + emit customAudioRoleChanged(); + } m_audioRole = audioRole; emit audioRoleChanged(); } } /*! + \qmlproperty string QtMultimedia::Audio::customAudioRole + + This property holds the role of the audio stream when the backend supports audio + roles unknown to Qt. It can be set to specify the type of audio being played, + allowing the system to make appropriate decisions when it comes to volume, + routing or post-processing. + + The audio role must be set before setting the source property. + + audioRole is set to CustomRole when this property is set. + + \since 5.11 +*/ +QString QDeclarativeAudio::customAudioRole() const +{ + return !m_complete ? m_customAudioRole : m_player->customAudioRole(); +} + +void QDeclarativeAudio::setCustomAudioRole(const QString &audioRole) +{ + if (this->customAudioRole() == audioRole) + return; + + if (m_complete) { + m_player->setCustomAudioRole(audioRole); + } else { + setAudioRole(QDeclarativeAudio::CustomRole); + m_customAudioRole = audioRole; + emit customAudioRoleChanged(); + } +} + +/*! \qmlproperty int QtMultimedia::Audio::notifyInterval The interval at which notifiable properties will update. @@ -850,6 +890,8 @@ void QDeclarativeAudio::classBegin() this, SIGNAL(hasVideoChanged())); connect(m_player, SIGNAL(audioRoleChanged(QAudio::Role)), this, SIGNAL(audioRoleChanged())); + connect(m_player, SIGNAL(customAudioRoleChanged(const QString &)), + this, SIGNAL(customAudioRoleChanged())); connect(m_player, SIGNAL(notifyIntervalChanged(int)), this, SIGNAL(notifyIntervalChanged())); @@ -876,6 +918,8 @@ void QDeclarativeAudio::componentComplete() m_player->setPlaybackRate(m_playbackRate); if (m_audioRole != UnknownRole) m_player->setAudioRole(QAudio::Role(m_audioRole)); + if (!m_customAudioRole.isEmpty()) + m_player->setCustomAudioRole(m_customAudioRole); if (m_notifyInterval != m_player->notifyInterval()) m_player->setNotifyInterval(m_notifyInterval); @@ -1181,12 +1225,30 @@ void QDeclarativeAudio::_q_mediaChanged(const QMediaContent &media) \li AccessibilityRole - for accessibility, such as with a screen reader. \li SonificationRole - sonification, such as with user interface sounds. \li GameRole - game audio. + \li CustomRole - The role is specified by customAudioRole. \endlist + customAudioRole is cleared when this property is set to anything other than CustomRole. + \since 5.6 */ /*! + \qmlproperty string QtMultimedia::MediaPlayer::customAudioRole + + This property holds the role of the audio stream when the backend supports audio + roles unknown to Qt. It can be set to specify the type of audio being played, + allowing the system to make appropriate decisions when it comes to volume, + routing or post-processing. + + The audio role must be set before setting the source property. + + audioRole is set to CustomRole when this property is set. + + \since 5.11 +*/ + +/*! \qmlmethod list<int> QtMultimedia::MediaPlayer::supportedAudioRoles() Returns a list of supported audio roles. diff --git a/src/imports/multimedia/qdeclarativeaudio_p.h b/src/imports/multimedia/qdeclarativeaudio_p.h index 4e2b94300..043b36042 100644 --- a/src/imports/multimedia/qdeclarativeaudio_p.h +++ b/src/imports/multimedia/qdeclarativeaudio_p.h @@ -95,6 +95,7 @@ class QDeclarativeAudio : public QObject, public QQmlParserStatus Q_PROPERTY(QObject *mediaObject READ mediaObject NOTIFY mediaObjectChanged SCRIPTABLE false DESIGNABLE false) Q_PROPERTY(Availability availability READ availability NOTIFY availabilityChanged) Q_PROPERTY(AudioRole audioRole READ audioRole WRITE setAudioRole NOTIFY audioRoleChanged REVISION 1) + Q_PROPERTY(QString customAudioRole READ customAudioRole WRITE setCustomAudioRole NOTIFY customAudioRoleChanged REVISION 3) Q_PROPERTY(int notifyInterval READ notifyInterval WRITE setNotifyInterval NOTIFY notifyIntervalChanged REVISION 2) Q_ENUMS(Status) Q_ENUMS(Error) @@ -150,6 +151,7 @@ public: UnknownRole = QAudio::UnknownRole, AccessibilityRole = QAudio::AccessibilityRole, AlarmRole = QAudio::AlarmRole, + CustomRole = QAudio::CustomRole, GameRole = QAudio::GameRole, MusicRole = QAudio::MusicRole, NotificationRole = QAudio::NotificationRole, @@ -179,6 +181,8 @@ public: AudioRole audioRole() const; void setAudioRole(AudioRole audioRole); + QString customAudioRole() const; + void setCustomAudioRole(const QString &audioRole); QUrl source() const; void setSource(const QUrl &url); @@ -256,6 +260,7 @@ Q_SIGNALS: void playbackRateChanged(); Q_REVISION(1) void audioRoleChanged(); + Q_REVISION(3) void customAudioRoleChanged(); void availabilityChanged(Availability availability); @@ -287,6 +292,7 @@ private: qreal m_vol; qreal m_playbackRate; AudioRole m_audioRole; + QString m_customAudioRole; QMediaPlayer::State m_playbackState; QMediaPlayer::MediaStatus m_status; diff --git a/src/imports/multimedia/qdeclarativecameraexposure.cpp b/src/imports/multimedia/qdeclarativecameraexposure.cpp index 92972e512..af8c6acf6 100644 --- a/src/imports/multimedia/qdeclarativecameraexposure.cpp +++ b/src/imports/multimedia/qdeclarativecameraexposure.cpp @@ -107,6 +107,14 @@ QDeclarativeCameraExposure::QDeclarativeCameraExposure(QCamera *camera, QObject connect(m_exposure, SIGNAL(shutterSpeedChanged(qreal)), this, SIGNAL(shutterSpeedChanged(qreal))); connect(m_exposure, SIGNAL(exposureCompensationChanged(qreal)), this, SIGNAL(exposureCompensationChanged(qreal))); + connect(camera, &QCamera::statusChanged, [this](QCamera::Status status) { + if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus + && status != QCamera::ActiveStatus) { + return; + } + + emit supportedExposureModesChanged(); + }); } QDeclarativeCameraExposure::~QDeclarativeCameraExposure() @@ -369,6 +377,27 @@ void QDeclarativeCameraExposure::setExposureMode(QDeclarativeCameraExposure::Exp emit exposureModeChanged(exposureMode()); } } + +/*! + \qmlproperty list<ExposureMode> QtMultimedia::CameraExposure::supportedExposureModes + + This property holds the supported exposure modes of the camera. + + \since 5.11 + \sa exposureMode + */ +QVariantList QDeclarativeCameraExposure::supportedExposureModes() const +{ + QVariantList supportedModes; + + for (int i = int(ExposureAuto); i <= int(QCameraExposure::ExposureBarcode); ++i) { + if (m_exposure->isExposureModeSupported((QCameraExposure::ExposureMode) i)) + supportedModes.append(QVariant(i)); + } + + return supportedModes; +} + /*! \property QDeclarativeCameraExposure::spotMeteringPoint diff --git a/src/imports/multimedia/qdeclarativecameraexposure_p.h b/src/imports/multimedia/qdeclarativecameraexposure_p.h index 806cb775e..ef99b1ce9 100644 --- a/src/imports/multimedia/qdeclarativecameraexposure_p.h +++ b/src/imports/multimedia/qdeclarativecameraexposure_p.h @@ -73,6 +73,7 @@ class QDeclarativeCameraExposure : public QObject Q_PROPERTY(qreal manualIso READ manualIsoSensitivity WRITE setManualIsoSensitivity NOTIFY manualIsoSensitivityChanged) Q_PROPERTY(ExposureMode exposureMode READ exposureMode WRITE setExposureMode NOTIFY exposureModeChanged) + Q_PROPERTY(QVariantList supportedExposureModes READ supportedExposureModes NOTIFY supportedExposureModesChanged REVISION 1) Q_PROPERTY(QPointF spotMeteringPoint READ spotMeteringPoint WRITE setSpotMeteringPoint NOTIFY spotMeteringPointChanged) Q_PROPERTY(MeteringMode meteringMode READ meteringMode WRITE setMeteringMode NOTIFY meteringModeChanged) @@ -114,6 +115,7 @@ public: ~QDeclarativeCameraExposure(); ExposureMode exposureMode() const; + QVariantList supportedExposureModes() const; qreal exposureCompensation() const; int isoSensitivity() const; @@ -153,6 +155,7 @@ Q_SIGNALS: void exposureCompensationChanged(qreal); void exposureModeChanged(ExposureMode); + void supportedExposureModesChanged(); void meteringModeChanged(MeteringMode); void spotMeteringPointChanged(QPointF); diff --git a/src/imports/multimedia/qdeclarativecamerafocus.cpp b/src/imports/multimedia/qdeclarativecamerafocus.cpp index 1d1436d09..1dd216467 100644 --- a/src/imports/multimedia/qdeclarativecamerafocus.cpp +++ b/src/imports/multimedia/qdeclarativecamerafocus.cpp @@ -101,6 +101,15 @@ QDeclarativeCameraFocus::QDeclarativeCameraFocus(QCamera *camera, QObject *paren updateFocusZones(); connect(m_focus, SIGNAL(focusZonesChanged()), SLOT(updateFocusZones())); + connect(camera, &QCamera::statusChanged, [this](QCamera::Status status) { + if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus + && status != QCamera::ActiveStatus) { + return; + } + + emit supportedFocusModesChanged(); + emit supportedFocusPointModesChanged(); + }); } QDeclarativeCameraFocus::~QDeclarativeCameraFocus() @@ -161,7 +170,29 @@ QDeclarativeCameraFocus::FocusMode QDeclarativeCameraFocus::focusMode() const } /*! + \qmlproperty list<FocusMode> CameraFocus::supportedFocusModes + + This property holds the supported focus modes of the camera. + + \since 5.11 + \sa focusMode +*/ +QVariantList QDeclarativeCameraFocus::supportedFocusModes() const +{ + QVariantList supportedModes; + + for (int i = int(FocusManual); i <= int(FocusMacro); ++i) { + if (m_focus->isFocusModeSupported((QCameraFocus::FocusMode) i)) + supportedModes.append(i); + } + + return supportedModes; +} + +#if QT_DEPRECATED_SINCE(5, 11) +/*! \qmlmethod bool QtMultimedia::CameraFocus::isFocusModeSupported(mode) const + \obsolete Returns true if the supplied \a mode is a supported focus mode, and false otherwise. @@ -170,6 +201,7 @@ bool QDeclarativeCameraFocus::isFocusModeSupported(QDeclarativeCameraFocus::Focu { return m_focus->isFocusModeSupported(QCameraFocus::FocusModes(int(mode))); } +#endif void QDeclarativeCameraFocus::setFocusMode(QDeclarativeCameraFocus::FocusMode mode) { @@ -220,6 +252,26 @@ QDeclarativeCameraFocus::FocusPointMode QDeclarativeCameraFocus::focusPointMode( return QDeclarativeCameraFocus::FocusPointMode(m_focus->focusPointMode()); } +/*! + \qmlproperty list<enumeration> CameraFocus::supportedFocusPointModes + + This property holds the supported focus point modes of the camera. + + \since 5.10 + \sa focusPointMode +*/ +QVariantList QDeclarativeCameraFocus::supportedFocusPointModes() const +{ + QVariantList supportedModes; + + for (int i = int(FocusPointAuto); i <= int(FocusPointCustom); i++) { + if (m_focus->isFocusPointModeSupported(QCameraFocus::FocusPointMode(i))) + supportedModes.append(i); + } + + return supportedModes; +} + void QDeclarativeCameraFocus::setFocusPointMode(QDeclarativeCameraFocus::FocusPointMode mode) { if (mode != focusPointMode()) { @@ -228,8 +280,10 @@ void QDeclarativeCameraFocus::setFocusPointMode(QDeclarativeCameraFocus::FocusPo } } +#if QT_DEPRECATED_SINCE(5, 10) /*! \qmlmethod bool QtMultimedia::CameraFocus::isFocusPointModeSupported(mode) const + \obsolete Returns true if the supplied \a mode is a supported focus point mode, and false otherwise. @@ -238,6 +292,8 @@ bool QDeclarativeCameraFocus::isFocusPointModeSupported(QDeclarativeCameraFocus: { return m_focus->isFocusPointModeSupported(QCameraFocus::FocusPointMode(mode)); } +#endif + /*! \property QDeclarativeCameraFocus::customFocusPoint diff --git a/src/imports/multimedia/qdeclarativecamerafocus_p.h b/src/imports/multimedia/qdeclarativecamerafocus_p.h index 16a48de53..e3a1c28b7 100644 --- a/src/imports/multimedia/qdeclarativecamerafocus_p.h +++ b/src/imports/multimedia/qdeclarativecamerafocus_p.h @@ -64,8 +64,13 @@ class QDeclarativeCamera; class QDeclarativeCameraFocus : public QObject { Q_OBJECT + Q_PROPERTY(FocusMode focusMode READ focusMode WRITE setFocusMode NOTIFY focusModeChanged) + Q_PROPERTY(QVariantList supportedFocusModes READ supportedFocusModes NOTIFY supportedFocusModesChanged REVISION 1) + Q_PROPERTY(FocusPointMode focusPointMode READ focusPointMode WRITE setFocusPointMode NOTIFY focusPointModeChanged) + Q_PROPERTY(QVariantList supportedFocusPointModes READ supportedFocusPointModes NOTIFY supportedFocusPointModesChanged REVISION 1) + Q_PROPERTY(QPointF customFocusPoint READ customFocusPoint WRITE setCustomFocusPoint NOTIFY customFocusPointChanged) Q_PROPERTY(QObject *focusZones READ focusZones CONSTANT) @@ -91,13 +96,18 @@ public: ~QDeclarativeCameraFocus(); FocusMode focusMode() const; + QVariantList supportedFocusModes() const; + FocusPointMode focusPointMode() const; - QPointF customFocusPoint() const; + QVariantList supportedFocusPointModes() const; + QPointF customFocusPoint() const; QAbstractListModel *focusZones() const; +#if QT_DEPRECATED_SINCE(5, 10) Q_INVOKABLE bool isFocusModeSupported(FocusMode mode) const; Q_INVOKABLE bool isFocusPointModeSupported(FocusPointMode mode) const; +#endif public Q_SLOTS: void setFocusMode(FocusMode); @@ -106,7 +116,9 @@ public Q_SLOTS: Q_SIGNALS: void focusModeChanged(FocusMode); + void supportedFocusModesChanged(); void focusPointModeChanged(FocusPointMode); + void supportedFocusPointModesChanged(); void customFocusPointChanged(const QPointF &); private Q_SLOTS: diff --git a/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp b/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp index e8a816727..8e14a7945 100644 --- a/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp +++ b/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp @@ -84,6 +84,18 @@ QDeclarativeCameraImageProcessing::QDeclarativeCameraImageProcessing(QCamera *ca QObject(parent) { m_imageProcessing = camera->imageProcessing(); + + connect(camera, QOverload<bool>::of(&QCamera::availabilityChanged), + this, &QDeclarativeCameraImageProcessing::availableChanged); + connect(camera, &QCamera::statusChanged, [this](QCamera::Status status) { + if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus + && status != QCamera::ActiveStatus) { + return; + } + + emit supportedColorFiltersChanged(); + emit supportedWhiteBalanceModesChanged(); + }); } QDeclarativeCameraImageProcessing::~QDeclarativeCameraImageProcessing() @@ -272,6 +284,56 @@ QDeclarativeCameraImageProcessing::ColorFilter QDeclarativeCameraImageProcessing return ColorFilter(m_imageProcessing->colorFilter()); } +/*! + \qmlproperty bool QtMultimedia::CameraImageProcessing::isAvailable + + This property holds if image processing related settings are supported by this camera. + + \since 5.11 +*/ +bool QDeclarativeCameraImageProcessing::isAvailable() const +{ + return m_imageProcessing->isAvailable(); +} + +/*! + \qmlproperty list<ColorFilter> QtMultimedia::CameraImageProcessing::supportedColorFilters + + This property holds the supported color filters by this camera. + + \since 5.11 +*/ +QVariantList QDeclarativeCameraImageProcessing::supportedColorFilters() const +{ + QVariantList supportedFilters; + + for (int i = int(ColorFilterNone); i <= int(ColorFilterVendor); ++i) { + if (m_imageProcessing->isColorFilterSupported((QCameraImageProcessing::ColorFilter) i)) + supportedFilters.append(i); + } + + return supportedFilters; +} + +/*! + \qmlproperty list<WhiteBalanceMode> QtMultimedia::CameraImageProcessing::supportedWhiteBalanceModes + + This property holds the supported white balance modes by this camera. + + \since 5.11 +*/ +QVariantList QDeclarativeCameraImageProcessing::supportedWhiteBalanceModes() const +{ + QVariantList supportedModes; + + for (int i = int(WhiteBalanceAuto); i <= int(WhiteBalanceVendor); i++) { + if (m_imageProcessing->isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode(i))) + supportedModes.append(i); + } + + return supportedModes; +} + void QDeclarativeCameraImageProcessing::setColorFilter(ColorFilter filter) { if (this->colorFilter() != filter) { diff --git a/src/imports/multimedia/qdeclarativecameraimageprocessing_p.h b/src/imports/multimedia/qdeclarativecameraimageprocessing_p.h index eb755d87c..390164250 100644 --- a/src/imports/multimedia/qdeclarativecameraimageprocessing_p.h +++ b/src/imports/multimedia/qdeclarativecameraimageprocessing_p.h @@ -72,6 +72,11 @@ class QDeclarativeCameraImageProcessing : public QObject Q_PROPERTY(qreal sharpeningLevel READ sharpeningLevel WRITE setSharpeningLevel NOTIFY sharpeningLevelChanged) Q_PROPERTY(qreal denoisingLevel READ denoisingLevel WRITE setDenoisingLevel NOTIFY denoisingLevelChanged) Q_PROPERTY(ColorFilter colorFilter READ colorFilter WRITE setColorFilter NOTIFY colorFilterChanged REVISION 1) + Q_PROPERTY(bool available READ isAvailable NOTIFY availableChanged REVISION 3) + Q_PROPERTY(QVariantList supportedColorFilters READ supportedColorFilters + NOTIFY supportedColorFiltersChanged REVISION 3) + Q_PROPERTY(QVariantList supportedWhiteBalanceModes READ supportedWhiteBalanceModes + NOTIFY supportedWhiteBalanceModesChanged REVISION 3) public: enum WhiteBalanceMode { WhiteBalanceAuto = QCameraImageProcessing::WhiteBalanceAuto, @@ -112,6 +117,10 @@ public: ColorFilter colorFilter() const; + bool isAvailable() const; + QVariantList supportedColorFilters() const; + QVariantList supportedWhiteBalanceModes() const; + public Q_SLOTS: void setWhiteBalanceMode(QDeclarativeCameraImageProcessing::WhiteBalanceMode mode) const; void setManualWhiteBalance(qreal colorTemp) const; @@ -136,6 +145,10 @@ Q_SIGNALS: void colorFilterChanged(); + void availableChanged(); + void supportedColorFiltersChanged(); + void supportedWhiteBalanceModesChanged(); + private: friend class QDeclarativeCamera; QDeclarativeCameraImageProcessing(QCamera *camera, QObject *parent = 0); diff --git a/src/multimedia/audio/qaudio.cpp b/src/multimedia/audio/qaudio.cpp index dea9a05a5..82613270a 100644 --- a/src/multimedia/audio/qaudio.cpp +++ b/src/multimedia/audio/qaudio.cpp @@ -115,6 +115,7 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterAudioMetaTypes) \value AccessibilityRole For accessibility, such as with a screen reader \value SonificationRole Sonification, such as with user interface sounds \value GameRole Game audio + \value CustomRole The role is specified by QMediaPlayer::customAudioRole() \since 5.6 \sa QMediaPlayer::setAudioRole() @@ -347,6 +348,9 @@ QDebug operator<<(QDebug dbg, QAudio::Role role) case QAudio::VoiceCommunicationRole: dbg << "VoiceCommunicationRole"; break; + case QAudio::CustomRole: + dbg << "CustomRole"; + break; } return dbg; } diff --git a/src/multimedia/audio/qaudio.h b/src/multimedia/audio/qaudio.h index 2603d71d1..90a8c236f 100644 --- a/src/multimedia/audio/qaudio.h +++ b/src/multimedia/audio/qaudio.h @@ -68,7 +68,8 @@ namespace QAudio RingtoneRole, AccessibilityRole, SonificationRole, - GameRole + GameRole, + CustomRole }; enum VolumeScale { diff --git a/src/multimedia/audio/qaudiobuffer.cpp b/src/multimedia/audio/qaudiobuffer.cpp index fe07d1e47..849d79ab3 100644 --- a/src/multimedia/audio/qaudiobuffer.cpp +++ b/src/multimedia/audio/qaudiobuffer.cpp @@ -531,32 +531,32 @@ void *QAudioBuffer::data() */ /*! - \fn QAudioBuffer::StereoFrame::StereoFrame() + \fn template <typename T> QAudioBuffer::StereoFrame<T>::StereoFrame() Constructs a new frame with the "silent" value for this sample format (0 for signed formats and floats, 0x8* for unsigned formats). */ /*! - \fn QAudioBuffer::StereoFrame::StereoFrame(T leftSample, T rightSample) + \fn template <typename T> QAudioBuffer::StereoFrame<T>::StereoFrame(T leftSample, T rightSample) Constructs a new frame with the supplied \a leftSample and \a rightSample values. */ /*! - \fn QAudioBuffer::StereoFrame::operator=(const StereoFrame &other) + \fn template <typename T> QAudioBuffer::StereoFrame<T>::operator=(const StereoFrame &other) Assigns \a other to this frame. */ /*! - \fn QAudioBuffer::StereoFrame::average() const + \fn template <typename T> QAudioBuffer::StereoFrame<T>::average() const Returns the arithmetic average of the left and right samples. */ -/*! \fn QAudioBuffer::StereoFrame::clear() +/*! \fn template <typename T> QAudioBuffer::StereoFrame<T>::clear() Sets the values of this frame to the "silent" value. */ diff --git a/src/multimedia/audio/qaudiodecoder.h b/src/multimedia/audio/qaudiodecoder.h index 85e0b75f7..4ba107946 100644 --- a/src/multimedia/audio/qaudiodecoder.h +++ b/src/multimedia/audio/qaudiodecoder.h @@ -75,7 +75,7 @@ public: ServiceMissingError }; - explicit QAudioDecoder(QObject *parent = Q_NULLPTR); + explicit QAudioDecoder(QObject *parent = nullptr); ~QAudioDecoder(); static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs = QStringList()); diff --git a/src/multimedia/audio/qaudioinput.h b/src/multimedia/audio/qaudioinput.h index 5794276d2..db482a145 100644 --- a/src/multimedia/audio/qaudioinput.h +++ b/src/multimedia/audio/qaudioinput.h @@ -62,8 +62,8 @@ class Q_MULTIMEDIA_EXPORT QAudioInput : public QObject Q_OBJECT public: - explicit QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR); - explicit QAudioInput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR); + explicit QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr); + explicit QAudioInput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr); ~QAudioInput(); QAudioFormat format() const; diff --git a/src/multimedia/audio/qaudiooutput.h b/src/multimedia/audio/qaudiooutput.h index 9f817271d..1c037cd2b 100644 --- a/src/multimedia/audio/qaudiooutput.h +++ b/src/multimedia/audio/qaudiooutput.h @@ -62,8 +62,8 @@ class Q_MULTIMEDIA_EXPORT QAudioOutput : public QObject Q_OBJECT public: - explicit QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR); - explicit QAudioOutput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR); + explicit QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr); + explicit QAudioOutput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr); ~QAudioOutput(); QAudioFormat format() const; diff --git a/src/multimedia/audio/qaudioprobe.h b/src/multimedia/audio/qaudioprobe.h index 376a54e34..a3fc4598d 100644 --- a/src/multimedia/audio/qaudioprobe.h +++ b/src/multimedia/audio/qaudioprobe.h @@ -53,7 +53,7 @@ class Q_MULTIMEDIA_EXPORT QAudioProbe : public QObject { Q_OBJECT public: - explicit QAudioProbe(QObject *parent = Q_NULLPTR); + explicit QAudioProbe(QObject *parent = nullptr); ~QAudioProbe(); bool setSource(QMediaObject *source); diff --git a/src/multimedia/audio/qaudiosystemplugin.h b/src/multimedia/audio/qaudiosystemplugin.h index e304f1c46..3539201a2 100644 --- a/src/multimedia/audio/qaudiosystemplugin.h +++ b/src/multimedia/audio/qaudiosystemplugin.h @@ -78,7 +78,7 @@ class Q_MULTIMEDIA_EXPORT QAudioSystemPlugin : public QObject, public QAudioSyst Q_INTERFACES(QAudioSystemFactoryInterface) public: - explicit QAudioSystemPlugin(QObject *parent = Q_NULLPTR); + explicit QAudioSystemPlugin(QObject *parent = nullptr); ~QAudioSystemPlugin(); QList<QByteArray> availableDevices(QAudio::Mode) const override = 0; diff --git a/src/multimedia/audio/qsound.h b/src/multimedia/audio/qsound.h index 304019ced..0b6320025 100644 --- a/src/multimedia/audio/qsound.h +++ b/src/multimedia/audio/qsound.h @@ -58,7 +58,7 @@ public: static void play(const QString& filename); - explicit QSound(const QString &filename, QObject *parent = Q_NULLPTR); + explicit QSound(const QString &filename, QObject *parent = nullptr); ~QSound(); int loops() const; diff --git a/src/multimedia/audio/qsoundeffect.h b/src/multimedia/audio/qsoundeffect.h index 7420d7b81..8bde1fe56 100644 --- a/src/multimedia/audio/qsoundeffect.h +++ b/src/multimedia/audio/qsoundeffect.h @@ -80,7 +80,7 @@ public: Error }; - explicit QSoundEffect(QObject *parent = Q_NULLPTR); + explicit QSoundEffect(QObject *parent = nullptr); ~QSoundEffect(); static QStringList supportedMimeTypes(); diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h index aebd1c013..06187fec0 100644 --- a/src/multimedia/camera/qcamera.h +++ b/src/multimedia/camera/qcamera.h @@ -165,10 +165,10 @@ public: FrontFace }; - explicit QCamera(QObject *parent = Q_NULLPTR); - explicit QCamera(const QByteArray& deviceName, QObject *parent = Q_NULLPTR); - explicit QCamera(const QCameraInfo& cameraInfo, QObject *parent = Q_NULLPTR); - explicit QCamera(QCamera::Position position, QObject *parent = Q_NULLPTR); + explicit QCamera(QObject *parent = nullptr); + explicit QCamera(const QByteArray& deviceName, QObject *parent = nullptr); + explicit QCamera(const QCameraInfo& cameraInfo, QObject *parent = nullptr); + explicit QCamera(QCamera::Position position, QObject *parent = nullptr); ~QCamera(); #if QT_DEPRECATED_SINCE(5, 3) diff --git a/src/multimedia/camera/qcameraexposure.h b/src/multimedia/camera/qcameraexposure.h index e0924ca60..336d4c0b3 100644 --- a/src/multimedia/camera/qcameraexposure.h +++ b/src/multimedia/camera/qcameraexposure.h @@ -135,9 +135,9 @@ public: qreal requestedAperture() const; qreal requestedShutterSpeed() const; - QList<int> supportedIsoSensitivities(bool *continuous = Q_NULLPTR) const; - QList<qreal> supportedApertures(bool *continuous = Q_NULLPTR) const; - QList<qreal> supportedShutterSpeeds(bool *continuous = Q_NULLPTR) const; + QList<int> supportedIsoSensitivities(bool *continuous = nullptr) const; + QList<qreal> supportedApertures(bool *continuous = nullptr) const; + QList<qreal> supportedShutterSpeeds(bool *continuous = nullptr) const; public Q_SLOTS: void setFlashMode(FlashModes mode); @@ -168,7 +168,7 @@ Q_SIGNALS: private: friend class QCamera; friend class QCameraPrivate; - explicit QCameraExposure(QCamera *parent = Q_NULLPTR); + explicit QCameraExposure(QCamera *parent = nullptr); virtual ~QCameraExposure(); Q_DISABLE_COPY(QCameraExposure) diff --git a/src/multimedia/camera/qcameraimagecapture.h b/src/multimedia/camera/qcameraimagecapture.h index 12feb9eec..6fedb7e2c 100644 --- a/src/multimedia/camera/qcameraimagecapture.h +++ b/src/multimedia/camera/qcameraimagecapture.h @@ -87,7 +87,7 @@ public: }; Q_DECLARE_FLAGS(CaptureDestinations, CaptureDestination) - explicit QCameraImageCapture(QMediaObject *mediaObject, QObject *parent = Q_NULLPTR); + explicit QCameraImageCapture(QMediaObject *mediaObject, QObject *parent = nullptr); ~QCameraImageCapture(); bool isAvailable() const; @@ -104,7 +104,7 @@ public: QString imageCodecDescription(const QString &codecName) const; QList<QSize> supportedResolutions(const QImageEncoderSettings &settings = QImageEncoderSettings(), - bool *continuous = Q_NULLPTR) const; + bool *continuous = nullptr) const; QImageEncoderSettings encodingSettings() const; void setEncodingSettings(const QImageEncoderSettings& settings); diff --git a/src/multimedia/controls/controls.pri b/src/multimedia/controls/controls.pri index 7ab2e51c4..cfebe9777 100644 --- a/src/multimedia/controls/controls.pri +++ b/src/multimedia/controls/controls.pri @@ -37,7 +37,8 @@ PUBLIC_HEADERS += \ controls/qmediaaudioprobecontrol.h \ controls/qmediavideoprobecontrol.h \ controls/qmediaavailabilitycontrol.h \ - controls/qaudiorolecontrol.h + controls/qaudiorolecontrol.h \ + controls/qcustomaudiorolecontrol.h PRIVATE_HEADERS += \ controls/qmediaplaylistcontrol_p.h \ @@ -81,5 +82,5 @@ SOURCES += \ controls/qaudioinputselectorcontrol.cpp \ controls/qaudiooutputselectorcontrol.cpp \ controls/qvideodeviceselectorcontrol.cpp \ - controls/qaudiorolecontrol.cpp - + controls/qaudiorolecontrol.cpp \ + controls/qcustomaudiorolecontrol.cpp diff --git a/src/multimedia/controls/qaudiodecodercontrol.h b/src/multimedia/controls/qaudiodecodercontrol.h index f02da4963..6ab27ba62 100644 --- a/src/multimedia/controls/qaudiodecodercontrol.h +++ b/src/multimedia/controls/qaudiodecodercontrol.h @@ -92,7 +92,7 @@ Q_SIGNALS: void durationChanged(qint64 duration); protected: - explicit QAudioDecoderControl(QObject *parent = Q_NULLPTR); + explicit QAudioDecoderControl(QObject *parent = nullptr); }; #define QAudioDecoderControl_iid "org.qt-project.qt.audiodecodercontrol/5.0" diff --git a/src/multimedia/controls/qaudioencodersettingscontrol.h b/src/multimedia/controls/qaudioencodersettingscontrol.h index 1906904d8..1f973f0ea 100644 --- a/src/multimedia/controls/qaudioencodersettingscontrol.h +++ b/src/multimedia/controls/qaudioencodersettingscontrol.h @@ -67,13 +67,13 @@ public: virtual QString codecDescription(const QString &codecName) const = 0; virtual QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, - bool *continuous = Q_NULLPTR) const = 0; + bool *continuous = nullptr) const = 0; virtual QAudioEncoderSettings audioSettings() const = 0; virtual void setAudioSettings(const QAudioEncoderSettings&) = 0; protected: - explicit QAudioEncoderSettingsControl(QObject *parent = Q_NULLPTR); + explicit QAudioEncoderSettingsControl(QObject *parent = nullptr); }; #define QAudioEncoderSettingsControl_iid "org.qt-project.qt.audioencodersettingscontrol/5.0" diff --git a/src/multimedia/controls/qaudioinputselectorcontrol.h b/src/multimedia/controls/qaudioinputselectorcontrol.h index eceaa76dd..9665b55de 100644 --- a/src/multimedia/controls/qaudioinputselectorcontrol.h +++ b/src/multimedia/controls/qaudioinputselectorcontrol.h @@ -68,7 +68,7 @@ Q_SIGNALS: void availableInputsChanged(); protected: - explicit QAudioInputSelectorControl(QObject *parent = Q_NULLPTR); + explicit QAudioInputSelectorControl(QObject *parent = nullptr); }; #define QAudioInputSelectorControl_iid "org.qt-project.qt.audioinputselectorcontrol/5.0" diff --git a/src/multimedia/controls/qaudiooutputselectorcontrol.h b/src/multimedia/controls/qaudiooutputselectorcontrol.h index b2d27a349..de44d0ebb 100644 --- a/src/multimedia/controls/qaudiooutputselectorcontrol.h +++ b/src/multimedia/controls/qaudiooutputselectorcontrol.h @@ -68,7 +68,7 @@ Q_SIGNALS: void availableOutputsChanged(); protected: - explicit QAudioOutputSelectorControl(QObject *parent = Q_NULLPTR); + explicit QAudioOutputSelectorControl(QObject *parent = nullptr); }; #define QAudioOutputSelectorControl_iid "org.qt-project.qt.audiooutputselectorcontrol/5.0" diff --git a/src/multimedia/controls/qaudiorolecontrol.h b/src/multimedia/controls/qaudiorolecontrol.h index 5d9db177b..c59874fdf 100644 --- a/src/multimedia/controls/qaudiorolecontrol.h +++ b/src/multimedia/controls/qaudiorolecontrol.h @@ -64,7 +64,7 @@ Q_SIGNALS: void audioRoleChanged(QAudio::Role role); protected: - explicit QAudioRoleControl(QObject *parent = Q_NULLPTR); + explicit QAudioRoleControl(QObject *parent = nullptr); }; #define QAudioRoleControl_iid "org.qt-project.qt.audiorolecontrol/5.6" diff --git a/src/multimedia/controls/qcameracapturebufferformatcontrol.h b/src/multimedia/controls/qcameracapturebufferformatcontrol.h index cb8c3d6d9..c659384b6 100644 --- a/src/multimedia/controls/qcameracapturebufferformatcontrol.h +++ b/src/multimedia/controls/qcameracapturebufferformatcontrol.h @@ -62,7 +62,7 @@ Q_SIGNALS: void bufferFormatChanged(QVideoFrame::PixelFormat); protected: - explicit QCameraCaptureBufferFormatControl(QObject *parent = Q_NULLPTR); + explicit QCameraCaptureBufferFormatControl(QObject *parent = nullptr); }; #define QCameraCaptureBufferFormatControl_iid "org.qt-project.qt.cameracapturebufferformatcontrol/5.0" diff --git a/src/multimedia/controls/qcameracapturedestinationcontrol.h b/src/multimedia/controls/qcameracapturedestinationcontrol.h index 90142d6b5..30d69d47a 100644 --- a/src/multimedia/controls/qcameracapturedestinationcontrol.h +++ b/src/multimedia/controls/qcameracapturedestinationcontrol.h @@ -62,7 +62,7 @@ Q_SIGNALS: void captureDestinationChanged(QCameraImageCapture::CaptureDestinations); protected: - explicit QCameraCaptureDestinationControl(QObject *parent = Q_NULLPTR); + explicit QCameraCaptureDestinationControl(QObject *parent = nullptr); }; #define QCameraCaptureDestinationControl_iid "org.qt-project.qt.cameracapturedestinationcontrol/5.0" diff --git a/src/multimedia/controls/qcameracontrol.h b/src/multimedia/controls/qcameracontrol.h index f17af0ce9..f7a1b4288 100644 --- a/src/multimedia/controls/qcameracontrol.h +++ b/src/multimedia/controls/qcameracontrol.h @@ -83,7 +83,7 @@ Q_SIGNALS: void captureModeChanged(QCamera::CaptureModes); protected: - explicit QCameraControl(QObject *parent = Q_NULLPTR); + explicit QCameraControl(QObject *parent = nullptr); }; #define QCameraControl_iid "org.qt-project.qt.cameracontrol/5.0" diff --git a/src/multimedia/controls/qcameraexposurecontrol.h b/src/multimedia/controls/qcameraexposurecontrol.h index 88dda12ed..7694380e5 100644 --- a/src/multimedia/controls/qcameraexposurecontrol.h +++ b/src/multimedia/controls/qcameraexposurecontrol.h @@ -87,7 +87,7 @@ Q_SIGNALS: void parameterRangeChanged(int parameter); protected: - explicit QCameraExposureControl(QObject *parent = Q_NULLPTR); + explicit QCameraExposureControl(QObject *parent = nullptr); }; #define QCameraExposureControl_iid "org.qt-project.qt.cameraexposurecontrol/5.0" diff --git a/src/multimedia/controls/qcamerafeedbackcontrol.h b/src/multimedia/controls/qcamerafeedbackcontrol.h index cee97210f..195ad3915 100644 --- a/src/multimedia/controls/qcamerafeedbackcontrol.h +++ b/src/multimedia/controls/qcamerafeedbackcontrol.h @@ -84,7 +84,7 @@ public: virtual bool setEventFeedbackSound(EventType, const QString &filePath) = 0; protected: - explicit QCameraFeedbackControl(QObject *parent = Q_NULLPTR); + explicit QCameraFeedbackControl(QObject *parent = nullptr); }; #define QCameraFeedbackControl_iid "org.qt-project.qt.camerafeedbackcontrol/5.0" diff --git a/src/multimedia/controls/qcameraflashcontrol.h b/src/multimedia/controls/qcameraflashcontrol.h index 08e991f5a..d4b7d1f4c 100644 --- a/src/multimedia/controls/qcameraflashcontrol.h +++ b/src/multimedia/controls/qcameraflashcontrol.h @@ -68,7 +68,7 @@ Q_SIGNALS: void flashReady(bool); protected: - explicit QCameraFlashControl(QObject *parent = Q_NULLPTR); + explicit QCameraFlashControl(QObject *parent = nullptr); }; #define QCameraFlashControl_iid "org.qt-project.qt.cameraflashcontrol/5.0" diff --git a/src/multimedia/controls/qcamerafocuscontrol.h b/src/multimedia/controls/qcamerafocuscontrol.h index 32da7cc31..a93d2fd1e 100644 --- a/src/multimedia/controls/qcamerafocuscontrol.h +++ b/src/multimedia/controls/qcamerafocuscontrol.h @@ -77,7 +77,7 @@ Q_SIGNALS: void focusZonesChanged(); protected: - explicit QCameraFocusControl(QObject *parent = Q_NULLPTR); + explicit QCameraFocusControl(QObject *parent = nullptr); }; #define QCameraFocusControl_iid "org.qt-project.qt.camerafocuscontrol/5.0" diff --git a/src/multimedia/controls/qcameraimagecapturecontrol.h b/src/multimedia/controls/qcameraimagecapturecontrol.h index 4fe7b9387..e6700fce5 100644 --- a/src/multimedia/controls/qcameraimagecapturecontrol.h +++ b/src/multimedia/controls/qcameraimagecapturecontrol.h @@ -80,7 +80,7 @@ Q_SIGNALS: void error(int id, int error, const QString &errorString); protected: - explicit QCameraImageCaptureControl(QObject *parent = Q_NULLPTR); + explicit QCameraImageCaptureControl(QObject *parent = nullptr); }; #define QCameraImageCaptureControl_iid "org.qt-project.qt.cameraimagecapturecontrol/5.0" diff --git a/src/multimedia/controls/qcameraimageprocessingcontrol.h b/src/multimedia/controls/qcameraimageprocessingcontrol.h index ee46143e4..8be435f8f 100644 --- a/src/multimedia/controls/qcameraimageprocessingcontrol.h +++ b/src/multimedia/controls/qcameraimageprocessingcontrol.h @@ -82,7 +82,7 @@ public: virtual void setParameter(ProcessingParameter parameter, const QVariant &value) = 0; protected: - explicit QCameraImageProcessingControl(QObject *parent = Q_NULLPTR); + explicit QCameraImageProcessingControl(QObject *parent = nullptr); }; #define QCameraImageProcessingControl_iid "org.qt-project.qt.cameraimageprocessingcontrol/5.0" diff --git a/src/multimedia/controls/qcamerainfocontrol.h b/src/multimedia/controls/qcamerainfocontrol.h index 32f85fc3a..9ee0a3abf 100644 --- a/src/multimedia/controls/qcamerainfocontrol.h +++ b/src/multimedia/controls/qcamerainfocontrol.h @@ -58,7 +58,7 @@ public: virtual int cameraOrientation(const QString &deviceName) const = 0; protected: - explicit QCameraInfoControl(QObject *parent = Q_NULLPTR); + explicit QCameraInfoControl(QObject *parent = nullptr); }; #define QCameraInfoControl_iid "org.qt-project.qt.camerainfocontrol/5.3" diff --git a/src/multimedia/controls/qcameralockscontrol.h b/src/multimedia/controls/qcameralockscontrol.h index 01178642f..d545d971e 100644 --- a/src/multimedia/controls/qcameralockscontrol.h +++ b/src/multimedia/controls/qcameralockscontrol.h @@ -67,7 +67,7 @@ Q_SIGNALS: void lockStatusChanged(QCamera::LockType type, QCamera::LockStatus status, QCamera::LockChangeReason reason); protected: - explicit QCameraLocksControl(QObject *parent = Q_NULLPTR); + explicit QCameraLocksControl(QObject *parent = nullptr); }; #define QCameraLocksControl_iid "org.qt-project.qt.cameralockscontrol/5.0" diff --git a/src/multimedia/controls/qcameraviewfindersettingscontrol.h b/src/multimedia/controls/qcameraviewfindersettingscontrol.h index c67fdaabb..7877bd1db 100644 --- a/src/multimedia/controls/qcameraviewfindersettingscontrol.h +++ b/src/multimedia/controls/qcameraviewfindersettingscontrol.h @@ -70,7 +70,7 @@ public: virtual void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) = 0; protected: - explicit QCameraViewfinderSettingsControl(QObject *parent = Q_NULLPTR); + explicit QCameraViewfinderSettingsControl(QObject *parent = nullptr); }; #define QCameraViewfinderSettingsControl_iid "org.qt-project.qt.cameraviewfindersettingscontrol/5.0" @@ -92,7 +92,7 @@ public: virtual void setViewfinderSettings(const QCameraViewfinderSettings &settings) = 0; protected: - explicit QCameraViewfinderSettingsControl2(QObject *parent = Q_NULLPTR); + explicit QCameraViewfinderSettingsControl2(QObject *parent = nullptr); }; #define QCameraViewfinderSettingsControl2_iid "org.qt-project.qt.cameraviewfindersettingscontrol2/5.5" diff --git a/src/multimedia/controls/qcamerazoomcontrol.h b/src/multimedia/controls/qcamerazoomcontrol.h index 776d6ddab..feca6a362 100644 --- a/src/multimedia/controls/qcamerazoomcontrol.h +++ b/src/multimedia/controls/qcamerazoomcontrol.h @@ -75,7 +75,7 @@ Q_SIGNALS: void currentDigitalZoomChanged(qreal digitalZoom); protected: - explicit QCameraZoomControl(QObject *parent = Q_NULLPTR); + explicit QCameraZoomControl(QObject *parent = nullptr); }; #define QCameraZoomControl_iid "org.qt-project.qt.camerazoomcontrol/5.0" diff --git a/src/multimedia/controls/qcustomaudiorolecontrol.cpp b/src/multimedia/controls/qcustomaudiorolecontrol.cpp new file mode 100644 index 000000000..39431be01 --- /dev/null +++ b/src/multimedia/controls/qcustomaudiorolecontrol.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 QNX Software Systems. All rights reserved. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qmediacontrol_p.h" +#include "qcustomaudiorolecontrol.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QCustomAudioRoleControl + \inmodule QtMultimedia + \ingroup multimedia_control + \since 5.11 + + \brief The QCustomAudioRoleControl class provides control over the audio role of a media object. + + If a QMediaService supports audio roles it may implement QCustomAudioRoleControl in order to + provide access to roles unknown to Qt. + + The functionality provided by this control is exposed to application code through the + QMediaPlayer class. + + The interface name of QCustomAudioRoleControl is \c org.qt-project.qt.customaudiorolecontrol/5.11 as + defined in QCustomAudioRoleControl_iid. + + \sa QMediaService::requestControl(), QMediaPlayer +*/ + +/*! + \macro QCustomAudioRoleControl_iid + + \c org.qt-project.qt.customaudiorolecontrol/5.11 + + Defines the interface name of the QCustomAudioRoleControl class. + + \relates QCustomAudioRoleControl +*/ + +/*! + Construct a QCustomAudioRoleControl with the given \a parent. +*/ +QCustomAudioRoleControl::QCustomAudioRoleControl(QObject *parent) + : QMediaControl(*new QMediaControlPrivate, parent) +{ +} + +/*! + Destroys the audio role control. +*/ +QCustomAudioRoleControl::~QCustomAudioRoleControl() +{ +} + +/*! + \fn QAudio::Role QCustomAudioRoleControl::customAudioRole() const + + Returns the audio role of the media played by the media service. +*/ + +/*! + \fn void QCustomAudioRoleControl::setCustomAudioRole(const QString &role) + + Sets the audio \a role of the media played by the media service. +*/ + +/*! + \fn QStringList QCustomAudioRoleControl::supportedCustomAudioRoles() const + + Returns a list of custom audio roles that the media service supports. An + empty list may indicate that the supported custom audio roles aren't known. + The list may not be complete. +*/ + +/*! + \fn void QCustomAudioRoleControl::customAudioRoleChanged(const QString &role) + + Signal emitted when the audio \a role has changed. + */ + +#include "moc_qcustomaudiorolecontrol.cpp" +QT_END_NAMESPACE diff --git a/src/multimedia/controls/qcustomaudiorolecontrol.h b/src/multimedia/controls/qcustomaudiorolecontrol.h new file mode 100644 index 000000000..f71bc67df --- /dev/null +++ b/src/multimedia/controls/qcustomaudiorolecontrol.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 QNX Software Systems. All rights reserved. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCUSTOMAUDIOROLECONTROL_H +#define QCUSTOMAUDIOROLECONTROL_H + +#include <QtMultimedia/qmediacontrol.h> +#include <QtMultimedia/qaudio.h> + +QT_BEGIN_NAMESPACE + +// Class forward declaration required for QDoc bug +class QString; +class QStringList; + +class Q_MULTIMEDIA_EXPORT QCustomAudioRoleControl : public QMediaControl +{ + Q_OBJECT + +public: + virtual ~QCustomAudioRoleControl(); + + virtual QString customAudioRole() const = 0; + virtual void setCustomAudioRole(const QString &role) = 0; + + virtual QStringList supportedCustomAudioRoles() const = 0; + +Q_SIGNALS: + void customAudioRoleChanged(const QString &role); + +protected: + explicit QCustomAudioRoleControl(QObject *parent = nullptr); +}; + +#define QCustomAudioRoleControl_iid "org.qt-project.qt.customaudiorolecontrol/5.11" +Q_MEDIA_DECLARE_CONTROL(QCustomAudioRoleControl, QCustomAudioRoleControl_iid) + +QT_END_NAMESPACE + +#endif // QCUSTOMAUDIOROLECONTROL_H diff --git a/src/multimedia/controls/qimageencodercontrol.h b/src/multimedia/controls/qimageencodercontrol.h index 292e16b1f..9c2164413 100644 --- a/src/multimedia/controls/qimageencodercontrol.h +++ b/src/multimedia/controls/qimageencodercontrol.h @@ -68,13 +68,13 @@ public: virtual QString imageCodecDescription(const QString &codecName) const = 0; virtual QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, - bool *continuous = Q_NULLPTR) const = 0; + bool *continuous = nullptr) const = 0; virtual QImageEncoderSettings imageSettings() const = 0; virtual void setImageSettings(const QImageEncoderSettings &settings) = 0; protected: - explicit QImageEncoderControl(QObject *parent = Q_NULLPTR); + explicit QImageEncoderControl(QObject *parent = nullptr); }; #define QImageEncoderControl_iid "org.qt-project.qt.imageencodercontrol/5.0" diff --git a/src/multimedia/controls/qmediaaudioprobecontrol.h b/src/multimedia/controls/qmediaaudioprobecontrol.h index 9d679c768..74cb1bc5a 100644 --- a/src/multimedia/controls/qmediaaudioprobecontrol.h +++ b/src/multimedia/controls/qmediaaudioprobecontrol.h @@ -56,7 +56,7 @@ Q_SIGNALS: void flush(); protected: - explicit QMediaAudioProbeControl(QObject *parent = Q_NULLPTR); + explicit QMediaAudioProbeControl(QObject *parent = nullptr); }; #define QMediaAudioProbeControl_iid "org.qt-project.qt.mediaaudioprobecontrol/5.0" diff --git a/src/multimedia/controls/qmediaavailabilitycontrol.h b/src/multimedia/controls/qmediaavailabilitycontrol.h index 55149ccb0..a61617b1f 100644 --- a/src/multimedia/controls/qmediaavailabilitycontrol.h +++ b/src/multimedia/controls/qmediaavailabilitycontrol.h @@ -62,7 +62,7 @@ Q_SIGNALS: void availabilityChanged(QMultimedia::AvailabilityStatus availability); protected: - explicit QMediaAvailabilityControl(QObject *parent = Q_NULLPTR); + explicit QMediaAvailabilityControl(QObject *parent = nullptr); }; #define QMediaAvailabilityControl_iid "org.qt-project.qt.mediaavailabilitycontrol/5.0" diff --git a/src/multimedia/controls/qmediacontainercontrol.h b/src/multimedia/controls/qmediacontainercontrol.h index 8c315590e..23c2918b9 100644 --- a/src/multimedia/controls/qmediacontainercontrol.h +++ b/src/multimedia/controls/qmediacontainercontrol.h @@ -62,7 +62,7 @@ public: virtual QString containerDescription(const QString &formatMimeType) const = 0; protected: - explicit QMediaContainerControl(QObject *parent = Q_NULLPTR); + explicit QMediaContainerControl(QObject *parent = nullptr); }; #define QMediaContainerControl_iid "org.qt-project.qt.mediacontainercontrol/5.0" diff --git a/src/multimedia/controls/qmediagaplessplaybackcontrol.h b/src/multimedia/controls/qmediagaplessplaybackcontrol.h index 8ab31ef62..23e2b4fc2 100644 --- a/src/multimedia/controls/qmediagaplessplaybackcontrol.h +++ b/src/multimedia/controls/qmediagaplessplaybackcontrol.h @@ -66,7 +66,7 @@ Q_SIGNALS: void advancedToNextMedia(); protected: - explicit QMediaGaplessPlaybackControl(QObject *parent = Q_NULLPTR); + explicit QMediaGaplessPlaybackControl(QObject *parent = nullptr); }; #define QMediaGaplessPlaybackControl_iid "org.qt-project.qt.mediagaplessplaybackcontrol/5.0" diff --git a/src/multimedia/controls/qmedianetworkaccesscontrol.h b/src/multimedia/controls/qmedianetworkaccesscontrol.h index 1c258a0bb..daae4f389 100644 --- a/src/multimedia/controls/qmedianetworkaccesscontrol.h +++ b/src/multimedia/controls/qmedianetworkaccesscontrol.h @@ -65,7 +65,7 @@ Q_SIGNALS: void configurationChanged(const QNetworkConfiguration& configuration); protected: - explicit QMediaNetworkAccessControl(QObject *parent = Q_NULLPTR); + explicit QMediaNetworkAccessControl(QObject *parent = nullptr); }; #define QMediaNetworkAccessControl_iid "org.qt-project.qt.medianetworkaccesscontrol/5.0" diff --git a/src/multimedia/controls/qmediaplayercontrol.cpp b/src/multimedia/controls/qmediaplayercontrol.cpp index 46de05b51..07b277ffb 100644 --- a/src/multimedia/controls/qmediaplayercontrol.cpp +++ b/src/multimedia/controls/qmediaplayercontrol.cpp @@ -353,7 +353,7 @@ QMediaPlayerControl::QMediaPlayerControl(QObject *parent): Pauses playback of the current media. - If sucessful the player control will immediately enter the \l {QMediaPlayer::PausedState} + If successful the player control will immediately enter the \l {QMediaPlayer::PausedState} {paused} state. \sa state(), play(), stop() diff --git a/src/multimedia/controls/qmediaplayercontrol.h b/src/multimedia/controls/qmediaplayercontrol.h index a3fb1d4e1..d231097f4 100644 --- a/src/multimedia/controls/qmediaplayercontrol.h +++ b/src/multimedia/controls/qmediaplayercontrol.h @@ -110,7 +110,7 @@ Q_SIGNALS: void error(int error, const QString &errorString); protected: - explicit QMediaPlayerControl(QObject *parent = Q_NULLPTR); + explicit QMediaPlayerControl(QObject *parent = nullptr); }; #define QMediaPlayerControl_iid "org.qt-project.qt.mediaplayercontrol/5.0" diff --git a/src/multimedia/controls/qmediarecordercontrol.h b/src/multimedia/controls/qmediarecordercontrol.h index 85f5c78d5..a0529ce59 100644 --- a/src/multimedia/controls/qmediarecordercontrol.h +++ b/src/multimedia/controls/qmediarecordercontrol.h @@ -88,7 +88,7 @@ public Q_SLOTS: virtual void setVolume(qreal volume) = 0; protected: - explicit QMediaRecorderControl(QObject *parent = Q_NULLPTR); + explicit QMediaRecorderControl(QObject *parent = nullptr); }; #define QMediaRecorderControl_iid "org.qt-project.qt.mediarecordercontrol/5.0" diff --git a/src/multimedia/controls/qmediastreamscontrol.h b/src/multimedia/controls/qmediastreamscontrol.h index 3c36e96cb..e2506882d 100644 --- a/src/multimedia/controls/qmediastreamscontrol.h +++ b/src/multimedia/controls/qmediastreamscontrol.h @@ -73,7 +73,7 @@ Q_SIGNALS: void activeStreamsChanged(); protected: - explicit QMediaStreamsControl(QObject *parent = Q_NULLPTR); + explicit QMediaStreamsControl(QObject *parent = nullptr); }; #define QMediaStreamsControl_iid "org.qt-project.qt.mediastreamscontrol/5.0" diff --git a/src/multimedia/controls/qmediavideoprobecontrol.h b/src/multimedia/controls/qmediavideoprobecontrol.h index 25caefee6..363975055 100644 --- a/src/multimedia/controls/qmediavideoprobecontrol.h +++ b/src/multimedia/controls/qmediavideoprobecontrol.h @@ -58,7 +58,7 @@ Q_SIGNALS: void flush(); protected: - explicit QMediaVideoProbeControl(QObject *parent = Q_NULLPTR); + explicit QMediaVideoProbeControl(QObject *parent = nullptr); }; #define QMediaVideoProbeControl_iid "org.qt-project.qt.mediavideoprobecontrol/5.0" diff --git a/src/multimedia/controls/qmetadatareadercontrol.h b/src/multimedia/controls/qmetadatareadercontrol.h index 455ce814e..b7be6b7b5 100644 --- a/src/multimedia/controls/qmetadatareadercontrol.h +++ b/src/multimedia/controls/qmetadatareadercontrol.h @@ -71,7 +71,7 @@ Q_SIGNALS: void metaDataAvailableChanged(bool available); protected: - explicit QMetaDataReaderControl(QObject *parent = Q_NULLPTR); + explicit QMetaDataReaderControl(QObject *parent = nullptr); }; #define QMetaDataReaderControl_iid "org.qt-project.qt.metadatareadercontrol/5.0" diff --git a/src/multimedia/controls/qmetadatawritercontrol.h b/src/multimedia/controls/qmetadatawritercontrol.h index da3413f77..95a314b90 100644 --- a/src/multimedia/controls/qmetadatawritercontrol.h +++ b/src/multimedia/controls/qmetadatawritercontrol.h @@ -74,7 +74,7 @@ Q_SIGNALS: void metaDataAvailableChanged(bool available); protected: - explicit QMetaDataWriterControl(QObject *parent = Q_NULLPTR); + explicit QMetaDataWriterControl(QObject *parent = nullptr); }; #define QMetaDataWriterControl_iid "org.qt-project.qt.metadatawritercontrol/5.0" diff --git a/src/multimedia/controls/qradiodatacontrol.h b/src/multimedia/controls/qradiodatacontrol.h index 28b3a57b2..98302b918 100644 --- a/src/multimedia/controls/qradiodatacontrol.h +++ b/src/multimedia/controls/qradiodatacontrol.h @@ -76,7 +76,7 @@ Q_SIGNALS: void error(QRadioData::Error err); protected: - explicit QRadioDataControl(QObject *parent = Q_NULLPTR); + explicit QRadioDataControl(QObject *parent = nullptr); }; #define QRadioDataControl_iid "org.qt-project.qt.radiodatacontrol/5.0" diff --git a/src/multimedia/controls/qradiotunercontrol.h b/src/multimedia/controls/qradiotunercontrol.h index 9a9e12059..bdf529d42 100644 --- a/src/multimedia/controls/qradiotunercontrol.h +++ b/src/multimedia/controls/qradiotunercontrol.h @@ -107,7 +107,7 @@ Q_SIGNALS: void antennaConnectedChanged(bool connectionStatus); protected: - explicit QRadioTunerControl(QObject *parent = Q_NULLPTR); + explicit QRadioTunerControl(QObject *parent = nullptr); }; #define QRadioTunerControl_iid "org.qt-project.qt.radiotunercontrol/5.0" diff --git a/src/multimedia/controls/qvideodeviceselectorcontrol.h b/src/multimedia/controls/qvideodeviceselectorcontrol.h index 10a703bb2..2d55c0d70 100644 --- a/src/multimedia/controls/qvideodeviceselectorcontrol.h +++ b/src/multimedia/controls/qvideodeviceselectorcontrol.h @@ -71,7 +71,7 @@ Q_SIGNALS: void devicesChanged(); protected: - explicit QVideoDeviceSelectorControl(QObject *parent = Q_NULLPTR); + explicit QVideoDeviceSelectorControl(QObject *parent = nullptr); }; #define QVideoDeviceSelectorControl_iid "org.qt-project.qt.videodeviceselectorcontrol/5.0" diff --git a/src/multimedia/controls/qvideoencodersettingscontrol.h b/src/multimedia/controls/qvideoencodersettingscontrol.h index ea1401aeb..366d585ee 100644 --- a/src/multimedia/controls/qvideoencodersettingscontrol.h +++ b/src/multimedia/controls/qvideoencodersettingscontrol.h @@ -65,10 +65,10 @@ public: virtual ~QVideoEncoderSettingsControl(); virtual QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings, - bool *continuous = Q_NULLPTR) const = 0; + bool *continuous = nullptr) const = 0; virtual QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings, - bool *continuous = Q_NULLPTR) const = 0; + bool *continuous = nullptr) const = 0; virtual QStringList supportedVideoCodecs() const = 0; virtual QString videoCodecDescription(const QString &codecName) const = 0; @@ -77,7 +77,7 @@ public: virtual void setVideoSettings(const QVideoEncoderSettings &settings) = 0; protected: - explicit QVideoEncoderSettingsControl(QObject *parent = Q_NULLPTR); + explicit QVideoEncoderSettingsControl(QObject *parent = nullptr); }; #define QVideoEncoderSettingsControl_iid "org.qt-project.qt.videoencodersettingscontrol/5.0" diff --git a/src/multimedia/controls/qvideorenderercontrol.h b/src/multimedia/controls/qvideorenderercontrol.h index 2ddab28e1..87552271a 100644 --- a/src/multimedia/controls/qvideorenderercontrol.h +++ b/src/multimedia/controls/qvideorenderercontrol.h @@ -56,7 +56,7 @@ public: virtual void setSurface(QAbstractVideoSurface *surface) = 0; protected: - explicit QVideoRendererControl(QObject *parent = Q_NULLPTR); + explicit QVideoRendererControl(QObject *parent = nullptr); }; #define QVideoRendererControl_iid "org.qt-project.qt.videorenderercontrol/5.0" diff --git a/src/multimedia/controls/qvideowindowcontrol.h b/src/multimedia/controls/qvideowindowcontrol.h index d26579ddc..510a29989 100644 --- a/src/multimedia/controls/qvideowindowcontrol.h +++ b/src/multimedia/controls/qvideowindowcontrol.h @@ -94,7 +94,7 @@ Q_SIGNALS: void nativeSizeChanged(); protected: - explicit QVideoWindowControl(QObject *parent = Q_NULLPTR); + explicit QVideoWindowControl(QObject *parent = nullptr); }; #define QVideoWindowControl_iid "org.qt-project.qt.videowindowcontrol/5.0" diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro index d5d8b40d3..63c50f09e 100644 --- a/src/multimedia/multimedia.pro +++ b/src/multimedia/multimedia.pro @@ -67,8 +67,6 @@ include(recording/recording.pri) include(video/video.pri) ANDROID_BUNDLED_JAR_DEPENDENCIES = \ - jar/QtMultimedia-bundled.jar:org.qtproject.qt5.android.multimedia.QtMultimediaUtils -ANDROID_JAR_DEPENDENCIES = \ jar/QtMultimedia.jar:org.qtproject.qt5.android.multimedia.QtMultimediaUtils ANDROID_LIB_DEPENDENCIES = \ plugins/mediaservice/libqtmedia_android.so \ diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp index a3484a6ff..01c91babc 100644 --- a/src/multimedia/playback/qmediaplayer.cpp +++ b/src/multimedia/playback/qmediaplayer.cpp @@ -49,6 +49,7 @@ #include <qmediaplaylistsourcecontrol_p.h> #include <qmedianetworkaccesscontrol.h> #include <qaudiorolecontrol.h> +#include <qcustomaudiorolecontrol.h> #include <QtCore/qcoreevent.h> #include <QtCore/qmetaobject.h> @@ -111,6 +112,7 @@ public: : provider(0) , control(0) , audioRoleControl(0) + , customAudioRoleControl(0) , playlist(0) , networkAccessControl(0) , state(QMediaPlayer::StoppedState) @@ -124,6 +126,7 @@ public: QMediaServiceProvider *provider; QMediaPlayerControl* control; QAudioRoleControl *audioRoleControl; + QCustomAudioRoleControl *customAudioRoleControl; QString errorString; QPointer<QObject> videoOutput; @@ -616,6 +619,15 @@ QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags): if (d->audioRoleControl) { connect(d->audioRoleControl, &QAudioRoleControl::audioRoleChanged, this, &QMediaPlayer::audioRoleChanged); + + d->customAudioRoleControl = qobject_cast<QCustomAudioRoleControl *>( + d->service->requestControl(QCustomAudioRoleControl_iid)); + if (d->customAudioRoleControl) { + connect(d->customAudioRoleControl, + &QCustomAudioRoleControl::customAudioRoleChanged, + this, + &QMediaPlayer::customAudioRoleChanged); + } } } if (d->networkAccessControl != 0) { @@ -641,6 +653,8 @@ QMediaPlayer::~QMediaPlayer() d->service->releaseControl(d->control); if (d->audioRoleControl) d->service->releaseControl(d->audioRoleControl); + if (d->customAudioRoleControl) + d->service->releaseControl(d->customAudioRoleControl); d->provider->releaseService(d->service); } @@ -1160,8 +1174,13 @@ void QMediaPlayer::setAudioRole(QAudio::Role audioRole) { Q_D(QMediaPlayer); - if (d->audioRoleControl) + if (d->audioRoleControl) { + if (d->customAudioRoleControl != nullptr && d->audioRoleControl->audioRole() != audioRole) { + d->customAudioRoleControl->setCustomAudioRole(QString()); + } + d->audioRoleControl->setAudioRole(audioRole); + } } /*! @@ -1182,6 +1201,48 @@ QList<QAudio::Role> QMediaPlayer::supportedAudioRoles() const return QList<QAudio::Role>(); } +QString QMediaPlayer::customAudioRole() const +{ + Q_D(const QMediaPlayer); + + if (audioRole() != QAudio::CustomRole) + return QString(); + + if (d->customAudioRoleControl != nullptr) + return d->customAudioRoleControl->customAudioRole(); + + return QString(); +} + +void QMediaPlayer::setCustomAudioRole(const QString &audioRole) +{ + Q_D(QMediaPlayer); + + if (d->customAudioRoleControl) { + Q_ASSERT(d->audioRoleControl); + setAudioRole(QAudio::CustomRole); + d->customAudioRoleControl->setCustomAudioRole(audioRole); + } +} + +/*! + Returns a list of supported custom audio roles. An empty list may + indicate that the supported custom audio roles aren't known. The + list may not be complete. + + \since 5.11 + \sa customAudioRole +*/ +QStringList QMediaPlayer::supportedCustomAudioRoles() const +{ + Q_D(const QMediaPlayer); + + if (d->customAudioRoleControl) + return d->customAudioRoleControl->supportedCustomAudioRoles(); + + return QStringList(); +} + // Enums /*! \enum QMediaPlayer::State @@ -1289,6 +1350,14 @@ QList<QAudio::Role> QMediaPlayer::supportedAudioRoles() const \since 5.6 */ +/*! + \fn void QMediaPlayer::customAudioRoleChanged(const QString &role) + + Signals that the audio \a role of the media player has changed. + + \since 5.11 +*/ + // Properties /*! \property QMediaPlayer::state @@ -1471,11 +1540,30 @@ QList<QAudio::Role> QMediaPlayer::supportedAudioRoles() const The audio role must be set before calling setMedia(). + customAudioRole is cleared when this property is set to anything other than + QAudio::CustomRole. + \since 5.6 \sa supportedAudioRoles() */ /*! + \property QMediaPlayer::customAudioRole + \brief the role of the audio stream played by the media player. + + It can be set to specify the type of audio being played when the backend supports + audio roles unknown to Qt. Specifying a role allows the system to make appropriate + decisions when it comes to volume, routing or post-processing. + + The audio role must be set before calling setMedia(). + + audioRole is set to QAudio::CustomRole when this property is set. + + \since 5.11 + \sa supportedCustomAudioRoles() +*/ + +/*! \fn void QMediaPlayer::durationChanged(qint64 duration) Signal the duration of the content has changed to \a duration, expressed in milliseconds. diff --git a/src/multimedia/playback/qmediaplayer.h b/src/multimedia/playback/qmediaplayer.h index f23a94104..e69a32ee4 100644 --- a/src/multimedia/playback/qmediaplayer.h +++ b/src/multimedia/playback/qmediaplayer.h @@ -73,7 +73,8 @@ class Q_MULTIMEDIA_EXPORT QMediaPlayer : public QMediaObject Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged) Q_PROPERTY(State state READ state NOTIFY stateChanged) Q_PROPERTY(MediaStatus mediaStatus READ mediaStatus NOTIFY mediaStatusChanged) - Q_PROPERTY(QAudio::Role audioRole READ audioRole WRITE setAudioRole) + Q_PROPERTY(QAudio::Role audioRole READ audioRole WRITE setAudioRole NOTIFY audioRoleChanged) + Q_PROPERTY(QString customAudioRole READ customAudioRole WRITE setCustomAudioRole NOTIFY customAudioRoleChanged) Q_PROPERTY(QString error READ errorString) Q_ENUMS(State) Q_ENUMS(MediaStatus) @@ -119,7 +120,7 @@ public: MediaIsPlaylist }; - explicit QMediaPlayer(QObject *parent = Q_NULLPTR, Flags flags = Flags()); + explicit QMediaPlayer(QObject *parent = nullptr, Flags flags = Flags()); ~QMediaPlayer(); static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, @@ -162,6 +163,9 @@ public: QAudio::Role audioRole() const; void setAudioRole(QAudio::Role audioRole); QList<QAudio::Role> supportedAudioRoles() const; + QString customAudioRole() const; + void setCustomAudioRole(const QString &audioRole); + QStringList supportedCustomAudioRoles() const; public Q_SLOTS: void play(); @@ -174,7 +178,7 @@ public Q_SLOTS: void setPlaybackRate(qreal rate); - void setMedia(const QMediaContent &media, QIODevice *stream = Q_NULLPTR); + void setMedia(const QMediaContent &media, QIODevice *stream = nullptr); void setPlaylist(QMediaPlaylist *playlist); void setNetworkConfigurations(const QList<QNetworkConfiguration> &configurations); @@ -200,6 +204,7 @@ Q_SIGNALS: void playbackRateChanged(qreal rate); void audioRoleChanged(QAudio::Role role); + void customAudioRoleChanged(const QString &role); void error(QMediaPlayer::Error error); diff --git a/src/multimedia/playback/qmediaplaylist.h b/src/multimedia/playback/qmediaplaylist.h index b16e734f8..4eb93bd02 100644 --- a/src/multimedia/playback/qmediaplaylist.h +++ b/src/multimedia/playback/qmediaplaylist.h @@ -67,7 +67,7 @@ public: enum PlaybackMode { CurrentItemOnce, CurrentItemInLoop, Sequential, Loop, Random }; enum Error { NoError, FormatError, FormatNotSupportedError, NetworkError, AccessDeniedError }; - explicit QMediaPlaylist(QObject *parent = Q_NULLPTR); + explicit QMediaPlaylist(QObject *parent = nullptr); virtual ~QMediaPlaylist(); QMediaObject *mediaObject() const override; @@ -96,11 +96,11 @@ public: bool removeMedia(int start, int end); bool clear(); - void load(const QNetworkRequest &request, const char *format = Q_NULLPTR); - void load(const QUrl &location, const char *format = Q_NULLPTR); - void load(QIODevice *device, const char *format = Q_NULLPTR); + void load(const QNetworkRequest &request, const char *format = nullptr); + void load(const QUrl &location, const char *format = nullptr); + void load(QIODevice *device, const char *format = nullptr); - bool save(const QUrl &location, const char *format = Q_NULLPTR); + bool save(const QUrl &location, const char *format = nullptr); bool save(QIODevice * device, const char *format); Error error() const; diff --git a/src/multimedia/playback/qplaylistfileparser.cpp b/src/multimedia/playback/qplaylistfileparser.cpp index 47a3d239e..0d33f040d 100644 --- a/src/multimedia/playback/qplaylistfileparser.cpp +++ b/src/multimedia/playback/qplaylistfileparser.cpp @@ -551,7 +551,7 @@ void QPlaylistFileParser::start(const QNetworkRequest& request, const QString &m if (!d->m_currentParser.isNull()) { abort(); - d->m_pendingJob = { Q_NULLPTR, QMediaResource(request, mimeType) }; + d->m_pendingJob = { nullptr, QMediaResource(request, mimeType) }; return; } diff --git a/src/multimedia/qmediacontrol.h b/src/multimedia/qmediacontrol.h index 680b18e7f..cff42e3ca 100644 --- a/src/multimedia/qmediacontrol.h +++ b/src/multimedia/qmediacontrol.h @@ -59,8 +59,8 @@ public: ~QMediaControl(); protected: - explicit QMediaControl(QObject *parent = Q_NULLPTR); - explicit QMediaControl(QMediaControlPrivate &dd, QObject *parent = Q_NULLPTR); + explicit QMediaControl(QObject *parent = nullptr); + explicit QMediaControl(QMediaControlPrivate &dd, QObject *parent = nullptr); QMediaControlPrivate *d_ptr; diff --git a/src/multimedia/radio/qradiodata.h b/src/multimedia/radio/qradiodata.h index 826c652ff..ffc8b44ba 100644 --- a/src/multimedia/radio/qradiodata.h +++ b/src/multimedia/radio/qradiodata.h @@ -82,7 +82,7 @@ public: College }; - explicit QRadioData(QMediaObject *mediaObject, QObject *parent = Q_NULLPTR); + explicit QRadioData(QMediaObject *mediaObject, QObject *parent = nullptr); ~QRadioData(); QMultimedia::AvailabilityStatus availability() const; diff --git a/src/multimedia/radio/qradiotuner.h b/src/multimedia/radio/qradiotuner.h index 7952a2e6c..9e62c849d 100644 --- a/src/multimedia/radio/qradiotuner.h +++ b/src/multimedia/radio/qradiotuner.h @@ -78,7 +78,7 @@ public: enum StereoMode { ForceStereo, ForceMono, Auto }; enum SearchMode { SearchFast, SearchGetStationId }; - explicit QRadioTuner(QObject *parent = Q_NULLPTR); + explicit QRadioTuner(QObject *parent = nullptr); ~QRadioTuner(); QMultimedia::AvailabilityStatus availability() const override; diff --git a/src/multimedia/recording/qaudiorecorder.h b/src/multimedia/recording/qaudiorecorder.h index 75f95d354..e57794b40 100644 --- a/src/multimedia/recording/qaudiorecorder.h +++ b/src/multimedia/recording/qaudiorecorder.h @@ -62,7 +62,7 @@ class Q_MULTIMEDIA_EXPORT QAudioRecorder : public QMediaRecorder Q_OBJECT Q_PROPERTY(QString audioInput READ audioInput WRITE setAudioInput NOTIFY audioInputChanged) public: - explicit QAudioRecorder(QObject *parent = Q_NULLPTR); + explicit QAudioRecorder(QObject *parent = nullptr); ~QAudioRecorder(); QStringList audioInputs() const; diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h index a12bcd632..0fdcf80e4 100644 --- a/src/multimedia/recording/qmediarecorder.h +++ b/src/multimedia/recording/qmediarecorder.h @@ -106,7 +106,7 @@ public: OutOfSpaceError }; - explicit QMediaRecorder(QMediaObject *mediaObject, QObject *parent = Q_NULLPTR); + explicit QMediaRecorder(QMediaObject *mediaObject, QObject *parent = nullptr); ~QMediaRecorder(); QMediaObject *mediaObject() const override; @@ -137,16 +137,16 @@ public: QString audioCodecDescription(const QString &codecName) const; QList<int> supportedAudioSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(), - bool *continuous = Q_NULLPTR) const; + bool *continuous = nullptr) const; QStringList supportedVideoCodecs() const; QString videoCodecDescription(const QString &codecName) const; QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), - bool *continuous = Q_NULLPTR) const; + bool *continuous = nullptr) const; QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), - bool *continuous = Q_NULLPTR) const; + bool *continuous = nullptr) const; QAudioEncoderSettings audioSettings() const; QVideoEncoderSettings videoSettings() const; @@ -193,7 +193,7 @@ Q_SIGNALS: void availabilityChanged(QMultimedia::AvailabilityStatus availability); protected: - QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = Q_NULLPTR); + QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = nullptr); bool setMediaObject(QMediaObject *object) override; QMediaRecorderPrivate *d_ptr; diff --git a/src/multimedia/video/qabstractvideofilter.h b/src/multimedia/video/qabstractvideofilter.h index 7e125fac4..6263f4730 100644 --- a/src/multimedia/video/qabstractvideofilter.h +++ b/src/multimedia/video/qabstractvideofilter.h @@ -68,7 +68,7 @@ class Q_MULTIMEDIA_EXPORT QAbstractVideoFilter : public QObject Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged) public: - explicit QAbstractVideoFilter(QObject *parent = Q_NULLPTR); + explicit QAbstractVideoFilter(QObject *parent = nullptr); ~QAbstractVideoFilter(); bool isActive() const; diff --git a/src/multimedia/video/qabstractvideosurface.h b/src/multimedia/video/qabstractvideosurface.h index f3d3e0799..391c9e696 100644 --- a/src/multimedia/video/qabstractvideosurface.h +++ b/src/multimedia/video/qabstractvideosurface.h @@ -64,7 +64,7 @@ public: ResourceError }; - explicit QAbstractVideoSurface(QObject *parent = Q_NULLPTR); + explicit QAbstractVideoSurface(QObject *parent = nullptr); ~QAbstractVideoSurface(); virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats( diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp index 8578eee1c..bbb87b63b 100644 --- a/src/multimedia/video/qvideoframe.cpp +++ b/src/multimedia/video/qvideoframe.cpp @@ -1025,23 +1025,23 @@ extern void QT_FASTCALL qt_convert_NV12_to_ARGB32(const QVideoFrame&, uchar*); extern void QT_FASTCALL qt_convert_NV21_to_ARGB32(const QVideoFrame&, uchar*); static VideoFrameConvertFunc qConvertFuncs[QVideoFrame::NPixelFormats] = { - /* Format_Invalid */ Q_NULLPTR, // Not needed - /* Format_ARGB32 */ Q_NULLPTR, // Not needed - /* Format_ARGB32_Premultiplied */ Q_NULLPTR, // Not needed - /* Format_RGB32 */ Q_NULLPTR, // Not needed - /* Format_RGB24 */ Q_NULLPTR, // Not needed - /* Format_RGB565 */ Q_NULLPTR, // Not needed - /* Format_RGB555 */ Q_NULLPTR, // Not needed - /* Format_ARGB8565_Premultiplied */ Q_NULLPTR, // Not needed + /* Format_Invalid */ nullptr, // Not needed + /* Format_ARGB32 */ nullptr, // Not needed + /* Format_ARGB32_Premultiplied */ nullptr, // Not needed + /* Format_RGB32 */ nullptr, // Not needed + /* Format_RGB24 */ nullptr, // Not needed + /* Format_RGB565 */ nullptr, // Not needed + /* Format_RGB555 */ nullptr, // Not needed + /* Format_ARGB8565_Premultiplied */ nullptr, // Not needed /* Format_BGRA32 */ qt_convert_BGRA32_to_ARGB32, /* Format_BGRA32_Premultiplied */ qt_convert_BGRA32_to_ARGB32, /* Format_BGR32 */ qt_convert_BGRA32_to_ARGB32, /* Format_BGR24 */ qt_convert_BGR24_to_ARGB32, /* Format_BGR565 */ qt_convert_BGR565_to_ARGB32, /* Format_BGR555 */ qt_convert_BGR555_to_ARGB32, - /* Format_BGRA5658_Premultiplied */ Q_NULLPTR, + /* Format_BGRA5658_Premultiplied */ nullptr, /* Format_AYUV444 */ qt_convert_AYUV444_to_ARGB32, - /* Format_AYUV444_Premultiplied */ Q_NULLPTR, + /* Format_AYUV444_Premultiplied */ nullptr, /* Format_YUV444 */ qt_convert_YUV444_to_ARGB32, /* Format_YUV420P */ qt_convert_YUV420P_to_ARGB32, /* Format_YV12 */ qt_convert_YV12_to_ARGB32, @@ -1049,15 +1049,15 @@ static VideoFrameConvertFunc qConvertFuncs[QVideoFrame::NPixelFormats] = { /* Format_YUYV */ qt_convert_YUYV_to_ARGB32, /* Format_NV12 */ qt_convert_NV12_to_ARGB32, /* Format_NV21 */ qt_convert_NV21_to_ARGB32, - /* Format_IMC1 */ Q_NULLPTR, - /* Format_IMC2 */ Q_NULLPTR, - /* Format_IMC3 */ Q_NULLPTR, - /* Format_IMC4 */ Q_NULLPTR, - /* Format_Y8 */ Q_NULLPTR, - /* Format_Y16 */ Q_NULLPTR, - /* Format_Jpeg */ Q_NULLPTR, // Not needed - /* Format_CameraRaw */ Q_NULLPTR, - /* Format_AdobeDng */ Q_NULLPTR + /* Format_IMC1 */ nullptr, + /* Format_IMC2 */ nullptr, + /* Format_IMC3 */ nullptr, + /* Format_IMC4 */ nullptr, + /* Format_Y8 */ nullptr, + /* Format_Y16 */ nullptr, + /* Format_Jpeg */ nullptr, // Not needed + /* Format_CameraRaw */ nullptr, + /* Format_AdobeDng */ nullptr }; static void qInitConvertFuncsAsm() diff --git a/src/multimedia/video/qvideoprobe.h b/src/multimedia/video/qvideoprobe.h index 854e71272..93ba4d2f5 100644 --- a/src/multimedia/video/qvideoprobe.h +++ b/src/multimedia/video/qvideoprobe.h @@ -53,7 +53,7 @@ class Q_MULTIMEDIA_EXPORT QVideoProbe : public QObject { Q_OBJECT public: - explicit QVideoProbe(QObject *parent = Q_NULLPTR); + explicit QVideoProbe(QObject *parent = nullptr); ~QVideoProbe(); bool setSource(QMediaObject *source); diff --git a/src/multimedia/video/qvideosurfaceformat.cpp b/src/multimedia/video/qvideosurfaceformat.cpp index c31c52ff7..384ab4e53 100644 --- a/src/multimedia/video/qvideosurfaceformat.cpp +++ b/src/multimedia/video/qvideosurfaceformat.cpp @@ -450,6 +450,35 @@ void QVideoSurfaceFormat::setYCbCrColorSpace(QVideoSurfaceFormat::YCbCrColorSpac } /*! + Returns \c true if the surface is mirrored around its vertical axis. + This is typically needed for video frames coming from a front camera of a mobile device. + + \note The mirroring here differs from QImage::mirrored, as a vertically mirrored QImage + will be mirrored around its x-axis. + + \since 5.11 + */ +bool QVideoSurfaceFormat::isMirrored() const +{ + return d->mirrored; +} + +/*! + Sets if the surface is mirrored around its vertical axis. + This is typically needed for video frames coming from a front camera of a mobile device. + Default value is false. + + \note The mirroring here differs from QImage::mirrored, as a vertically mirrored QImage + will be mirrored around its x-axis. + + \since 5.11 + */ +void QVideoSurfaceFormat::setMirrored(bool mirrored) +{ + d->mirrored = mirrored; +} + +/*! Returns a suggested size in pixels for the video stream. This is the size of the viewport scaled according to the pixel aspect ratio. diff --git a/src/multimedia/video/qvideosurfaceformat.h b/src/multimedia/video/qvideosurfaceformat.h index 83785ac0a..175b199a7 100644 --- a/src/multimedia/video/qvideosurfaceformat.h +++ b/src/multimedia/video/qvideosurfaceformat.h @@ -117,6 +117,9 @@ public: YCbCrColorSpace yCbCrColorSpace() const; void setYCbCrColorSpace(YCbCrColorSpace colorSpace); + bool isMirrored() const; + void setMirrored(bool mirrored); + QSize sizeHint() const; QList<QByteArray> propertyNames() const; diff --git a/src/multimediawidgets/qcameraviewfinder.h b/src/multimediawidgets/qcameraviewfinder.h index 57f20809a..eb0f396cc 100644 --- a/src/multimediawidgets/qcameraviewfinder.h +++ b/src/multimediawidgets/qcameraviewfinder.h @@ -61,7 +61,7 @@ class Q_MULTIMEDIAWIDGETS_EXPORT QCameraViewfinder : public QVideoWidget { Q_OBJECT public: - explicit QCameraViewfinder(QWidget *parent = Q_NULLPTR); + explicit QCameraViewfinder(QWidget *parent = nullptr); ~QCameraViewfinder(); QMediaObject *mediaObject() const override; diff --git a/src/multimediawidgets/qgraphicsvideoitem.cpp b/src/multimediawidgets/qgraphicsvideoitem.cpp index 584cb429a..002fc2cc2 100644 --- a/src/multimediawidgets/qgraphicsvideoitem.cpp +++ b/src/multimediawidgets/qgraphicsvideoitem.cpp @@ -254,7 +254,7 @@ bool QGraphicsVideoItem::setMediaObject(QMediaObject *object) d->rendererControl = qobject_cast<QVideoRendererControl *>(control); if (d->rendererControl) { - //don't set the surface untill the item is painted + //don't set the surface until the item is painted //at least once and the surface is configured if (!d->updatePaintDevice) d->rendererControl->setSurface(d->surface); diff --git a/src/multimediawidgets/qgraphicsvideoitem.h b/src/multimediawidgets/qgraphicsvideoitem.h index 4a86d4412..3902389d9 100644 --- a/src/multimediawidgets/qgraphicsvideoitem.h +++ b/src/multimediawidgets/qgraphicsvideoitem.h @@ -61,7 +61,7 @@ class Q_MULTIMEDIAWIDGETS_EXPORT QGraphicsVideoItem : public QGraphicsObject, pu Q_PROPERTY(QSizeF size READ size WRITE setSize) Q_PROPERTY(QSizeF nativeSize READ nativeSize NOTIFY nativeSizeChanged) public: - explicit QGraphicsVideoItem(QGraphicsItem *parent = Q_NULLPTR); + explicit QGraphicsVideoItem(QGraphicsItem *parent = nullptr); ~QGraphicsVideoItem(); QMediaObject *mediaObject() const override; @@ -79,7 +79,7 @@ public: QRectF boundingRect() const override; - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; Q_SIGNALS: void nativeSizeChanged(const QSizeF &size); diff --git a/src/multimediawidgets/qvideowidget.cpp b/src/multimediawidgets/qvideowidget.cpp index c43f7a006..9a01c73aa 100644 --- a/src/multimediawidgets/qvideowidget.cpp +++ b/src/multimediawidgets/qvideowidget.cpp @@ -237,10 +237,8 @@ void QRendererVideoWidgetBackend::paintEvent(QPaintEvent *event) QBrush brush = m_widget->palette().window(); - QVector<QRect> rects = borderRegion.rects(); - for (QVector<QRect>::iterator it = rects.begin(), end = rects.end(); it != end; ++it) { - painter.fillRect(*it, brush); - } + for (const QRect &r : borderRegion) + painter.fillRect(r, brush); } if (m_surface->isActive() && m_boundingRect.intersects(event->rect())) { diff --git a/src/multimediawidgets/qvideowidget.h b/src/multimediawidgets/qvideowidget.h index c8474288b..00b160821 100644 --- a/src/multimediawidgets/qvideowidget.h +++ b/src/multimediawidgets/qvideowidget.h @@ -64,7 +64,7 @@ class Q_MULTIMEDIAWIDGETS_EXPORT QVideoWidget : public QWidget, public QMediaBin Q_PROPERTY(int saturation READ saturation WRITE setSaturation NOTIFY saturationChanged) public: - explicit QVideoWidget(QWidget *parent = Q_NULLPTR); + explicit QVideoWidget(QWidget *parent = nullptr); ~QVideoWidget(); QMediaObject *mediaObject() const override; diff --git a/src/multimediawidgets/qvideowidgetcontrol.h b/src/multimediawidgets/qvideowidgetcontrol.h index 7d9423882..c0d177d08 100644 --- a/src/multimediawidgets/qvideowidgetcontrol.h +++ b/src/multimediawidgets/qvideowidgetcontrol.h @@ -85,7 +85,7 @@ Q_SIGNALS: void saturationChanged(int saturation); protected: - explicit QVideoWidgetControl(QObject *parent = Q_NULLPTR); + explicit QVideoWidgetControl(QObject *parent = nullptr); }; #define QVideoWidgetControl_iid "org.qt-project.qt.videowidgetcontrol/5.0" diff --git a/src/plugins/alsa/qalsaplugin.h b/src/plugins/alsa/qalsaplugin.h index b3c530f88..cebede13b 100644 --- a/src/plugins/alsa/qalsaplugin.h +++ b/src/plugins/alsa/qalsaplugin.h @@ -56,11 +56,11 @@ public: QAlsaPlugin(QObject *parent = 0); ~QAlsaPlugin() {} - QByteArray defaultDevice(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QList<QByteArray> availableDevices(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QAbstractAudioInput *createInput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioOutput *createOutput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) Q_DECL_OVERRIDE; + QByteArray defaultDevice(QAudio::Mode mode) const override; + QList<QByteArray> availableDevices(QAudio::Mode mode) const override; + QAbstractAudioInput *createInput(const QByteArray &device) override; + QAbstractAudioOutput *createOutput(const QByteArray &device) override; + QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) override; }; QT_END_NAMESPACE diff --git a/src/plugins/android/jar/bundledjar.pro b/src/plugins/android/jar/bundledjar.pro deleted file mode 100644 index cc76164a7..000000000 --- a/src/plugins/android/jar/bundledjar.pro +++ /dev/null @@ -1,3 +0,0 @@ -TARGET = QtMultimedia-bundled -CONFIG += bundled_jar_file -include(jar.pri) diff --git a/src/plugins/android/jar/distributedjar.pro b/src/plugins/android/jar/distributedjar.pro deleted file mode 100644 index 34724c197..000000000 --- a/src/plugins/android/jar/distributedjar.pro +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = QtMultimedia -include(jar.pri) diff --git a/src/plugins/android/jar/jar.pri b/src/plugins/android/jar/jar.pri deleted file mode 100644 index 5408fb109..000000000 --- a/src/plugins/android/jar/jar.pri +++ /dev/null @@ -1,19 +0,0 @@ -load(qt_build_paths) -CONFIG += java -DESTDIR = $$MODULE_BASE_OUTDIR/jar - -JAVACLASSPATH += $$PWD/src - -JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java \ - $$PWD/src/org/qtproject/qt5/android/multimedia/QtCameraListener.java \ - $$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureListener.java \ - $$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder.java \ - $$PWD/src/org/qtproject/qt5/android/multimedia/QtMultimediaUtils.java \ - $$PWD/src/org/qtproject/qt5/android/multimedia/QtMediaRecorderListener.java \ - $$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceHolderCallback.java - -# install -target.path = $$[QT_INSTALL_PREFIX]/jar -INSTALLS += target - -OTHER_FILES += $$JAVASOURCES diff --git a/src/plugins/android/jar/jar.pro b/src/plugins/android/jar/jar.pro index 6a4fcd389..96e492f63 100644 --- a/src/plugins/android/jar/jar.pro +++ b/src/plugins/android/jar/jar.pro @@ -1,3 +1,21 @@ -TEMPLATE=subdirs -SUBDIRS += distributedjar.pro bundledjar.pro +TARGET = QtMultimedia +load(qt_build_paths) +CONFIG += java +DESTDIR = $$MODULE_BASE_OUTDIR/jar + +JAVACLASSPATH += $$PWD/src + +JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java \ + $$PWD/src/org/qtproject/qt5/android/multimedia/QtCameraListener.java \ + $$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureListener.java \ + $$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder.java \ + $$PWD/src/org/qtproject/qt5/android/multimedia/QtMultimediaUtils.java \ + $$PWD/src/org/qtproject/qt5/android/multimedia/QtMediaRecorderListener.java \ + $$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceHolderCallback.java + +# install +target.path = $$[QT_INSTALL_PREFIX]/jar +INSTALLS += target + +OTHER_FILES += $$JAVASOURCES diff --git a/src/plugins/android/src/common/qandroidvideooutput.h b/src/plugins/android/src/common/qandroidvideooutput.h index 936e4c40b..62a936881 100644 --- a/src/plugins/android/src/common/qandroidvideooutput.h +++ b/src/plugins/android/src/common/qandroidvideooutput.h @@ -93,19 +93,19 @@ class QAndroidTextureVideoOutput : public QAndroidVideoOutput Q_OBJECT public: explicit QAndroidTextureVideoOutput(QObject *parent = 0); - ~QAndroidTextureVideoOutput() Q_DECL_OVERRIDE; + ~QAndroidTextureVideoOutput() override; QAbstractVideoSurface *surface() const; void setSurface(QAbstractVideoSurface *surface); - AndroidSurfaceTexture *surfaceTexture() Q_DECL_OVERRIDE; + AndroidSurfaceTexture *surfaceTexture() override; - bool isReady() Q_DECL_OVERRIDE; - void setVideoSize(const QSize &) Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; - void reset() Q_DECL_OVERRIDE; + bool isReady() override; + void setVideoSize(const QSize &) override; + void stop() override; + void reset() override; - void customEvent(QEvent *) Q_DECL_OVERRIDE; + void customEvent(QEvent *) override; private Q_SLOTS: void onFrameAvailable(); diff --git a/src/plugins/android/src/mediacapture/qandroidaudioencodersettingscontrol.h b/src/plugins/android/src/mediacapture/qandroidaudioencodersettingscontrol.h index b94964be0..e68bf6ef7 100644 --- a/src/plugins/android/src/mediacapture/qandroidaudioencodersettingscontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidaudioencodersettingscontrol.h @@ -52,11 +52,11 @@ class QAndroidAudioEncoderSettingsControl : public QAudioEncoderSettingsControl public: explicit QAndroidAudioEncoderSettingsControl(QAndroidCaptureSession *session); - QStringList supportedAudioCodecs() const Q_DECL_OVERRIDE; - QString codecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QAudioEncoderSettings audioSettings() const Q_DECL_OVERRIDE; - void setAudioSettings(const QAudioEncoderSettings &settings) Q_DECL_OVERRIDE; + QStringList supportedAudioCodecs() const override; + QString codecDescription(const QString &codecName) const override; + QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const override; + QAudioEncoderSettings audioSettings() const override; + void setAudioSettings(const QAudioEncoderSettings &settings) override; private: QAndroidCaptureSession *m_session; diff --git a/src/plugins/android/src/mediacapture/qandroidcameracapturebufferformatcontrol.h b/src/plugins/android/src/mediacapture/qandroidcameracapturebufferformatcontrol.h index 3572b126d..b27727543 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameracapturebufferformatcontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameracapturebufferformatcontrol.h @@ -50,9 +50,9 @@ class QAndroidCameraCaptureBufferFormatControl : public QCameraCaptureBufferForm public: QAndroidCameraCaptureBufferFormatControl(); - QList<QVideoFrame::PixelFormat> supportedBufferFormats() const Q_DECL_OVERRIDE; - QVideoFrame::PixelFormat bufferFormat() const Q_DECL_OVERRIDE; - void setBufferFormat(QVideoFrame::PixelFormat format) Q_DECL_OVERRIDE; + QList<QVideoFrame::PixelFormat> supportedBufferFormats() const override; + QVideoFrame::PixelFormat bufferFormat() const override; + void setBufferFormat(QVideoFrame::PixelFormat format) override; }; QT_END_NAMESPACE diff --git a/src/plugins/android/src/mediacapture/qandroidcameracapturedestinationcontrol.h b/src/plugins/android/src/mediacapture/qandroidcameracapturedestinationcontrol.h index 656aa2ced..1edfdab12 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameracapturedestinationcontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameracapturedestinationcontrol.h @@ -52,9 +52,9 @@ class QAndroidCameraCaptureDestinationControl : public QCameraCaptureDestination public: explicit QAndroidCameraCaptureDestinationControl(QAndroidCameraSession *session); - bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const Q_DECL_OVERRIDE; - QCameraImageCapture::CaptureDestinations captureDestination() const Q_DECL_OVERRIDE; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) Q_DECL_OVERRIDE; + bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const override; + QCameraImageCapture::CaptureDestinations captureDestination() const override; + void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) override; private: QAndroidCameraSession *m_session; diff --git a/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.h b/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.h index e6b7fda8b..e87e6cd3a 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.h @@ -52,12 +52,12 @@ class QAndroidCameraExposureControl : public QCameraExposureControl public: explicit QAndroidCameraExposureControl(QAndroidCameraSession *session); - bool isParameterSupported(ExposureParameter parameter) const Q_DECL_OVERRIDE; - QVariantList supportedParameterRange(ExposureParameter parameter, bool *continuous) const Q_DECL_OVERRIDE; + bool isParameterSupported(ExposureParameter parameter) const override; + QVariantList supportedParameterRange(ExposureParameter parameter, bool *continuous) const override; - QVariant requestedValue(ExposureParameter parameter) const Q_DECL_OVERRIDE; - QVariant actualValue(ExposureParameter parameter) const Q_DECL_OVERRIDE; - bool setValue(ExposureParameter parameter, const QVariant& value) Q_DECL_OVERRIDE; + QVariant requestedValue(ExposureParameter parameter) const override; + QVariant actualValue(ExposureParameter parameter) const override; + bool setValue(ExposureParameter parameter, const QVariant& value) override; private Q_SLOTS: void onCameraOpened(); diff --git a/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.h b/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.h index 7a0015eaf..071c45c72 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.h @@ -52,10 +52,10 @@ class QAndroidCameraFlashControl : public QCameraFlashControl public: explicit QAndroidCameraFlashControl(QAndroidCameraSession *session); - QCameraExposure::FlashModes flashMode() const Q_DECL_OVERRIDE; - void setFlashMode(QCameraExposure::FlashModes mode) Q_DECL_OVERRIDE; - bool isFlashModeSupported(QCameraExposure::FlashModes mode) const Q_DECL_OVERRIDE; - bool isFlashReady() const Q_DECL_OVERRIDE; + QCameraExposure::FlashModes flashMode() const override; + void setFlashMode(QCameraExposure::FlashModes mode) override; + bool isFlashModeSupported(QCameraExposure::FlashModes mode) const override; + bool isFlashReady() const override; private Q_SLOTS: void onCameraOpened(); diff --git a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h index a3ba089da..9c606cf7d 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h @@ -52,15 +52,15 @@ class QAndroidCameraFocusControl : public QCameraFocusControl public: explicit QAndroidCameraFocusControl(QAndroidCameraSession *session); - QCameraFocus::FocusModes focusMode() const Q_DECL_OVERRIDE; - void setFocusMode(QCameraFocus::FocusModes mode) Q_DECL_OVERRIDE; - bool isFocusModeSupported(QCameraFocus::FocusModes mode) const Q_DECL_OVERRIDE; - QCameraFocus::FocusPointMode focusPointMode() const Q_DECL_OVERRIDE; - void setFocusPointMode(QCameraFocus::FocusPointMode mode) Q_DECL_OVERRIDE; - bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const Q_DECL_OVERRIDE; - QPointF customFocusPoint() const Q_DECL_OVERRIDE; - void setCustomFocusPoint(const QPointF &point) Q_DECL_OVERRIDE; - QCameraFocusZoneList focusZones() const Q_DECL_OVERRIDE; + QCameraFocus::FocusModes focusMode() const override; + void setFocusMode(QCameraFocus::FocusModes mode) override; + bool isFocusModeSupported(QCameraFocus::FocusModes mode) const override; + QCameraFocus::FocusPointMode focusPointMode() const override; + void setFocusPointMode(QCameraFocus::FocusPointMode mode) override; + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const override; + QPointF customFocusPoint() const override; + void setCustomFocusPoint(const QPointF &point) override; + QCameraFocusZoneList focusZones() const override; private Q_SLOTS: void onCameraOpened(); diff --git a/src/plugins/android/src/mediacapture/qandroidcameraimagecapturecontrol.h b/src/plugins/android/src/mediacapture/qandroidcameraimagecapturecontrol.h index 720eed748..cfe748c39 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameraimagecapturecontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameraimagecapturecontrol.h @@ -52,13 +52,13 @@ class QAndroidCameraImageCaptureControl : public QCameraImageCaptureControl public: explicit QAndroidCameraImageCaptureControl(QAndroidCameraSession *session); - bool isReadyForCapture() const Q_DECL_OVERRIDE; + bool isReadyForCapture() const override; - QCameraImageCapture::DriveMode driveMode() const Q_DECL_OVERRIDE; - void setDriveMode(QCameraImageCapture::DriveMode mode) Q_DECL_OVERRIDE; + QCameraImageCapture::DriveMode driveMode() const override; + void setDriveMode(QCameraImageCapture::DriveMode mode) override; - int capture(const QString &fileName) Q_DECL_OVERRIDE; - void cancelCapture() Q_DECL_OVERRIDE; + int capture(const QString &fileName) override; + void cancelCapture() override; private: QAndroidCameraSession *m_session; diff --git a/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h b/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h index 8a750864a..9845c80dc 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h @@ -52,10 +52,10 @@ class QAndroidCameraImageProcessingControl : public QCameraImageProcessingContro public: explicit QAndroidCameraImageProcessingControl(QAndroidCameraSession *session); - bool isParameterSupported(ProcessingParameter) const Q_DECL_OVERRIDE; - bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const Q_DECL_OVERRIDE; - QVariant parameter(ProcessingParameter parameter) const Q_DECL_OVERRIDE; - void setParameter(ProcessingParameter parameter, const QVariant &value) Q_DECL_OVERRIDE; + bool isParameterSupported(ProcessingParameter) const override; + bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const override; + QVariant parameter(ProcessingParameter parameter) const override; + void setParameter(ProcessingParameter parameter, const QVariant &value) override; private Q_SLOTS: void onCameraOpened(); diff --git a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.h b/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.h index e0a224b6e..149da0f32 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.h @@ -53,10 +53,10 @@ class QAndroidCameraLocksControl : public QCameraLocksControl public: explicit QAndroidCameraLocksControl(QAndroidCameraSession *session); - QCamera::LockTypes supportedLocks() const Q_DECL_OVERRIDE; - QCamera::LockStatus lockStatus(QCamera::LockType lock) const Q_DECL_OVERRIDE; - void searchAndLock(QCamera::LockTypes locks) Q_DECL_OVERRIDE; - void unlock(QCamera::LockTypes locks) Q_DECL_OVERRIDE; + QCamera::LockTypes supportedLocks() const override; + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; private Q_SLOTS: void onCameraOpened(); diff --git a/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.cpp index 64b9e7e32..2243df732 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.cpp @@ -56,13 +56,13 @@ class QAndroidCameraDataVideoOutput : public QAndroidVideoOutput Q_OBJECT public: explicit QAndroidCameraDataVideoOutput(QAndroidCameraVideoRendererControl *control); - ~QAndroidCameraDataVideoOutput() Q_DECL_OVERRIDE; + ~QAndroidCameraDataVideoOutput() override; - AndroidSurfaceHolder *surfaceHolder() Q_DECL_OVERRIDE; + AndroidSurfaceHolder *surfaceHolder() override; - bool isReady() Q_DECL_OVERRIDE; + bool isReady() override; - void stop() Q_DECL_OVERRIDE; + void stop() override; private Q_SLOTS: void onSurfaceCreated(); @@ -108,7 +108,7 @@ QAndroidCameraDataVideoOutput::QAndroidCameraDataVideoOutput(QAndroidCameraVideo QAndroidCameraDataVideoOutput::~QAndroidCameraDataVideoOutput() { - m_control->cameraSession()->setPreviewCallback(Q_NULLPTR); + m_control->cameraSession()->setPreviewCallback(nullptr); delete m_surfaceView; } @@ -146,7 +146,7 @@ void QAndroidCameraDataVideoOutput::configureFormat() } if (m_pixelFormat == QVideoFrame::Format_Invalid) { - m_control->cameraSession()->setPreviewCallback(Q_NULLPTR); + m_control->cameraSession()->setPreviewCallback(nullptr); qWarning("The video surface is not compatible with any format supported by the camera"); } else { m_control->cameraSession()->setPreviewCallback(this); diff --git a/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.h b/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.h index a5c3c0d34..538226239 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.h @@ -53,10 +53,10 @@ class QAndroidCameraVideoRendererControl : public QVideoRendererControl Q_OBJECT public: QAndroidCameraVideoRendererControl(QAndroidCameraSession *session, QObject *parent = 0); - ~QAndroidCameraVideoRendererControl() Q_DECL_OVERRIDE; + ~QAndroidCameraVideoRendererControl() override; - QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE; - void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE; + QAbstractVideoSurface *surface() const override; + void setSurface(QAbstractVideoSurface *surface) override; QAndroidCameraSession *cameraSession() const { return m_cameraSession; } diff --git a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h b/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h index 770ad659a..96fc4f77b 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h @@ -53,13 +53,13 @@ class QAndroidCameraZoomControl : public QCameraZoomControl public: explicit QAndroidCameraZoomControl(QAndroidCameraSession *session); - qreal maximumOpticalZoom() const Q_DECL_OVERRIDE; - qreal maximumDigitalZoom() const Q_DECL_OVERRIDE; - qreal requestedOpticalZoom() const Q_DECL_OVERRIDE; - qreal requestedDigitalZoom() const Q_DECL_OVERRIDE; - qreal currentOpticalZoom() const Q_DECL_OVERRIDE; - qreal currentDigitalZoom() const Q_DECL_OVERRIDE; - void zoomTo(qreal optical, qreal digital) Q_DECL_OVERRIDE; + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; + void zoomTo(qreal optical, qreal digital) override; private Q_SLOTS: void onCameraOpened(); diff --git a/src/plugins/android/src/mediacapture/qandroidimageencodercontrol.h b/src/plugins/android/src/mediacapture/qandroidimageencodercontrol.h index 36e10024e..52f602e78 100644 --- a/src/plugins/android/src/mediacapture/qandroidimageencodercontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidimageencodercontrol.h @@ -52,11 +52,11 @@ class QAndroidImageEncoderControl : public QImageEncoderControl public: explicit QAndroidImageEncoderControl(QAndroidCameraSession *session); - QStringList supportedImageCodecs() const Q_DECL_OVERRIDE; - QString imageCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QImageEncoderSettings imageSettings() const Q_DECL_OVERRIDE; - void setImageSettings(const QImageEncoderSettings &settings) Q_DECL_OVERRIDE; + QStringList supportedImageCodecs() const override; + QString imageCodecDescription(const QString &codecName) const override; + QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const override; + QImageEncoderSettings imageSettings() const override; + void setImageSettings(const QImageEncoderSettings &settings) override; private Q_SLOTS: void onCameraOpened(); diff --git a/src/plugins/android/src/mediacapture/qandroidmediacontainercontrol.h b/src/plugins/android/src/mediacapture/qandroidmediacontainercontrol.h index 35c715072..1d90fb6cd 100644 --- a/src/plugins/android/src/mediacapture/qandroidmediacontainercontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidmediacontainercontrol.h @@ -52,10 +52,10 @@ class QAndroidMediaContainerControl : public QMediaContainerControl public: QAndroidMediaContainerControl(QAndroidCaptureSession *session); - QStringList supportedContainers() const Q_DECL_OVERRIDE; - QString containerFormat() const Q_DECL_OVERRIDE; - void setContainerFormat(const QString &format) Q_DECL_OVERRIDE; - QString containerDescription(const QString &formatMimeType) const Q_DECL_OVERRIDE; + QStringList supportedContainers() const override; + QString containerFormat() const override; + void setContainerFormat(const QString &format) override; + QString containerDescription(const QString &formatMimeType) const override; private: QAndroidCaptureSession *m_session; diff --git a/src/plugins/android/src/mediacapture/qandroidmediarecordercontrol.h b/src/plugins/android/src/mediacapture/qandroidmediarecordercontrol.h index 187a0f944..6da59a50d 100644 --- a/src/plugins/android/src/mediacapture/qandroidmediarecordercontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidmediarecordercontrol.h @@ -52,19 +52,19 @@ class QAndroidMediaRecorderControl : public QMediaRecorderControl public: explicit QAndroidMediaRecorderControl(QAndroidCaptureSession *session); - QUrl outputLocation() const Q_DECL_OVERRIDE; - bool setOutputLocation(const QUrl &location) Q_DECL_OVERRIDE; - QMediaRecorder::State state() const Q_DECL_OVERRIDE; - QMediaRecorder::Status status() const Q_DECL_OVERRIDE; - qint64 duration() const Q_DECL_OVERRIDE; - bool isMuted() const Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; - void applySettings() Q_DECL_OVERRIDE; + QUrl outputLocation() const override; + bool setOutputLocation(const QUrl &location) override; + QMediaRecorder::State state() const override; + QMediaRecorder::Status status() const override; + qint64 duration() const override; + bool isMuted() const override; + qreal volume() const override; + void applySettings() override; public Q_SLOTS: - void setState(QMediaRecorder::State state) Q_DECL_OVERRIDE; - void setMuted(bool muted) Q_DECL_OVERRIDE; - void setVolume(qreal volume) Q_DECL_OVERRIDE; + void setState(QMediaRecorder::State state) override; + void setMuted(bool muted) override; + void setVolume(qreal volume) override; private: QAndroidCaptureSession *m_session; diff --git a/src/plugins/android/src/mediacapture/qandroidvideoencodersettingscontrol.h b/src/plugins/android/src/mediacapture/qandroidvideoencodersettingscontrol.h index 91f84500e..146b44ac4 100644 --- a/src/plugins/android/src/mediacapture/qandroidvideoencodersettingscontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidvideoencodersettingscontrol.h @@ -52,12 +52,12 @@ class QAndroidVideoEncoderSettingsControl : public QVideoEncoderSettingsControl public: explicit QAndroidVideoEncoderSettingsControl(QAndroidCaptureSession *session); - QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QStringList supportedVideoCodecs() const Q_DECL_OVERRIDE; - QString videoCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QVideoEncoderSettings videoSettings() const Q_DECL_OVERRIDE; - void setVideoSettings(const QVideoEncoderSettings &settings) Q_DECL_OVERRIDE; + QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings, bool *continuous = 0) const override; + QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous = 0) const override; + QStringList supportedVideoCodecs() const override; + QString videoCodecDescription(const QString &codecName) const override; + QVideoEncoderSettings videoSettings() const override; + void setVideoSettings(const QVideoEncoderSettings &settings) override; private: QAndroidCaptureSession *m_session; diff --git a/src/plugins/android/src/mediacapture/qandroidviewfindersettingscontrol.h b/src/plugins/android/src/mediacapture/qandroidviewfindersettingscontrol.h index 79ebf3fc2..c7863a144 100644 --- a/src/plugins/android/src/mediacapture/qandroidviewfindersettingscontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidviewfindersettingscontrol.h @@ -58,9 +58,9 @@ class QAndroidViewfinderSettingsControl2 : public QCameraViewfinderSettingsContr public: explicit QAndroidViewfinderSettingsControl2(QAndroidCameraSession *session); - QList<QCameraViewfinderSettings> supportedViewfinderSettings() const Q_DECL_OVERRIDE; - QCameraViewfinderSettings viewfinderSettings() const Q_DECL_OVERRIDE; - void setViewfinderSettings(const QCameraViewfinderSettings &settings) Q_DECL_OVERRIDE; + QList<QCameraViewfinderSettings> supportedViewfinderSettings() const override; + QCameraViewfinderSettings viewfinderSettings() const override; + void setViewfinderSettings(const QCameraViewfinderSettings &settings) override; private: QAndroidCameraSession *m_cameraSession; diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h index d6ec63af8..04f728a59 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h +++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h @@ -54,24 +54,24 @@ class QAndroidMediaPlayerControl : public QMediaPlayerControl Q_OBJECT public: explicit QAndroidMediaPlayerControl(QObject *parent = 0); - ~QAndroidMediaPlayerControl() Q_DECL_OVERRIDE; + ~QAndroidMediaPlayerControl() override; - QMediaPlayer::State state() const Q_DECL_OVERRIDE; - QMediaPlayer::MediaStatus mediaStatus() const Q_DECL_OVERRIDE; - qint64 duration() const Q_DECL_OVERRIDE; - qint64 position() const Q_DECL_OVERRIDE; - int volume() const Q_DECL_OVERRIDE; - bool isMuted() const Q_DECL_OVERRIDE; - int bufferStatus() const Q_DECL_OVERRIDE; - bool isAudioAvailable() const Q_DECL_OVERRIDE; - bool isVideoAvailable() const Q_DECL_OVERRIDE; - bool isSeekable() const Q_DECL_OVERRIDE; - QMediaTimeRange availablePlaybackRanges() const Q_DECL_OVERRIDE; - qreal playbackRate() const Q_DECL_OVERRIDE; - void setPlaybackRate(qreal rate) Q_DECL_OVERRIDE; - QMediaContent media() const Q_DECL_OVERRIDE; - const QIODevice *mediaStream() const Q_DECL_OVERRIDE; - void setMedia(const QMediaContent &mediaContent, QIODevice *stream) Q_DECL_OVERRIDE; + QMediaPlayer::State state() const override; + QMediaPlayer::MediaStatus mediaStatus() const override; + qint64 duration() const override; + qint64 position() const override; + int volume() const override; + bool isMuted() const override; + int bufferStatus() const override; + bool isAudioAvailable() const override; + bool isVideoAvailable() const override; + bool isSeekable() const override; + QMediaTimeRange availablePlaybackRanges() const override; + qreal playbackRate() const override; + void setPlaybackRate(qreal rate) override; + QMediaContent media() const override; + const QIODevice *mediaStream() const override; + void setMedia(const QMediaContent &mediaContent, QIODevice *stream) override; void setVideoOutput(QAndroidVideoOutput *videoOutput); @@ -79,12 +79,12 @@ Q_SIGNALS: void metaDataUpdated(); public Q_SLOTS: - void setPosition(qint64 position) Q_DECL_OVERRIDE; - void play() Q_DECL_OVERRIDE; - void pause() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; - void setVolume(int volume) Q_DECL_OVERRIDE; - void setMuted(bool muted) Q_DECL_OVERRIDE; + void setPosition(qint64 position) override; + void play() override; + void pause() override; + void stop() override; + void setVolume(int volume) override; + void setMuted(bool muted) override; private Q_SLOTS: void onVideoOutputReady(bool ready); diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayervideorenderercontrol.h b/src/plugins/android/src/mediaplayer/qandroidmediaplayervideorenderercontrol.h index 2f01d986f..ef213cc57 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaplayervideorenderercontrol.h +++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayervideorenderercontrol.h @@ -52,10 +52,10 @@ class QAndroidMediaPlayerVideoRendererControl : public QVideoRendererControl Q_OBJECT public: QAndroidMediaPlayerVideoRendererControl(QAndroidMediaPlayerControl *mediaPlayer, QObject *parent = 0); - ~QAndroidMediaPlayerVideoRendererControl() Q_DECL_OVERRIDE; + ~QAndroidMediaPlayerVideoRendererControl() override; - QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE; - void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE; + QAbstractVideoSurface *surface() const override; + void setSurface(QAbstractVideoSurface *surface) override; private: QAndroidMediaPlayerControl *m_mediaPlayerControl; diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaservice.h b/src/plugins/android/src/mediaplayer/qandroidmediaservice.h index f81078d0f..f78d05ddd 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaservice.h +++ b/src/plugins/android/src/mediaplayer/qandroidmediaservice.h @@ -53,10 +53,10 @@ class QAndroidMediaService : public QMediaService Q_OBJECT public: explicit QAndroidMediaService(QObject *parent = 0); - ~QAndroidMediaService() Q_DECL_OVERRIDE; + ~QAndroidMediaService() override; - QMediaControl* requestControl(const char *name) Q_DECL_OVERRIDE; - void releaseControl(QMediaControl *control) Q_DECL_OVERRIDE; + QMediaControl* requestControl(const char *name) override; + void releaseControl(QMediaControl *control) override; private: QAndroidMediaPlayerControl *mMediaControl; diff --git a/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.h b/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.h index 4354eb54e..f2b1b47f1 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.h +++ b/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.h @@ -53,12 +53,12 @@ class QAndroidMetaDataReaderControl : public QMetaDataReaderControl Q_OBJECT public: explicit QAndroidMetaDataReaderControl(QObject *parent = 0); - ~QAndroidMetaDataReaderControl() Q_DECL_OVERRIDE; + ~QAndroidMetaDataReaderControl() override; - bool isMetaDataAvailable() const Q_DECL_OVERRIDE; + bool isMetaDataAvailable() const override; - QVariant metaData(const QString &key) const Q_DECL_OVERRIDE; - QStringList availableMetaData() const Q_DECL_OVERRIDE; + QVariant metaData(const QString &key) const override; + QStringList availableMetaData() const override; public Q_SLOTS: void onMediaChanged(const QMediaContent &media); diff --git a/src/plugins/android/src/qandroidmediaserviceplugin.h b/src/plugins/android/src/qandroidmediaserviceplugin.h index 2ac6f2f14..3ae1a36b6 100644 --- a/src/plugins/android/src/qandroidmediaserviceplugin.h +++ b/src/plugins/android/src/qandroidmediaserviceplugin.h @@ -63,17 +63,17 @@ public: QAndroidMediaServicePlugin(); ~QAndroidMediaServicePlugin(); - QMediaService* create(QString const& key) Q_DECL_OVERRIDE; - void release(QMediaService *service) Q_DECL_OVERRIDE; + QMediaService* create(QString const& key) override; + void release(QMediaService *service) override; - QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const Q_DECL_OVERRIDE; + QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const override; - QByteArray defaultDevice(const QByteArray &service) const Q_DECL_OVERRIDE; - QList<QByteArray> devices(const QByteArray &service) const Q_DECL_OVERRIDE; - QString deviceDescription(const QByteArray &service, const QByteArray &device) Q_DECL_OVERRIDE; + QByteArray defaultDevice(const QByteArray &service) const override; + QList<QByteArray> devices(const QByteArray &service) const override; + QString deviceDescription(const QByteArray &service, const QByteArray &device) override; - QCamera::Position cameraPosition(const QByteArray &device) const Q_DECL_OVERRIDE; - int cameraOrientation(const QByteArray &device) const Q_DECL_OVERRIDE; + QCamera::Position cameraPosition(const QByteArray &device) const override; + int cameraOrientation(const QByteArray &device) const override; }; QT_END_NAMESPACE diff --git a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h index 3d81d6294..4ba987e53 100644 --- a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h +++ b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h @@ -54,11 +54,11 @@ class AVFAudioEncoderSettingsControl : public QAudioEncoderSettingsControl public: explicit AVFAudioEncoderSettingsControl(AVFCameraService *service); - QStringList supportedAudioCodecs() const Q_DECL_OVERRIDE; - QString codecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QAudioEncoderSettings audioSettings() const Q_DECL_OVERRIDE; - void setAudioSettings(const QAudioEncoderSettings &settings) Q_DECL_OVERRIDE; + QStringList supportedAudioCodecs() const override; + QString codecDescription(const QString &codecName) const override; + QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const override; + QAudioEncoderSettings audioSettings() const override; + void setAudioSettings(const QAudioEncoderSettings &settings) override; NSDictionary *applySettings(); void unapplySettings(); diff --git a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h index 30f90208c..0e2846889 100644 --- a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h +++ b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h @@ -57,13 +57,13 @@ class AVFCameraExposureControl : public QCameraExposureControl public: AVFCameraExposureControl(AVFCameraService *service); - bool isParameterSupported(ExposureParameter parameter) const Q_DECL_OVERRIDE; + bool isParameterSupported(ExposureParameter parameter) const override; QVariantList supportedParameterRange(ExposureParameter parameter, - bool *continuous) const Q_DECL_OVERRIDE; + bool *continuous) const override; - QVariant requestedValue(ExposureParameter parameter) const Q_DECL_OVERRIDE; - QVariant actualValue(ExposureParameter parameter) const Q_DECL_OVERRIDE; - bool setValue(ExposureParameter parameter, const QVariant &value) Q_DECL_OVERRIDE; + QVariant requestedValue(ExposureParameter parameter) const override; + QVariant actualValue(ExposureParameter parameter) const override; + bool setValue(ExposureParameter parameter, const QVariant &value) override; private Q_SLOTS: void cameraStateChanged(); diff --git a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm index 591854204..7540ab86c 100644 --- a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm +++ b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm @@ -56,10 +56,9 @@ QT_BEGIN_NAMESPACE namespace { -// All these methods to work with exposure/ISO/SS in custom mode -// are quite new (iOS 8 or later and no OS X support). +// All these methods to work with exposure/ISO/SS in custom mode do not support macOS. -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS // Misc. helpers to check values/ranges: @@ -213,13 +212,13 @@ void qt_set_duration_iso(QPointer<AVFCameraService> service, QPointer<AVFCameraE completionHandler:completionHandler]; } -#endif // QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#endif // defined(Q_OS_IOS) } // Unnamed namespace. AVFCameraExposureControl::AVFCameraExposureControl(AVFCameraService *service) : m_service(service), - m_session(Q_NULLPTR) + m_session(nullptr) { Q_ASSERT(service); m_session = m_service->session(); @@ -230,7 +229,7 @@ AVFCameraExposureControl::AVFCameraExposureControl(AVFCameraService *service) bool AVFCameraExposureControl::isParameterSupported(ExposureParameter parameter) const { -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS AVCaptureDevice *captureDevice = m_session->videoCaptureDevice(); if (!captureDevice) return false; @@ -250,7 +249,7 @@ QVariantList AVFCameraExposureControl::supportedParameterRange(ExposureParameter bool *continuous) const { QVariantList parameterRange; -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS AVCaptureDevice *captureDevice = m_session->videoCaptureDevice(); if (!captureDevice || !isParameterSupported(parameter)) { @@ -333,7 +332,7 @@ QVariant AVFCameraExposureControl::requestedValue(ExposureParameter parameter) c QVariant AVFCameraExposureControl::actualValue(ExposureParameter parameter) const { -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS AVCaptureDevice *captureDevice = m_session->videoCaptureDevice(); if (!captureDevice || !isParameterSupported(parameter)) { // Actually, at the moment !captiredevice => !isParameterSupported. @@ -386,7 +385,7 @@ bool AVFCameraExposureControl::setValue(ExposureParameter parameter, const QVari bool AVFCameraExposureControl::setExposureMode(const QVariant &value) { -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS if (!value.canConvert<QCameraExposure::ExposureMode>()) { qDebugCamera() << Q_FUNC_INFO << "invalid exposure mode value," << "QCameraExposure::ExposureMode expected"; @@ -433,7 +432,7 @@ bool AVFCameraExposureControl::setExposureMode(const QVariant &value) bool AVFCameraExposureControl::setExposureCompensation(const QVariant &value) { -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS if (!value.canConvert<qreal>()) { qDebugCamera() << Q_FUNC_INFO << "invalid exposure compensation" <<"value, floating point number expected"; @@ -474,7 +473,7 @@ bool AVFCameraExposureControl::setExposureCompensation(const QVariant &value) bool AVFCameraExposureControl::setShutterSpeed(const QVariant &value) { -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS if (value.isNull()) return setExposureMode(QVariant::fromValue(QCameraExposure::ExposureAuto)); @@ -521,7 +520,7 @@ bool AVFCameraExposureControl::setShutterSpeed(const QVariant &value) bool AVFCameraExposureControl::setISO(const QVariant &value) { -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS if (value.isNull()) return setExposureMode(QVariant::fromValue(QCameraExposure::ExposureAuto)); @@ -565,7 +564,7 @@ bool AVFCameraExposureControl::setISO(const QVariant &value) void AVFCameraExposureControl::cameraStateChanged() { -#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0) +#ifdef Q_OS_IOS if (m_session->state() != QCamera::ActiveState) return; diff --git a/src/plugins/avfoundation/camera/avfcameraflashcontrol.h b/src/plugins/avfoundation/camera/avfcameraflashcontrol.h index f8a11a821..58403e829 100644 --- a/src/plugins/avfoundation/camera/avfcameraflashcontrol.h +++ b/src/plugins/avfoundation/camera/avfcameraflashcontrol.h @@ -56,10 +56,10 @@ class AVFCameraFlashControl : public QCameraFlashControl public: AVFCameraFlashControl(AVFCameraService *service); - QCameraExposure::FlashModes flashMode() const Q_DECL_OVERRIDE; - void setFlashMode(QCameraExposure::FlashModes mode) Q_DECL_OVERRIDE; - bool isFlashModeSupported(QCameraExposure::FlashModes mode) const Q_DECL_OVERRIDE; - bool isFlashReady() const Q_DECL_OVERRIDE; + QCameraExposure::FlashModes flashMode() const override; + void setFlashMode(QCameraExposure::FlashModes mode) override; + bool isFlashModeSupported(QCameraExposure::FlashModes mode) const override; + bool isFlashReady() const override; private Q_SLOTS: void cameraStateChanged(QCamera::State newState); diff --git a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h index 9d8b7a5ab..26135e534 100644 --- a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h +++ b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h @@ -58,17 +58,17 @@ class AVFCameraFocusControl : public QCameraFocusControl public: explicit AVFCameraFocusControl(AVFCameraService *service); - QCameraFocus::FocusModes focusMode() const Q_DECL_OVERRIDE; - void setFocusMode(QCameraFocus::FocusModes mode) Q_DECL_OVERRIDE; - bool isFocusModeSupported(QCameraFocus::FocusModes mode) const Q_DECL_OVERRIDE; + QCameraFocus::FocusModes focusMode() const override; + void setFocusMode(QCameraFocus::FocusModes mode) override; + bool isFocusModeSupported(QCameraFocus::FocusModes mode) const override; - QCameraFocus::FocusPointMode focusPointMode() const Q_DECL_OVERRIDE; - void setFocusPointMode(QCameraFocus::FocusPointMode mode) Q_DECL_OVERRIDE; - bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const Q_DECL_OVERRIDE; - QPointF customFocusPoint() const Q_DECL_OVERRIDE; - void setCustomFocusPoint(const QPointF &point) Q_DECL_OVERRIDE; + QCameraFocus::FocusPointMode focusPointMode() const override; + void setFocusPointMode(QCameraFocus::FocusPointMode mode) override; + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const override; + QPointF customFocusPoint() const override; + void setCustomFocusPoint(const QPointF &point) override; - QCameraFocusZoneList focusZones() const Q_DECL_OVERRIDE; + QCameraFocusZoneList focusZones() const override; private Q_SLOTS: void cameraStateChanged(); diff --git a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h index bed755339..588aa7b74 100644 --- a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h +++ b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h @@ -67,9 +67,9 @@ class AVFCameraViewfinderSettingsControl2 : public QCameraViewfinderSettingsCont public: AVFCameraViewfinderSettingsControl2(AVFCameraService *service); - QList<QCameraViewfinderSettings> supportedViewfinderSettings() const Q_DECL_OVERRIDE; - QCameraViewfinderSettings viewfinderSettings() const Q_DECL_OVERRIDE; - void setViewfinderSettings(const QCameraViewfinderSettings &settings) Q_DECL_OVERRIDE; + QList<QCameraViewfinderSettings> supportedViewfinderSettings() const override; + QCameraViewfinderSettings viewfinderSettings() const override; + void setViewfinderSettings(const QCameraViewfinderSettings &settings) override; // "Converters": static QVideoFrame::PixelFormat QtPixelFormatFromCVFormat(unsigned avPixelFormat); @@ -97,9 +97,9 @@ class AVFCameraViewfinderSettingsControl : public QCameraViewfinderSettingsContr public: AVFCameraViewfinderSettingsControl(AVFCameraService *service); - bool isViewfinderParameterSupported(ViewfinderParameter parameter) const Q_DECL_OVERRIDE; - QVariant viewfinderParameter(ViewfinderParameter parameter) const Q_DECL_OVERRIDE; - void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) Q_DECL_OVERRIDE; + bool isViewfinderParameterSupported(ViewfinderParameter parameter) const override; + QVariant viewfinderParameter(ViewfinderParameter parameter) const override; + void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) override; private: void setResolution(const QVariant &resolution); diff --git a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h b/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h index 6a460ad59..2307dfc28 100644 --- a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h +++ b/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h @@ -57,15 +57,15 @@ class AVFCameraZoomControl : public QCameraZoomControl public: AVFCameraZoomControl(AVFCameraService *service); - qreal maximumOpticalZoom() const Q_DECL_OVERRIDE; - qreal maximumDigitalZoom() const Q_DECL_OVERRIDE; + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; - qreal requestedOpticalZoom() const Q_DECL_OVERRIDE; - qreal requestedDigitalZoom() const Q_DECL_OVERRIDE; - qreal currentOpticalZoom() const Q_DECL_OVERRIDE; - qreal currentDigitalZoom() const Q_DECL_OVERRIDE; + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; - void zoomTo(qreal optical, qreal digital) Q_DECL_OVERRIDE; + void zoomTo(qreal optical, qreal digital) override; private Q_SLOTS: void cameraStateChanged(); diff --git a/src/plugins/avfoundation/camera/avfimageencodercontrol.h b/src/plugins/avfoundation/camera/avfimageencodercontrol.h index 22a6b2722..7e2e34294 100644 --- a/src/plugins/avfoundation/camera/avfimageencodercontrol.h +++ b/src/plugins/avfoundation/camera/avfimageencodercontrol.h @@ -61,12 +61,12 @@ class AVFImageEncoderControl : public QImageEncoderControl public: AVFImageEncoderControl(AVFCameraService *service); - QStringList supportedImageCodecs() const Q_DECL_OVERRIDE; - QString imageCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE; + QStringList supportedImageCodecs() const override; + QString imageCodecDescription(const QString &codecName) const override; QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, - bool *continuous) const Q_DECL_OVERRIDE; - QImageEncoderSettings imageSettings() const Q_DECL_OVERRIDE; - void setImageSettings(const QImageEncoderSettings &settings) Q_DECL_OVERRIDE; + bool *continuous) const override; + QImageEncoderSettings imageSettings() const override; + void setImageSettings(const QImageEncoderSettings &settings) override; QImageEncoderSettings requestedSettings() const; diff --git a/src/plugins/avfoundation/camera/avfmediacontainercontrol.h b/src/plugins/avfoundation/camera/avfmediacontainercontrol.h index 45d69f18b..e43e70baf 100644 --- a/src/plugins/avfoundation/camera/avfmediacontainercontrol.h +++ b/src/plugins/avfoundation/camera/avfmediacontainercontrol.h @@ -53,10 +53,10 @@ class AVFMediaContainerControl : public QMediaContainerControl public: explicit AVFMediaContainerControl(AVFCameraService *service); - QStringList supportedContainers() const Q_DECL_OVERRIDE; - QString containerFormat() const Q_DECL_OVERRIDE; - void setContainerFormat(const QString &format) Q_DECL_OVERRIDE; - QString containerDescription(const QString &formatMimeType) const Q_DECL_OVERRIDE; + QStringList supportedContainers() const override; + QString containerFormat() const override; + void setContainerFormat(const QString &format) override; + QString containerDescription(const QString &formatMimeType) const override; NSString *fileType() const; diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h index a0967efa3..8e049a595 100644 --- a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h +++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h @@ -65,24 +65,24 @@ public: AVFMediaRecorderControlIOS(AVFCameraService *service, QObject *parent = 0); ~AVFMediaRecorderControlIOS(); - QUrl outputLocation() const Q_DECL_OVERRIDE; - bool setOutputLocation(const QUrl &location) Q_DECL_OVERRIDE; + QUrl outputLocation() const override; + bool setOutputLocation(const QUrl &location) override; - QMediaRecorder::State state() const Q_DECL_OVERRIDE; - QMediaRecorder::Status status() const Q_DECL_OVERRIDE; + QMediaRecorder::State state() const override; + QMediaRecorder::Status status() const override; - qint64 duration() const Q_DECL_OVERRIDE; + qint64 duration() const override; - bool isMuted() const Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; + bool isMuted() const override; + qreal volume() const override; - void applySettings() Q_DECL_OVERRIDE; + void applySettings() override; void unapplySettings(); public Q_SLOTS: - void setState(QMediaRecorder::State state) Q_DECL_OVERRIDE; - void setMuted(bool muted) Q_DECL_OVERRIDE; - void setVolume(qreal volume) Q_DECL_OVERRIDE; + void setState(QMediaRecorder::State state) override; + void setMuted(bool muted) override; + void setVolume(qreal volume) override; private: diff --git a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h index 4d90377d5..9bdf5a788 100644 --- a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h +++ b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h @@ -59,16 +59,16 @@ public: explicit AVFVideoEncoderSettingsControl(AVFCameraService *service); QList<QSize> supportedResolutions(const QVideoEncoderSettings &requestedVideoSettings, - bool *continuous = 0) const Q_DECL_OVERRIDE; + bool *continuous = 0) const override; QList<qreal> supportedFrameRates(const QVideoEncoderSettings &requestedVideoSettings, - bool *continuous = 0) const Q_DECL_OVERRIDE; + bool *continuous = 0) const override; - QStringList supportedVideoCodecs() const Q_DECL_OVERRIDE; - QString videoCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE; + QStringList supportedVideoCodecs() const override; + QString videoCodecDescription(const QString &codecName) const override; - QVideoEncoderSettings videoSettings() const Q_DECL_OVERRIDE; - void setVideoSettings(const QVideoEncoderSettings &requestedVideoSettings) Q_DECL_OVERRIDE; + QVideoEncoderSettings videoSettings() const override; + void setVideoSettings(const QVideoEncoderSettings &requestedVideoSettings) override; NSDictionary *applySettings(AVCaptureConnection *connection); void unapplySettings(AVCaptureConnection *connection); diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm index 5f7bae1c8..bf7ebb4a0 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm @@ -60,6 +60,7 @@ void AVFMediaPlayerControl::setSession(AVFMediaPlayerSession *session) connect(m_session, SIGNAL(positionChanged(qint64)), this, SIGNAL(positionChanged(qint64))); connect(m_session, SIGNAL(durationChanged(qint64)), this, SIGNAL(durationChanged(qint64))); + connect(m_session, SIGNAL(bufferStatusChanged(int)), this, SIGNAL(bufferStatusChanged(int))); connect(m_session, SIGNAL(stateChanged(QMediaPlayer::State)), this, SIGNAL(stateChanged(QMediaPlayer::State))); connect(m_session, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h index 9a55b7b74..e20f4a1ec 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h @@ -106,12 +106,15 @@ public Q_SLOTS: void processLoadStateChange(); void processLoadStateFailure(); + void processBufferStateChange(int bufferStatus); + void processDurationChange(qint64 duration); Q_SIGNALS: void positionChanged(qint64 position); void durationChanged(qint64 duration); void stateChanged(QMediaPlayer::State newState); + void bufferStatusChanged(int bufferStatus); void mediaStatusChanged(QMediaPlayer::MediaStatus status); void volumeChanged(int volume); void mutedChanged(bool muted); @@ -179,6 +182,7 @@ private: qint64 m_requestedPosition; qint64 m_duration; + int m_bufferStatus; bool m_videoAvailable; bool m_audioAvailable; bool m_seekable; diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm index b6fe01053..06fb71ef8 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm @@ -52,7 +52,8 @@ static NSString* const AVF_TRACKS_KEY = @"tracks"; static NSString* const AVF_PLAYABLE_KEY = @"playable"; //AVPlayerItem keys -static NSString* const AVF_STATUS_KEY = @"status"; +static NSString* const AVF_STATUS_KEY = @"status"; +static NSString* const AVF_BUFFER_LIKELY_KEEP_UP_KEY = @"playbackLikelyToKeepUp"; //AVPlayer keys static NSString* const AVF_RATE_KEY = @"rate"; @@ -61,6 +62,7 @@ static NSString* const AVF_CURRENT_ITEM_DURATION_KEY = @"currentItem.duration static void *AVFMediaPlayerSessionObserverRateObservationContext = &AVFMediaPlayerSessionObserverRateObservationContext; static void *AVFMediaPlayerSessionObserverStatusObservationContext = &AVFMediaPlayerSessionObserverStatusObservationContext; +static void *AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext = &AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext; static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMediaPlayerSessionObserverCurrentItemObservationContext; static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext = &AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext; @@ -72,6 +74,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext AVPlayerItem *m_playerItem; AVPlayerLayer *m_playerLayer; NSURL *m_URL; + BOOL m_bufferIsLikelyToKeepUp; } @property (readonly, getter=player) AVPlayer* m_player; @@ -102,6 +105,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext return nil; self->m_session = session; + self->m_bufferIsLikelyToKeepUp = FALSE; return self; } @@ -141,6 +145,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext { if (m_playerItem) { [m_playerItem removeObserver:self forKeyPath:AVF_STATUS_KEY]; + [m_playerItem removeObserver:self forKeyPath:AVF_BUFFER_LIKELY_KEEP_UP_KEY]; [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification @@ -219,6 +224,11 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:AVFMediaPlayerSessionObserverStatusObservationContext]; + [m_playerItem addObserver:self + forKeyPath:AVF_BUFFER_LIKELY_KEEP_UP_KEY + options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew + context:AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext]; + //When the player item has played to its end time we'll toggle //the movie controller Pause button to be the Play button [[NSNotificationCenter defaultCenter] addObserver:self @@ -338,6 +348,15 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext break; } } + else if (context == AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext) + { + const bool isPlaybackLikelyToKeepUp = [m_playerItem isPlaybackLikelyToKeepUp]; + if (isPlaybackLikelyToKeepUp != m_bufferIsLikelyToKeepUp) { + m_bufferIsLikelyToKeepUp = isPlaybackLikelyToKeepUp; + QMetaObject::invokeMethod(m_session, "processBufferStateChange", Qt::AutoConnection, + Q_ARG(int, isPlaybackLikelyToKeepUp ? 100 : 0)); + } + } //AVPlayer "rate" property value observer. else if (context == AVFMediaPlayerSessionObserverRateObservationContext) { @@ -402,6 +421,7 @@ AVFMediaPlayerSession::AVFMediaPlayerSession(AVFMediaPlayerService *service, QOb , m_rate(1.0) , m_requestedPosition(-1) , m_duration(0) + , m_bufferStatus(0) , m_videoAvailable(false) , m_audioAvailable(false) , m_seekable(false) @@ -536,11 +556,10 @@ qint64 AVFMediaPlayerSession::duration() const int AVFMediaPlayerSession::bufferStatus() const { - //BUG: bufferStatus may be relevant? #ifdef QT_DEBUG_AVF qDebug() << Q_FUNC_INFO; #endif - return 100; + return m_bufferStatus; } int AVFMediaPlayerSession::volume() const @@ -898,6 +917,15 @@ void AVFMediaPlayerSession::processLoadStateFailure() Q_EMIT stateChanged((m_state = QMediaPlayer::StoppedState)); } +void AVFMediaPlayerSession::processBufferStateChange(int bufferStatus) +{ + if (bufferStatus == m_bufferStatus) + return; + + m_bufferStatus = bufferStatus; + Q_EMIT bufferStatusChanged(bufferStatus); +} + void AVFMediaPlayerSession::processDurationChange(qint64 duration) { if (duration == m_duration) diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm index 4952551dc..5727cb0f4 100644 --- a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm +++ b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm @@ -41,6 +41,14 @@ #include <AVFoundation/AVFoundation.h> +#if QT_HAS_INCLUDE(<AppKit/AppKit.h>) +#include <AppKit/AppKit.h> +#endif + +#if QT_HAS_INCLUDE(<UIKit/UIKit.h>) +#include <UIKit/UIKit.h> +#endif + QT_USE_NAMESPACE AVFVideoWindowControl::AVFVideoWindowControl(QObject *parent) diff --git a/src/plugins/coreaudio/coreaudioplugin.h b/src/plugins/coreaudio/coreaudioplugin.h index da18d8cfe..5407bdeb9 100644 --- a/src/plugins/coreaudio/coreaudioplugin.h +++ b/src/plugins/coreaudio/coreaudioplugin.h @@ -54,11 +54,11 @@ public: explicit CoreAudioPlugin(QObject *parent = 0); ~CoreAudioPlugin() {} - QByteArray defaultDevice(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QList<QByteArray> availableDevices(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QAbstractAudioInput *createInput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioOutput *createOutput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) Q_DECL_OVERRIDE; + QByteArray defaultDevice(QAudio::Mode mode) const override; + QList<QByteArray> availableDevices(QAudio::Mode mode) const override; + QAbstractAudioInput *createInput(const QByteArray &device) override; + QAbstractAudioOutput *createOutput(const QByteArray &device) override; + QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) override; }; QT_END_NAMESPACE diff --git a/src/plugins/directshow/camera/camera.pri b/src/plugins/directshow/camera/camera.pri index d8ee59aa9..0e1c1e895 100644 --- a/src/plugins/directshow/camera/camera.pri +++ b/src/plugins/directshow/camera/camera.pri @@ -11,7 +11,11 @@ HEADERS += \ $$PWD/dscamerasession.h \ $$PWD/directshowcameraglobal.h \ $$PWD/dscameraviewfindersettingscontrol.h \ - $$PWD/dscameraimageprocessingcontrol.h + $$PWD/dscameraimageprocessingcontrol.h \ + $$PWD/directshowcameraexposurecontrol.h \ + $$PWD/directshowcameracapturedestinationcontrol.h \ + $$PWD/directshowcameracapturebufferformatcontrol.h \ + $$PWD/directshowcamerazoomcontrol.h SOURCES += \ $$PWD/dscameraservice.cpp \ @@ -21,7 +25,11 @@ SOURCES += \ $$PWD/dsimagecapturecontrol.cpp \ $$PWD/dscamerasession.cpp \ $$PWD/dscameraviewfindersettingscontrol.cpp \ - $$PWD/dscameraimageprocessingcontrol.cpp + $$PWD/dscameraimageprocessingcontrol.cpp \ + $$PWD/directshowcameraexposurecontrol.cpp \ + $$PWD/directshowcameracapturedestinationcontrol.cpp \ + $$PWD/directshowcameracapturebufferformatcontrol.cpp \ + $$PWD/directshowcamerazoomcontrol.cpp *-msvc*:INCLUDEPATH += $$(DXSDK_DIR)/include QMAKE_USE += directshow diff --git a/src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.cpp b/src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.cpp new file mode 100644 index 000000000..cc0a0ad17 --- /dev/null +++ b/src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "directshowcameracapturebufferformatcontrol.h" + +#include "dscamerasession.h" + +QT_BEGIN_NAMESPACE + +DirectShowCameraCaptureBufferFormatControl::DirectShowCameraCaptureBufferFormatControl() +{ +} + +QList<QVideoFrame::PixelFormat> DirectShowCameraCaptureBufferFormatControl::supportedBufferFormats() const +{ + return QList<QVideoFrame::PixelFormat>() << QVideoFrame::Format_RGB32; +} + +QVideoFrame::PixelFormat DirectShowCameraCaptureBufferFormatControl::bufferFormat() const +{ + return QVideoFrame::Format_RGB32; +} + +void DirectShowCameraCaptureBufferFormatControl::setBufferFormat(QVideoFrame::PixelFormat format) +{ + Q_UNUSED(format); +} + +QT_END_NAMESPACE diff --git a/src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.h b/src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.h new file mode 100644 index 000000000..cacd3652b --- /dev/null +++ b/src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DIRECTSHOWCAMERACAPTUREBUFFERFORMATCONTROL_H +#define DIRECTSHOWCAMERACAPTUREBUFFERFORMATCONTROL_H + +#include <QtMultimedia/qcameracapturebufferformatcontrol.h> + +QT_BEGIN_NAMESPACE + +class DirectShowCameraCaptureBufferFormatControl : public QCameraCaptureBufferFormatControl +{ + Q_OBJECT +public: + DirectShowCameraCaptureBufferFormatControl(); + + QList<QVideoFrame::PixelFormat> supportedBufferFormats() const override; + QVideoFrame::PixelFormat bufferFormat() const override; + void setBufferFormat(QVideoFrame::PixelFormat format) override; +}; + +QT_END_NAMESPACE + +#endif // DIRECTSHOWCAMERACAPTUREBUFFERFORMATCONTROL_H diff --git a/src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.cpp b/src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.cpp new file mode 100644 index 000000000..bfb10fc03 --- /dev/null +++ b/src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "directshowcameracapturedestinationcontrol.h" + +#include "dscamerasession.h" + +QT_BEGIN_NAMESPACE + +DirectShowCameraCaptureDestinationControl::DirectShowCameraCaptureDestinationControl(DSCameraSession *session) + : m_session(session) +{ + connect(m_session, &DSCameraSession::captureDestinationChanged, + this, &DirectShowCameraCaptureDestinationControl::captureDestinationChanged); +} + +bool DirectShowCameraCaptureDestinationControl::isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const +{ + return m_session->isCaptureDestinationSupported(destination); +} + +QCameraImageCapture::CaptureDestinations DirectShowCameraCaptureDestinationControl::captureDestination() const +{ + return m_session->captureDestination(); +} + +void DirectShowCameraCaptureDestinationControl::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) +{ + m_session->setCaptureDestination(destination); +} + +QT_END_NAMESPACE diff --git a/src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.h b/src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.h new file mode 100644 index 000000000..224df9dbc --- /dev/null +++ b/src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DIRECTSHOWCAMERACAPTUREDESTINATIONCONTROL_H +#define DIRECTSHOWCAMERACAPTUREDESTINATIONCONTROL_H + +#include <QtMultimedia/qcameracapturedestinationcontrol.h> + +QT_BEGIN_NAMESPACE + +class DSCameraSession; + +class DirectShowCameraCaptureDestinationControl : public QCameraCaptureDestinationControl +{ + Q_OBJECT +public: + DirectShowCameraCaptureDestinationControl(DSCameraSession *session); + + bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const override; + QCameraImageCapture::CaptureDestinations captureDestination() const override; + void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) override; + +private: + DSCameraSession *m_session; + +}; + +QT_END_NAMESPACE + +#endif // DIRECTSHOWCAMERACAPTUREDESTINATIONCONTROL_H diff --git a/src/plugins/directshow/camera/directshowcameraexposurecontrol.cpp b/src/plugins/directshow/camera/directshowcameraexposurecontrol.cpp new file mode 100644 index 000000000..7ece366ea --- /dev/null +++ b/src/plugins/directshow/camera/directshowcameraexposurecontrol.cpp @@ -0,0 +1,411 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "directshowcameraexposurecontrol.h" +#include "dscamerasession.h" +#include "directshowglobal.h" +#include "directshowutils.h" + +#include <functional> +#include <cmath> + +QT_BEGIN_NAMESPACE + +static qreal convertToSec(long v) { return (v < 0) ? (1 / std::pow(2., qreal(v))) : std::pow(2., qreal(v)); } +static Q_DECL_CONSTEXPR qreal convertToFvalue(long v) { return qreal(v) / 10.; } + +DirectShowCameraExposureControl::DirectShowCameraExposureControl(DSCameraSession *session) + : m_session(session) + , m_shutterSpeedValues({ 0, 0, 0, 0, 0 }) + , m_apertureValues({ 0, 0, 0, 0, 0 }) + , m_requestedShutterSpeed(qreal(0.0)) + , m_currentShutterSpeed(qreal(-1.0)) + , m_requestedAperture(qreal(0.0)) + , m_currentAperture(qreal(-1.0)) + , m_requestedExposureMode(QCameraExposure::ExposureAuto) + , m_currentExposureMode(QCameraExposure::ExposureAuto) +{ + Q_ASSERT(m_session); + connect(m_session, &DSCameraSession::statusChanged, + this, &DirectShowCameraExposureControl::onStatusChanged); +} + +bool DirectShowCameraExposureControl::isParameterSupported(QCameraExposureControl::ExposureParameter parameter) const +{ + if (parameter == ShutterSpeed) + return (m_shutterSpeedValues.caps & CameraControl_Flags_Manual); + if (parameter == Aperture) + return (m_apertureValues.caps & CameraControl_Flags_Manual); + if (parameter == ExposureMode) + return true; + + return false; +} + +QVariantList DirectShowCameraExposureControl::supportedParameterRange(QCameraExposureControl::ExposureParameter parameter, + bool *continuous) const +{ + if (continuous) + *continuous = false; + + if (parameter == ShutterSpeed) + return m_supportedShutterSpeeds; + + if (parameter == Aperture) + return m_supportedApertureValues; + + if (parameter == ExposureMode) + return m_supportedExposureModes; + + return QVariantList(); +} + +QVariant DirectShowCameraExposureControl::requestedValue(QCameraExposureControl::ExposureParameter parameter) const +{ + if (parameter == ShutterSpeed) + return QVariant::fromValue(m_requestedShutterSpeed); + + if (parameter == Aperture) + return QVariant::fromValue(m_requestedAperture); + + if (parameter == ExposureMode) + return QVariant::fromValue(m_requestedExposureMode); + + return QVariant(); +} + +QVariant DirectShowCameraExposureControl::actualValue(QCameraExposureControl::ExposureParameter parameter) const +{ + if (parameter == ExposureMode) + return QVariant::fromValue(m_currentExposureMode); + + if (parameter == ShutterSpeed) { + return qFuzzyCompare(m_currentShutterSpeed, qreal(-1.0)) + ? QVariant() + : QVariant::fromValue(m_currentShutterSpeed); + } + + if (parameter == Aperture) { + return qFuzzyCompare(m_currentAperture, qreal(-1.0)) + ? QVariant() + : QVariant::fromValue(m_currentAperture); + } + + return QVariant(); +} + +bool DirectShowCameraExposureControl::setValue(QCameraExposureControl::ExposureParameter parameter, + const QVariant &value) +{ + IAMCameraControl *cameraControl = nullptr; + const DirectShowUtils::ScopedSafeRelease<IAMCameraControl> rControl { &cameraControl }; + if (!m_session->getCameraControlInterface(&cameraControl)) + return false; + + // Reset exposure mode if the value is invalid. + if (!value.isValid()) { + m_requestedExposureMode = QCameraExposure::ExposureAuto; + return setExposureMode(cameraControl, m_requestedExposureMode); + } + + if (parameter == ShutterSpeed || parameter == Aperture) { + bool ok = false; + const qreal newValue = value.toReal(&ok); + if (!ok) + return false; + + // Change the exposure mode first + setExposureMode(cameraControl, QCameraExposure::ExposureManual); + + if (parameter == ShutterSpeed) { + m_requestedShutterSpeed = newValue; + return setShutterSpeed(cameraControl, m_requestedShutterSpeed); + } else { + m_requestedAperture = newValue; + return setAperture(cameraControl, m_requestedAperture); + } + } + + if (parameter == ExposureMode) { + m_requestedExposureMode = value.value<QCameraExposure::ExposureMode>(); + return setExposureMode(cameraControl, m_requestedExposureMode); + } + + return false; +} + +void DirectShowCameraExposureControl::onStatusChanged(QCamera::Status status) +{ + const bool shouldUpdate = (qFuzzyCompare(m_currentAperture, qreal(-1.0)) && qFuzzyCompare(m_currentShutterSpeed, qreal(-1.0))); + + if (status == QCamera::LoadedStatus && shouldUpdate) + updateExposureSettings(); + + if (status == QCamera::UnloadedStatus) { + m_supportedApertureValues.clear(); + m_supportedExposureModes.clear(); + m_supportedShutterSpeeds.clear(); + m_currentAperture = qreal(-1.0); + m_currentShutterSpeed = qreal(-1.0); + m_currentExposureMode = QCameraExposure::ExposureAuto; + } +} + +void DirectShowCameraExposureControl::updateExposureSettings() +{ + IAMCameraControl *cameraControl = nullptr; + const DirectShowUtils::ScopedSafeRelease<IAMCameraControl> rControl { &cameraControl }; + if (!m_session->getCameraControlInterface(&cameraControl)) + return; + + const auto updateValues = [cameraControl](long property, + ExposureValues ¤tValues, + QVariantList ¶meterRange, + const std::function<qreal(long)> &converter, + bool *changed) -> bool { + ExposureValues values { 0, 0, 0, 0, 0 }; + if (FAILED(cameraControl->GetRange(property, + &values.minValue, + &values.maxValue, + &values.stepping, + &values.defaultValue, + &values.caps))) { + return false; + } + + const bool minValueChanged = values.minValue != currentValues.minValue; + const bool maxValueChanged = values.maxValue != currentValues.maxValue; + const bool steppingChanged = values.stepping != currentValues.stepping; + + if (minValueChanged || maxValueChanged || steppingChanged) { + parameterRange.clear(); + long nextValue = values.minValue; + while (nextValue != values.maxValue && values.stepping != 0) { + parameterRange << converter(nextValue); + nextValue += values.stepping; + } + + if (changed) + *changed = true; + } + + currentValues = values; + return true; + }; + + const auto getCurrentValue = [cameraControl](long property, const std::function<qreal(long)> &converter, qreal *value) -> bool { + long currentValue; + long currentFlags; + if (FAILED(cameraControl->Get(property, ¤tValue, ¤tFlags))) + return false; + + *value = converter(currentValue); + return true; + }; + + // Shutter speed + bool changed = false; + if (!updateValues(CameraControl_Exposure, m_shutterSpeedValues, m_supportedShutterSpeeds, convertToSec, &changed)) + qCDebug(qtDirectShowPlugin, "Unable to update the shutter speed values"); + + if (changed) + Q_EMIT parameterRangeChanged(int(ShutterSpeed)); + + if ((m_shutterSpeedValues.caps & CameraControl_Flags_Manual)) { + if (getCurrentValue(CameraControl_Exposure, convertToSec, &m_currentShutterSpeed)) { + if (m_currentExposureMode == QCameraExposure::ExposureManual) + setShutterSpeed(cameraControl, m_requestedShutterSpeed); + } else { + m_currentShutterSpeed = qreal(-1.0); + qCDebug(qtDirectShowPlugin, "Unable to get the current shutter speed!"); + } + } + + // Aperture + changed = false; + if (!updateValues(CameraControl_Iris, m_apertureValues, m_supportedApertureValues, convertToFvalue, &changed)) + qCDebug(qtDirectShowPlugin, "Unable to update the aperture values"); + + if (changed) + Q_EMIT parameterRangeChanged(int(Aperture)); + + if (getCurrentValue(CameraControl_Iris, convertToFvalue, &m_currentAperture)) { + if (m_currentExposureMode == QCameraExposure::ExposureManual) + setAperture(cameraControl, m_requestedAperture); + } else { + m_currentAperture = qreal(-1.0); + qCDebug(qtDirectShowPlugin, "Unable to get the current aperture value!"); + } + + // Update exposure modes + const bool hasAutoExposure = (m_apertureValues.caps & CameraControl_Flags_Auto) + || (m_shutterSpeedValues.caps & CameraControl_Flags_Auto); + const bool hasManualExposure = (m_apertureValues.caps & CameraControl_Flags_Manual) + || (m_shutterSpeedValues.caps & CameraControl_Flags_Manual); + + QVariantList exposureModes; + if (hasAutoExposure && !m_supportedExposureModes.contains(QVariant::fromValue(QCameraExposure::ExposureAuto))) + exposureModes << QVariant::fromValue(QCameraExposure::ExposureAuto); + + if (hasManualExposure && !m_supportedExposureModes.contains(QVariant::fromValue(QCameraExposure::ExposureManual))) + exposureModes << QVariant::fromValue(QCameraExposure::ExposureManual); + + if (!exposureModes.isEmpty() || !m_supportedExposureModes.isEmpty()) { + m_supportedExposureModes = exposureModes; + Q_EMIT parameterRangeChanged(int(ExposureMode)); + } +} + +bool DirectShowCameraExposureControl::setShutterSpeed(IAMCameraControl *cameraControl, qreal shutterSpeed) +{ + if (m_currentExposureMode != QCameraExposure::ExposureManual) { + qCDebug(qtDirectShowPlugin, "Trying to set shutter speed value while in auto exposure mode!"); + return false; + } + + if (qFuzzyCompare(m_currentShutterSpeed, shutterSpeed)) + return true; + + if ((m_shutterSpeedValues.caps & CameraControl_Flags_Manual) == 0) + return false; + + if (!m_supportedShutterSpeeds.contains(QVariant::fromValue(shutterSpeed))) + return false; + + if (qFuzzyIsNull(shutterSpeed) || (shutterSpeed < qreal(0.0))) + return false; + + const long newValue = long(log2(shutterSpeed)); + if (FAILED(cameraControl->Set(CameraControl_Exposure, newValue, CameraControl_Flags_Manual))) { + qCDebug(qtDirectShowPlugin, "Unable to set shutter speed value to: %d", int(shutterSpeed)); + return false; + } + + m_currentShutterSpeed = shutterSpeed; + Q_EMIT actualValueChanged(int(ShutterSpeed)); + return true; +} + +bool DirectShowCameraExposureControl::setAperture(IAMCameraControl *cameraControl, qreal aperture) +{ + if (m_currentExposureMode != QCameraExposure::ExposureManual) { + qCDebug(qtDirectShowPlugin, "Trying to set aperture value while in auto exposure mode!"); + return false; + } + + if (qFuzzyCompare(m_currentAperture, aperture)) + return true; + + if ((m_apertureValues.caps & CameraControl_Flags_Manual) == 0) + return false; + + if (!m_supportedApertureValues.contains(QVariant::fromValue(aperture))) + return false; + + if (aperture < qreal(0.0)) + return false; + + const long newValue = long(10 * aperture); + if (FAILED(cameraControl->Set(CameraControl_Iris, newValue, CameraControl_Flags_Manual))) { + qCDebug(qtDirectShowPlugin, "Unable to set aperture value to: %d", int(aperture)); + return false; + } + + m_currentAperture = aperture; + Q_EMIT actualValueChanged(int(Aperture)); + + return true; +} + +bool DirectShowCameraExposureControl::setExposureMode(IAMCameraControl *cameraControl, QCameraExposure::ExposureMode mode) +{ + if (m_currentExposureMode == mode) + return true; + + bool exposureModeChanged = true; + + // Set auto exposure mode + if (mode == QCameraExposure::ExposureAuto) { + if ((m_apertureValues.caps & CameraControl_Flags_Auto) + && FAILED(cameraControl->Set(CameraControl_Iris, 0, CameraControl_Flags_Auto))) { + qCDebug(qtDirectShowPlugin, "Setting auto exposure mode failed!"); + exposureModeChanged = false; + } + + if ((m_shutterSpeedValues.caps & CameraControl_Flags_Auto) + && FAILED(cameraControl->Set(CameraControl_Exposure, 0, CameraControl_Flags_Auto))) { + qCDebug(qtDirectShowPlugin, "Setting auto exposure mode failed"); + exposureModeChanged = false; + } + + if (exposureModeChanged) { + m_currentExposureMode = mode; + Q_EMIT actualValueChanged(int(ExposureMode)); + } + + return exposureModeChanged; + } + + // Change the current exposure mode to manual first. + m_currentExposureMode = QCameraExposure::ExposureManual; + + const qreal newShutterSpeed = qFuzzyCompare(m_requestedShutterSpeed, -1.0) + ? convertToSec(m_shutterSpeedValues.defaultValue) + : m_requestedShutterSpeed; + if ((m_shutterSpeedValues.caps & CameraControl_Flags_Manual)) + setShutterSpeed(cameraControl, newShutterSpeed); + + const qreal newAperture = qFuzzyCompare(m_requestedAperture, -1.0) + ? convertToFvalue(m_apertureValues.defaultValue) + : m_requestedAperture; + if ((m_apertureValues.caps & CameraControl_Flags_Manual)) + setAperture(cameraControl, newAperture); + + + // Check if any of the values changed. + exposureModeChanged = (qFuzzyCompare(m_currentShutterSpeed, newShutterSpeed) + || qFuzzyCompare(m_currentAperture, newAperture)); + + if (exposureModeChanged) + Q_EMIT actualValueChanged(int(ExposureMode)); + + return exposureModeChanged; +} + +QT_END_NAMESPACE diff --git a/src/plugins/directshow/camera/directshowcameraexposurecontrol.h b/src/plugins/directshow/camera/directshowcameraexposurecontrol.h new file mode 100644 index 000000000..db3fc5984 --- /dev/null +++ b/src/plugins/directshow/camera/directshowcameraexposurecontrol.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DIRECTSHOWCAMERAEXPOSURECONTROL_H +#define DIRECTSHOWCAMERAEXPOSURECONTROL_H + +#include <QtMultimedia/qcameraexposurecontrol.h> + +struct IAMCameraControl; + +QT_BEGIN_NAMESPACE + +class DSCameraSession; + +class DirectShowCameraExposureControl : public QCameraExposureControl +{ + Q_OBJECT +public: + DirectShowCameraExposureControl(DSCameraSession *session); + + bool isParameterSupported(ExposureParameter parameter) const override; + QVariantList supportedParameterRange(ExposureParameter parameter, bool *continuous) const override; + QVariant requestedValue(ExposureParameter parameter) const override; + QVariant actualValue(ExposureParameter parameter) const override; + bool setValue(ExposureParameter parameter, const QVariant &value) override; + +private Q_SLOTS: + void onStatusChanged(QCamera::Status status); + +private: + DSCameraSession *m_session; + + struct ExposureValues + { + long caps; + long minValue; + long maxValue; + long stepping; + long defaultValue; + } m_shutterSpeedValues, m_apertureValues; + + qreal m_requestedShutterSpeed; + qreal m_currentShutterSpeed; + + qreal m_requestedAperture; + qreal m_currentAperture; + + QVariantList m_supportedShutterSpeeds; + QVariantList m_supportedApertureValues; + QVariantList m_supportedExposureModes; + + QCameraExposure::ExposureMode m_requestedExposureMode; + QCameraExposure::ExposureMode m_currentExposureMode; + + void updateExposureSettings(); + + bool setShutterSpeed(IAMCameraControl *cameraControl, qreal shutterSpeed); + bool setAperture(IAMCameraControl *cameraControl, qreal aperture); + bool setExposureMode(IAMCameraControl *cameraControl, QCameraExposure::ExposureMode mode); +}; + +QT_END_NAMESPACE + +#endif // DIRECTSHOWCAMERAEXPOSURECONTROL_H diff --git a/src/plugins/directshow/camera/directshowcamerazoomcontrol.cpp b/src/plugins/directshow/camera/directshowcamerazoomcontrol.cpp new file mode 100644 index 000000000..209cb5d96 --- /dev/null +++ b/src/plugins/directshow/camera/directshowcamerazoomcontrol.cpp @@ -0,0 +1,209 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "directshowcamerazoomcontrol.h" +#include "dscamerasession.h" +#include "directshowutils.h" + +QT_BEGIN_NAMESPACE + +inline static qreal defaultZoomValue() { return qreal(1.0); } + +DirectShowCameraZoomControl::DirectShowCameraZoomControl(DSCameraSession *session) + : m_session(session) + , m_opticalZoom({0, 0, 0, 0, 0}) + , m_currentOpticalZoom(qreal(0.0)) + , m_requestedOpticalZoom(qreal(0.0)) + , m_maxOpticalZoom(qreal(1.0)) +{ + Q_ASSERT(m_session); + connect(m_session, &DSCameraSession::statusChanged, + this, &DirectShowCameraZoomControl::onStatusChanged); +} + +qreal DirectShowCameraZoomControl::maximumOpticalZoom() const +{ + return m_maxOpticalZoom; +} + +qreal DirectShowCameraZoomControl::maximumDigitalZoom() const +{ + return defaultZoomValue(); +} + +qreal DirectShowCameraZoomControl::requestedOpticalZoom() const +{ + return qMax(defaultZoomValue(), m_requestedOpticalZoom); +} + +qreal DirectShowCameraZoomControl::requestedDigitalZoom() const +{ + return defaultZoomValue(); +} + +qreal DirectShowCameraZoomControl::currentOpticalZoom() const +{ + return qMax(defaultZoomValue(), m_currentOpticalZoom); +} + +qreal DirectShowCameraZoomControl::currentDigitalZoom() const +{ + return defaultZoomValue(); +} + +void DirectShowCameraZoomControl::zoomTo(qreal optical, qreal digital) +{ + Q_UNUSED(digital); + if (!(m_opticalZoom.caps & CameraControl_Flags_Manual)) + return; + + if (qFuzzyCompare(optical, m_requestedOpticalZoom)) + return; + + m_requestedOpticalZoom = optical; + Q_EMIT requestedOpticalZoomChanged(m_requestedOpticalZoom); + + if (qFuzzyCompare(m_requestedOpticalZoom, m_currentOpticalZoom)) + return; + + if (m_session->status() != QCamera::LoadedStatus && m_session->status() != QCamera::ActiveStatus) + return; // We'll wait until the camera is loaded, see: statusChanged connection + + opticalZoomToPrivate(optical); +} + +void DirectShowCameraZoomControl::onStatusChanged(QCamera::Status status) +{ + if (status == QCamera::LoadedStatus) { + updateZoomValues(); + } else if (status == QCamera::UnloadedStatus) { + SecureZeroMemory(&m_opticalZoom, sizeof(ZoomValues)); + m_currentOpticalZoom = qreal(0.0); + m_requestedOpticalZoom = qreal(0.0); + } + +} + +void DirectShowCameraZoomControl::updateZoomValues() +{ + IAMCameraControl *cameraControl = nullptr; + const DirectShowUtils::ScopedSafeRelease<IAMCameraControl> rControl { &cameraControl }; + if (!m_session->getCameraControlInterface(&cameraControl)) + return; + + ZoomValues values { 0, 0, 0, 0, 0 }; + // Zoom levels in DS are in the range [10, 600] + // The default zoom is device specific. + HRESULT hr = cameraControl->GetRange(CameraControl_Zoom, + &values.minZoom, + &values.maxZoom, + &values.stepping, + &values.defaultZoom, + &values.caps); + + if (FAILED(hr)) { + qCDebug(qtDirectShowPlugin, "Getting the camera's zoom properties failed"); + SecureZeroMemory(&m_opticalZoom, sizeof(ZoomValues)); + return; + } + + if (!(values.caps & CameraControl_Flags_Manual)) { + qCDebug(qtDirectShowPlugin, "Camera does not support manual zoom"); + SecureZeroMemory(&m_opticalZoom, sizeof(ZoomValues)); + return; + } + + if (values.maxZoom != m_opticalZoom.maxZoom) { + const qreal newMaxZoomScale = (values.minZoom == 0) ? defaultZoomValue() + : (qreal(values.maxZoom) / qreal(values.minZoom)); + if (!qFuzzyCompare(newMaxZoomScale, m_maxOpticalZoom)) { + m_maxOpticalZoom = newMaxZoomScale; + Q_EMIT maximumOpticalZoomChanged(m_maxOpticalZoom); + } + } + + m_opticalZoom = values; + + long currentZoom = 0; + long flags = 0; + if (FAILED(cameraControl->Get(CameraControl_Zoom, ¤tZoom, &flags))) { + qCDebug(qtDirectShowPlugin, "Getting the camera's current zoom value failed!"); + return; + } + + qreal currentOpticalZoom = (m_opticalZoom.minZoom == 0) ? defaultZoomValue() + : (qreal(currentZoom) / qreal(m_opticalZoom.minZoom)); + currentOpticalZoom = qMax(defaultZoomValue(), currentOpticalZoom); + if (!qFuzzyCompare(m_currentOpticalZoom, currentOpticalZoom)) { + m_currentOpticalZoom = currentOpticalZoom; + Q_EMIT currentOpticalZoomChanged(m_currentOpticalZoom); + } + + // Check if there is a pending zoom value. + if (!qFuzzyCompare(m_currentOpticalZoom, m_requestedOpticalZoom)) + opticalZoomToPrivate(m_requestedOpticalZoom); +} + +bool DirectShowCameraZoomControl::opticalZoomToPrivate(qreal scaleFactor) +{ + IAMCameraControl *cameraControl = nullptr; + const DirectShowUtils::ScopedSafeRelease<IAMCameraControl> rControl { &cameraControl }; + if (!m_session->getCameraControlInterface(&cameraControl)) + return false; + + // Convert to DS zoom value + const int newDSOpticalZoom = qRound(m_opticalZoom.minZoom * scaleFactor); + long newDSOpticalZoomAdjusted = newDSOpticalZoom - (newDSOpticalZoom % m_opticalZoom.stepping); + newDSOpticalZoomAdjusted = qBound(m_opticalZoom.minZoom, newDSOpticalZoomAdjusted, m_opticalZoom.maxZoom); + + if (FAILED(cameraControl->Set(CameraControl_Zoom, newDSOpticalZoomAdjusted, CameraControl_Flags_Manual))) { + qCDebug(qtDirectShowPlugin, "Setting the camera's zoom value failed"); + return false; + } + + const qreal newScaleFactor = (m_opticalZoom.minZoom == 0) ? defaultZoomValue() + : (qreal(newDSOpticalZoomAdjusted) / qreal(m_opticalZoom.minZoom)); + // convert back to Qt scale value + m_currentOpticalZoom = qMax(defaultZoomValue(), newScaleFactor); + Q_EMIT currentOpticalZoomChanged(m_currentOpticalZoom); + + return true; +} + +QT_END_NAMESPACE diff --git a/src/plugins/directshow/camera/directshowcamerazoomcontrol.h b/src/plugins/directshow/camera/directshowcamerazoomcontrol.h new file mode 100644 index 000000000..f6fb05b0e --- /dev/null +++ b/src/plugins/directshow/camera/directshowcamerazoomcontrol.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DIRECTSHOWCAMERAZOOMCONTROL_H +#define DIRECTSHOWCAMERAZOOMCONTROL_H + +#include <QtMultimedia/qcamerazoomcontrol.h> +#include <QtMultimedia/qcamera.h> + +QT_BEGIN_NAMESPACE + +class DSCameraSession; + +class DirectShowCameraZoomControl : public QCameraZoomControl +{ + Q_OBJECT +public: + DirectShowCameraZoomControl(DSCameraSession *session); + + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; + void zoomTo(qreal optical, qreal digital) override; + +private Q_SLOTS: + void onStatusChanged(QCamera::Status status); + +private: + DSCameraSession *m_session; + struct ZoomValues + { + long maxZoom; + long minZoom; + long stepping; + long defaultZoom; + long caps; + } m_opticalZoom; + + qreal m_currentOpticalZoom; + qreal m_requestedOpticalZoom; + qreal m_maxOpticalZoom; + + void updateZoomValues(); + bool opticalZoomToPrivate(qreal value); +}; + +QT_END_NAMESPACE + +#endif // DIRECTSHOWCAMERAZOOMCONTROL_H diff --git a/src/plugins/directshow/camera/dscameraservice.cpp b/src/plugins/directshow/camera/dscameraservice.cpp index 836f1aaa5..a806cabe3 100644 --- a/src/plugins/directshow/camera/dscameraservice.cpp +++ b/src/plugins/directshow/camera/dscameraservice.cpp @@ -48,19 +48,29 @@ #include "dsimagecapturecontrol.h" #include "dscameraviewfindersettingscontrol.h" #include "dscameraimageprocessingcontrol.h" +#include "directshowcameraexposurecontrol.h" +#include "directshowcameracapturedestinationcontrol.h" +#include "directshowcameracapturebufferformatcontrol.h" +#include "directshowvideoprobecontrol.h" +#include "directshowcamerazoomcontrol.h" QT_BEGIN_NAMESPACE DSCameraService::DSCameraService(QObject *parent): QMediaService(parent) + , m_session(new DSCameraSession(this)) + , m_control(new DSCameraControl(m_session)) + , m_videoDevice(new DSVideoDeviceControl(m_session)) , m_videoRenderer(0) + , m_imageCapture(new DSImageCaptureControl(m_session)) + , m_viewfinderSettings(new DSCameraViewfinderSettingsControl(m_session)) + , m_imageProcessingControl(new DSCameraImageProcessingControl(m_session)) + , m_exposureControl(new DirectShowCameraExposureControl(m_session)) + , m_captureDestinationControl(new DirectShowCameraCaptureDestinationControl(m_session)) + , m_captureBufferFormatControl(new DirectShowCameraCaptureBufferFormatControl) + , m_videoProbeControl(nullptr) + , m_zoomControl(new DirectShowCameraZoomControl(m_session)) { - m_session = new DSCameraSession(this); - m_control = new DSCameraControl(m_session); - m_videoDevice = new DSVideoDeviceControl(m_session); - m_imageCapture = new DSImageCaptureControl(m_session); - m_viewfinderSettings = new DSCameraViewfinderSettingsControl(m_session); - m_imageProcessingControl = new DSCameraImageProcessingControl(m_session); } DSCameraService::~DSCameraService() @@ -72,6 +82,11 @@ DSCameraService::~DSCameraService() delete m_videoRenderer; delete m_imageCapture; delete m_session; + delete m_exposureControl; + delete m_captureDestinationControl; + delete m_captureBufferFormatControl; + delete m_videoProbeControl; + delete m_zoomControl; } QMediaControl* DSCameraService::requestControl(const char *name) @@ -98,6 +113,27 @@ QMediaControl* DSCameraService::requestControl(const char *name) if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0) return m_imageProcessingControl; + if (qstrcmp(name, QCameraExposureControl_iid) == 0) + return m_exposureControl; + + if (qstrcmp(name, QCameraCaptureDestinationControl_iid) == 0) + return m_captureDestinationControl; + + if (qstrcmp(name, QCameraCaptureBufferFormatControl_iid) == 0) + return m_captureBufferFormatControl; + + if (qstrcmp(name, QMediaVideoProbeControl_iid) == 0) { + if (!m_videoProbeControl) + m_videoProbeControl = new DirectShowVideoProbeControl; + + m_videoProbeControl->ref(); + m_session->addVideoProbe(m_videoProbeControl); + return m_videoProbeControl; + } + + if (qstrcmp(name, QCameraZoomControl_iid) == 0) + return m_zoomControl; + return 0; } @@ -108,6 +144,14 @@ void DSCameraService::releaseControl(QMediaControl *control) m_videoRenderer = 0; return; } + + if (control == m_videoProbeControl) { + m_session->removeVideoProbe(m_videoProbeControl); + if (!m_videoProbeControl->deref()) { + delete m_videoProbeControl; + m_videoProbeControl = nullptr; + } + } } QT_END_NAMESPACE diff --git a/src/plugins/directshow/camera/dscameraservice.h b/src/plugins/directshow/camera/dscameraservice.h index 8976e41cf..f444eeb51 100644 --- a/src/plugins/directshow/camera/dscameraservice.h +++ b/src/plugins/directshow/camera/dscameraservice.h @@ -52,6 +52,11 @@ class DSVideoDeviceControl; class DSImageCaptureControl; class DSCameraViewfinderSettingsControl; class DSCameraImageProcessingControl; +class DirectShowCameraExposureControl; +class DirectShowCameraCaptureDestinationControl; +class DirectShowCameraCaptureBufferFormatControl; +class DirectShowVideoProbeControl; +class DirectShowCameraZoomControl; class DSCameraService : public QMediaService { @@ -65,13 +70,18 @@ public: virtual void releaseControl(QMediaControl *control); private: - DSCameraControl *m_control; DSCameraSession *m_session; + DSCameraControl *m_control; DSVideoDeviceControl *m_videoDevice; QMediaControl *m_videoRenderer; DSImageCaptureControl *m_imageCapture; DSCameraViewfinderSettingsControl *m_viewfinderSettings; DSCameraImageProcessingControl *m_imageProcessingControl; + DirectShowCameraExposureControl *m_exposureControl; + DirectShowCameraCaptureDestinationControl *m_captureDestinationControl; + DirectShowCameraCaptureBufferFormatControl *m_captureBufferFormatControl; + DirectShowVideoProbeControl *m_videoProbeControl; + DirectShowCameraZoomControl *m_zoomControl; }; QT_END_NAMESPACE diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index dc0dfc8b3..9b642872a 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -51,24 +51,27 @@ #include "directshowcameraglobal.h" #include "directshowmediatype.h" #include "directshowutils.h" +#include "directshowvideoprobecontrol.h" QT_BEGIN_NAMESPACE DSCameraSession::DSCameraSession(QObject *parent) : QObject(parent) - , m_graphBuilder(Q_NULLPTR) - , m_filterGraph(Q_NULLPTR) + , m_graphBuilder(nullptr) + , m_filterGraph(nullptr) , m_sourceDeviceName(QLatin1String("default")) - , m_sourceFilter(Q_NULLPTR) + , m_sourceFilter(nullptr) , m_needsHorizontalMirroring(false) - , m_previewSampleGrabber(Q_NULLPTR) - , m_nullRendererFilter(Q_NULLPTR) + , m_previewSampleGrabber(nullptr) + , m_nullRendererFilter(nullptr) , m_previewStarted(false) - , m_surface(Q_NULLPTR) + , m_surface(nullptr) , m_previewPixelFormat(QVideoFrame::Format_Invalid) , m_readyForCapture(false) , m_imageIdCounter(0) , m_currentImageId(-1) + , m_captureDestinations(QCameraImageCapture::CaptureToFile) + , m_videoProbeControl(nullptr) , m_status(QCamera::UnloadedStatus) { connect(this, SIGNAL(statusChanged(QCamera::Status)), @@ -354,6 +357,39 @@ bool DSCameraSession::getCameraControlInterface(IAMCameraControl **cameraControl return true; } +bool DSCameraSession::isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const +{ + return destination & (QCameraImageCapture::CaptureToFile | QCameraImageCapture::CaptureToBuffer); +} + +QCameraImageCapture::CaptureDestinations DSCameraSession::captureDestination() const +{ + return m_captureDestinations; +} + +void DSCameraSession::setCaptureDestination(QCameraImageCapture::CaptureDestinations destinations) +{ + if (m_captureDestinations == destinations) + return; + + m_captureDestinations = destinations; + Q_EMIT captureDestinationChanged(m_captureDestinations); +} + +void DSCameraSession::addVideoProbe(DirectShowVideoProbeControl *probe) +{ + const QMutexLocker locker(&m_probeMutex); + m_videoProbeControl = probe; +} + +void DSCameraSession::removeVideoProbe(DirectShowVideoProbeControl *probe) +{ + Q_UNUSED(probe); + Q_ASSERT(m_videoProbeControl == probe); + const QMutexLocker locker(&m_probeMutex); + m_videoProbeControl = nullptr; +} + bool DSCameraSession::load() { unload(); @@ -547,6 +583,12 @@ void DSCameraSession::onFrameAvailable(double time, const QByteArray &data) m_presentMutex.unlock(); + { + const QMutexLocker locker(&m_probeMutex); + if (m_currentFrame.isValid() && m_videoProbeControl) + Q_EMIT m_videoProbeControl->videoFrameProbed(m_currentFrame); + } + // Image capture QMutexLocker locker(&m_captureMutex); if (m_currentImageId != -1 && !m_capturedFrame.isValid()) { @@ -586,8 +628,8 @@ void DSCameraSession::presentFrame() m_capturedFrame.unmap(); - QtConcurrent::run(this, &DSCameraSession::saveCapturedImage, - m_currentImageId, captureImage, m_imageCaptureFileName); + QtConcurrent::run(this, &DSCameraSession::processCapturedImage, + m_currentImageId, m_captureDestinations, captureImage, m_imageCaptureFileName); m_imageCaptureFileName.clear(); m_currentImageId = -1; @@ -603,14 +645,22 @@ void DSCameraSession::presentFrame() updateReadyForCapture(); } -void DSCameraSession::saveCapturedImage(int id, const QImage &image, const QString &path) +void DSCameraSession::processCapturedImage(int id, + QCameraImageCapture::CaptureDestinations captureDestinations, + const QImage &image, + const QString &path) { - if (image.save(path, "JPG")) { - emit imageSaved(id, path); - } else { - emit captureError(id, QCameraImageCapture::ResourceError, - tr("Could not save image to file.")); + if (captureDestinations & QCameraImageCapture::CaptureToFile) { + if (image.save(path, "JPG")) { + Q_EMIT imageSaved(id, path); + } else { + Q_EMIT captureError(id, QCameraImageCapture::ResourceError, + tr("Could not save image to file.")); + } } + + if (captureDestinations & QCameraImageCapture::CaptureToBuffer) + Q_EMIT imageAvailable(id, QVideoFrame(image)); } bool DSCameraSession::createFilterGraph() diff --git a/src/plugins/directshow/camera/dscamerasession.h b/src/plugins/directshow/camera/dscamerasession.h index 90407f49e..e28015534 100644 --- a/src/plugins/directshow/camera/dscamerasession.h +++ b/src/plugins/directshow/camera/dscamerasession.h @@ -50,6 +50,7 @@ #include <QtMultimedia/qabstractvideosurface.h> #include <QtMultimedia/qvideosurfaceformat.h> #include <QtMultimedia/qcameraimageprocessingcontrol.h> +#include <QtMultimedia/qcameraimagecapture.h> #include <private/qmediastoragelocation_p.h> #include <tchar.h> @@ -76,6 +77,7 @@ struct ICaptureGraphBuilder2; QT_BEGIN_NAMESPACE class DirectShowSampleGrabber; +class DirectShowVideoProbeControl; class DSCameraSession : public QObject { @@ -120,13 +122,22 @@ public: bool getCameraControlInterface(IAMCameraControl **cameraControl) const; + bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const; + QCameraImageCapture::CaptureDestinations captureDestination() const; + void setCaptureDestination(QCameraImageCapture::CaptureDestinations destinations); + + void addVideoProbe(DirectShowVideoProbeControl *probe); + void removeVideoProbe(DirectShowVideoProbeControl *probe); + Q_SIGNALS: void statusChanged(QCamera::Status); void imageExposed(int id); void imageCaptured(int id, const QImage &preview); void imageSaved(int id, const QString &fileName); + void imageAvailable(int id, const QVideoFrame &buffer); void readyForCaptureChanged(bool); void captureError(int id, int error, const QString &errorString); + void captureDestinationChanged(QCameraImageCapture::CaptureDestinations); private Q_SLOTS: void presentFrame(); @@ -157,7 +168,7 @@ private: void setStatus(QCamera::Status status); void onFrameAvailable(double time, const QByteArray &data); - void saveCapturedImage(int id, const QImage &image, const QString &path); + void processCapturedImage(int id, QCameraImageCapture::CaptureDestinations captureDestinations, const QImage &image, const QString &path); bool createFilterGraph(); bool connectGraph(); @@ -208,6 +219,11 @@ private: int m_imageIdCounter; int m_currentImageId; QVideoFrame m_capturedFrame; + QCameraImageCapture::CaptureDestinations m_captureDestinations; + + // Video probe + QMutex m_probeMutex; + DirectShowVideoProbeControl *m_videoProbeControl; // Internal state QCamera::Status m_status; diff --git a/src/plugins/directshow/camera/dsimagecapturecontrol.cpp b/src/plugins/directshow/camera/dsimagecapturecontrol.cpp index 9d4a7ea1d..c92ce98e1 100644 --- a/src/plugins/directshow/camera/dsimagecapturecontrol.cpp +++ b/src/plugins/directshow/camera/dsimagecapturecontrol.cpp @@ -57,6 +57,8 @@ DSImageCaptureControl::DSImageCaptureControl(DSCameraSession *session) this, SIGNAL(readyForCaptureChanged(bool))); connect(m_session, SIGNAL(captureError(int,int,QString)), this, SIGNAL(error(int,int,QString))); + connect(m_session, &DSCameraSession::imageAvailable, + this, &DSImageCaptureControl::imageAvailable); } DSImageCaptureControl::~DSImageCaptureControl() diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp index 40f77e899..ee7f5ec9e 100644 --- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp +++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp @@ -63,7 +63,7 @@ DirectShowVideoRendererControl::~DirectShowVideoRendererControl() { #if QT_CONFIG(evr) if (m_evrPresenter) { - m_evrPresenter->setSurface(Q_NULLPTR); + m_evrPresenter->setSurface(nullptr); m_evrPresenter->Release(); } #endif @@ -83,7 +83,7 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface) #if QT_CONFIG(evr) if (m_evrPresenter) { - m_evrPresenter->setSurface(Q_NULLPTR); + m_evrPresenter->setSurface(nullptr); m_evrPresenter->Release(); m_evrPresenter = 0; } diff --git a/src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp b/src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp index f819c9f24..9d281e10c 100644 --- a/src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp @@ -58,7 +58,7 @@ CameraBinImageProcessing::CameraBinImageProcessing(CameraBinSession *session) , m_session(session) , m_whiteBalanceMode(QCameraImageProcessing::WhiteBalanceAuto) #if QT_CONFIG(linux_v4l) - , m_v4lImageControl(Q_NULLPTR) + , m_v4lImageControl(nullptr) #endif { #if QT_CONFIG(gstreamer_photography) diff --git a/src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp b/src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp index 2d3c7c2ea..4f45a0a2f 100644 --- a/src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp @@ -74,7 +74,7 @@ QMediaService* CameraBinServicePlugin::create(const QString &key) "GStreamer %u.%u." "\nPlease install the 'bad' GStreamer plugin package.", major, minor); - return Q_NULLPTR; + return nullptr; } return new CameraBinService(sourceFactory()); diff --git a/src/plugins/opensles/qopenslesaudiooutput.cpp b/src/plugins/opensles/qopenslesaudiooutput.cpp index 70d77a380..0b1f444bd 100644 --- a/src/plugins/opensles/qopenslesaudiooutput.cpp +++ b/src/plugins/opensles/qopenslesaudiooutput.cpp @@ -69,13 +69,13 @@ QOpenSLESAudioOutput::QOpenSLESAudioOutput(const QByteArray &device) : m_deviceName(device), m_state(QAudio::StoppedState), m_error(QAudio::NoError), - m_outputMixObject(Q_NULLPTR), - m_playerObject(Q_NULLPTR), - m_playItf(Q_NULLPTR), - m_volumeItf(Q_NULLPTR), - m_bufferQueueItf(Q_NULLPTR), - m_audioSource(Q_NULLPTR), - m_buffers(Q_NULLPTR), + m_outputMixObject(nullptr), + m_playerObject(nullptr), + m_playItf(nullptr), + m_volumeItf(nullptr), + m_bufferQueueItf(nullptr), + m_audioSource(nullptr), + m_buffers(nullptr), m_volume(1.0), m_pullMode(false), m_nextBuffer(0), @@ -157,7 +157,7 @@ QIODevice *QOpenSLESAudioOutput::start() stop(); if (!preparePlayer()) - return Q_NULLPTR; + return nullptr; m_pullMode = false; m_processedBytes = 0; @@ -458,8 +458,8 @@ bool QOpenSLESAudioOutput::preparePlayer() if (SL_RESULT_SUCCESS != (*engine)->CreateOutputMix(engine, &m_outputMixObject, 0, - Q_NULLPTR, - Q_NULLPTR)) { + nullptr, + nullptr)) { qWarning() << "Unable to create output mix"; setError(QAudio::FatalError); return false; @@ -472,7 +472,7 @@ bool QOpenSLESAudioOutput::preparePlayer() } SLDataLocator_OutputMix outputMixLocator = { SL_DATALOCATOR_OUTPUTMIX, m_outputMixObject }; - SLDataSink audioSink = { &outputMixLocator, Q_NULLPTR }; + SLDataSink audioSink = { &outputMixLocator, nullptr }; #ifndef ANDROID const int iids = 2; @@ -598,28 +598,28 @@ void QOpenSLESAudioOutput::destroyPlayer() if (m_playerObject) { (*m_playerObject)->Destroy(m_playerObject); - m_playerObject = Q_NULLPTR; + m_playerObject = nullptr; } if (m_outputMixObject) { (*m_outputMixObject)->Destroy(m_outputMixObject); - m_outputMixObject = Q_NULLPTR; + m_outputMixObject = nullptr; } if (!m_pullMode && m_audioSource) { m_audioSource->close(); delete m_audioSource; - m_audioSource = Q_NULLPTR; + m_audioSource = nullptr; } delete [] m_buffers; - m_buffers = Q_NULLPTR; + m_buffers = nullptr; m_processedBytes = 0; m_nextBuffer = 0; m_availableBuffers.storeRelease(BUFFER_COUNT); - m_playItf = Q_NULLPTR; - m_volumeItf = Q_NULLPTR; - m_bufferQueueItf = Q_NULLPTR; + m_playItf = nullptr; + m_volumeItf = nullptr; + m_bufferQueueItf = nullptr; m_startRequiresInit = true; } @@ -630,7 +630,7 @@ void QOpenSLESAudioOutput::stopPlayer() if (m_audioSource && !m_pullMode) { m_audioSource->close(); delete m_audioSource; - m_audioSource = Q_NULLPTR; + m_audioSource = nullptr; } // We need to change the state manually... diff --git a/src/plugins/opensles/qopenslesaudiooutput.h b/src/plugins/opensles/qopenslesaudiooutput.h index 4c724dca6..b480f00e6 100644 --- a/src/plugins/opensles/qopenslesaudiooutput.h +++ b/src/plugins/opensles/qopenslesaudiooutput.h @@ -57,30 +57,30 @@ public: QOpenSLESAudioOutput(const QByteArray &device); ~QOpenSLESAudioOutput(); - void start(QIODevice *device) Q_DECL_OVERRIDE; - QIODevice *start() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; - void reset() Q_DECL_OVERRIDE; - void suspend() Q_DECL_OVERRIDE; - void resume() Q_DECL_OVERRIDE; - int bytesFree() const Q_DECL_OVERRIDE; - int periodSize() const Q_DECL_OVERRIDE; - void setBufferSize(int value) Q_DECL_OVERRIDE; - int bufferSize() const Q_DECL_OVERRIDE; - void setNotifyInterval(int milliSeconds) Q_DECL_OVERRIDE; - int notifyInterval() const Q_DECL_OVERRIDE; - qint64 processedUSecs() const Q_DECL_OVERRIDE; - qint64 elapsedUSecs() const Q_DECL_OVERRIDE; - QAudio::Error error() const Q_DECL_OVERRIDE; - QAudio::State state() const Q_DECL_OVERRIDE; - void setFormat(const QAudioFormat &format) Q_DECL_OVERRIDE; - QAudioFormat format() const Q_DECL_OVERRIDE; - - void setVolume(qreal volume) Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; - - void setCategory(const QString &category) Q_DECL_OVERRIDE; - QString category() const Q_DECL_OVERRIDE; + void start(QIODevice *device) override; + QIODevice *start() override; + void stop() override; + void reset() override; + void suspend() override; + void resume() override; + int bytesFree() const override; + int periodSize() const override; + void setBufferSize(int value) override; + int bufferSize() const override; + void setNotifyInterval(int milliSeconds) override; + int notifyInterval() const override; + qint64 processedUSecs() const override; + qint64 elapsedUSecs() const override; + QAudio::Error error() const override; + QAudio::State state() const override; + void setFormat(const QAudioFormat &format) override; + QAudioFormat format() const override; + + void setVolume(qreal volume) override; + qreal volume() const override; + + void setCategory(const QString &category) override; + QString category() const override; private: friend class SLIODevicePrivate; @@ -138,11 +138,11 @@ class SLIODevicePrivate : public QIODevice public: inline SLIODevicePrivate(QOpenSLESAudioOutput *audio) : m_audioDevice(audio) {} - inline ~SLIODevicePrivate() Q_DECL_OVERRIDE {} + inline ~SLIODevicePrivate() override {} protected: - inline qint64 readData(char *, qint64) Q_DECL_OVERRIDE { return 0; } - inline qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE; + inline qint64 readData(char *, qint64) override { return 0; } + inline qint64 writeData(const char *data, qint64 len) override; private: QOpenSLESAudioOutput *m_audioDevice; diff --git a/src/plugins/pulseaudio/qaudioinput_pulse.cpp b/src/plugins/pulseaudio/qaudioinput_pulse.cpp index 050731071..2b5325132 100644 --- a/src/plugins/pulseaudio/qaudioinput_pulse.cpp +++ b/src/plugins/pulseaudio/qaudioinput_pulse.cpp @@ -226,7 +226,7 @@ QIODevice *QPulseAudioInput::start() close(); if (!open()) - return Q_NULLPTR; + return nullptr; m_pullMode = false; m_audioSource = new PulseInputPrivate(this); diff --git a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp index 0c7dc270a..3c20908dc 100644 --- a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp +++ b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp @@ -256,7 +256,7 @@ QIODevice *QPulseAudioOutput::start() m_pullMode = false; if (!open()) - return Q_NULLPTR; + return nullptr; m_audioSource = new PulseOutputPrivate(this); m_audioSource->open(QIODevice::WriteOnly|QIODevice::Unbuffered); diff --git a/src/plugins/qnx-audio/audio/qnxaudiodeviceinfo.h b/src/plugins/qnx-audio/audio/qnxaudiodeviceinfo.h index 432c22163..cb620be3b 100644 --- a/src/plugins/qnx-audio/audio/qnxaudiodeviceinfo.h +++ b/src/plugins/qnx-audio/audio/qnxaudiodeviceinfo.h @@ -52,15 +52,15 @@ public: QnxAudioDeviceInfo(const QString &deviceName, QAudio::Mode mode); ~QnxAudioDeviceInfo(); - QAudioFormat preferredFormat() const Q_DECL_OVERRIDE; - bool isFormatSupported(const QAudioFormat &format) const Q_DECL_OVERRIDE; - QString deviceName() const Q_DECL_OVERRIDE; - QStringList supportedCodecs() Q_DECL_OVERRIDE; - QList<int> supportedSampleRates() Q_DECL_OVERRIDE; - QList<int> supportedChannelCounts() Q_DECL_OVERRIDE; - QList<int> supportedSampleSizes() Q_DECL_OVERRIDE; - QList<QAudioFormat::Endian> supportedByteOrders() Q_DECL_OVERRIDE; - QList<QAudioFormat::SampleType> supportedSampleTypes() Q_DECL_OVERRIDE; + QAudioFormat preferredFormat() const override; + bool isFormatSupported(const QAudioFormat &format) const override; + QString deviceName() const override; + QStringList supportedCodecs() override; + QList<int> supportedSampleRates() override; + QList<int> supportedChannelCounts() override; + QList<int> supportedSampleSizes() override; + QList<QAudioFormat::Endian> supportedByteOrders() override; + QList<QAudioFormat::SampleType> supportedSampleTypes() override; private: const QString m_name; diff --git a/src/plugins/qnx-audio/audio/qnxaudioinput.h b/src/plugins/qnx-audio/audio/qnxaudioinput.h index 4c6bb2676..c677b6c96 100644 --- a/src/plugins/qnx-audio/audio/qnxaudioinput.h +++ b/src/plugins/qnx-audio/audio/qnxaudioinput.h @@ -59,26 +59,26 @@ public: QnxAudioInput(); ~QnxAudioInput(); - void start(QIODevice*) Q_DECL_OVERRIDE; - QIODevice* start() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; - void reset() Q_DECL_OVERRIDE; - void suspend() Q_DECL_OVERRIDE; - void resume() Q_DECL_OVERRIDE; - int bytesReady() const Q_DECL_OVERRIDE; - int periodSize() const Q_DECL_OVERRIDE; - void setBufferSize(int ) Q_DECL_OVERRIDE; - int bufferSize() const Q_DECL_OVERRIDE; - void setNotifyInterval(int ) Q_DECL_OVERRIDE; - int notifyInterval() const Q_DECL_OVERRIDE; - qint64 processedUSecs() const Q_DECL_OVERRIDE; - qint64 elapsedUSecs() const Q_DECL_OVERRIDE; - QAudio::Error error() const Q_DECL_OVERRIDE; - QAudio::State state() const Q_DECL_OVERRIDE; - void setFormat(const QAudioFormat&) Q_DECL_OVERRIDE; - QAudioFormat format() const Q_DECL_OVERRIDE; - void setVolume(qreal) Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; + void start(QIODevice*) override; + QIODevice* start() override; + void stop() override; + void reset() override; + void suspend() override; + void resume() override; + int bytesReady() const override; + int periodSize() const override; + void setBufferSize(int ) override; + int bufferSize() const override; + void setNotifyInterval(int ) override; + int notifyInterval() const override; + qint64 processedUSecs() const override; + qint64 elapsedUSecs() const override; + QAudio::Error error() const override; + QAudio::State state() const override; + void setFormat(const QAudioFormat&) override; + QAudioFormat format() const override; + void setVolume(qreal) override; + qreal volume() const override; private slots: void userFeed(); @@ -124,8 +124,8 @@ class InputPrivate : public QIODevice public: InputPrivate(QnxAudioInput *audio); - qint64 readData(char *data, qint64 len) Q_DECL_OVERRIDE; - qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE; + qint64 readData(char *data, qint64 len) override; + qint64 writeData(const char *data, qint64 len) override; void trigger(); diff --git a/src/plugins/qnx-audio/audio/qnxaudiooutput.h b/src/plugins/qnx-audio/audio/qnxaudiooutput.h index 85aadf4b9..7a0979f77 100644 --- a/src/plugins/qnx-audio/audio/qnxaudiooutput.h +++ b/src/plugins/qnx-audio/audio/qnxaudiooutput.h @@ -62,28 +62,28 @@ public: QnxAudioOutput(); ~QnxAudioOutput(); - void start(QIODevice *source) Q_DECL_OVERRIDE; - QIODevice *start() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; - void reset() Q_DECL_OVERRIDE; - void suspend() Q_DECL_OVERRIDE; - void resume() Q_DECL_OVERRIDE; - int bytesFree() const Q_DECL_OVERRIDE; - int periodSize() const Q_DECL_OVERRIDE; - void setBufferSize(int) Q_DECL_OVERRIDE {} - int bufferSize() const Q_DECL_OVERRIDE { return 0; } - void setNotifyInterval(int ms) Q_DECL_OVERRIDE; - int notifyInterval() const Q_DECL_OVERRIDE; - qint64 processedUSecs() const Q_DECL_OVERRIDE; - qint64 elapsedUSecs() const Q_DECL_OVERRIDE; - QAudio::Error error() const Q_DECL_OVERRIDE; - QAudio::State state() const Q_DECL_OVERRIDE; - void setFormat(const QAudioFormat &format) Q_DECL_OVERRIDE; - QAudioFormat format() const Q_DECL_OVERRIDE; - void setVolume(qreal volume) Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; - void setCategory(const QString &category) Q_DECL_OVERRIDE; - QString category() const Q_DECL_OVERRIDE; + void start(QIODevice *source) override; + QIODevice *start() override; + void stop() override; + void reset() override; + void suspend() override; + void resume() override; + int bytesFree() const override; + int periodSize() const override; + void setBufferSize(int) override {} + int bufferSize() const override { return 0; } + void setNotifyInterval(int ms) override; + int notifyInterval() const override; + qint64 processedUSecs() const override; + qint64 elapsedUSecs() const override; + QAudio::Error error() const override; + QAudio::State state() const override; + void setFormat(const QAudioFormat &format) override; + QAudioFormat format() const override; + void setVolume(qreal volume) override; + qreal volume() const override; + void setCategory(const QString &category) override; + QString category() const override; private slots: void pullData(); diff --git a/src/plugins/qnx-audio/audio/qnxaudioplugin.h b/src/plugins/qnx-audio/audio/qnxaudioplugin.h index 1d8b8a74b..d41f4020a 100644 --- a/src/plugins/qnx-audio/audio/qnxaudioplugin.h +++ b/src/plugins/qnx-audio/audio/qnxaudioplugin.h @@ -55,11 +55,11 @@ public: explicit QnxAudioPlugin(QObject *parent = 0); ~QnxAudioPlugin() {} - QByteArray defaultDevice(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QList<QByteArray> availableDevices(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QAbstractAudioInput *createInput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioOutput *createOutput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) Q_DECL_OVERRIDE; + QByteArray defaultDevice(QAudio::Mode mode) const override; + QList<QByteArray> availableDevices(QAudio::Mode mode) const override; + QAbstractAudioInput *createInput(const QByteArray &device) override; + QAbstractAudioOutput *createOutput(const QByteArray &device) override; + QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) override; }; QT_END_NAMESPACE diff --git a/src/plugins/qnx/camera/bbcameraaudioencodersettingscontrol.h b/src/plugins/qnx/camera/bbcameraaudioencodersettingscontrol.h index 44ee80026..38c01f86c 100644 --- a/src/plugins/qnx/camera/bbcameraaudioencodersettingscontrol.h +++ b/src/plugins/qnx/camera/bbcameraaudioencodersettingscontrol.h @@ -51,11 +51,11 @@ class BbCameraAudioEncoderSettingsControl : public QAudioEncoderSettingsControl public: explicit BbCameraAudioEncoderSettingsControl(BbCameraSession *session, QObject *parent = 0); - QStringList supportedAudioCodecs() const Q_DECL_OVERRIDE; - QString codecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QAudioEncoderSettings audioSettings() const Q_DECL_OVERRIDE; - void setAudioSettings(const QAudioEncoderSettings &settings) Q_DECL_OVERRIDE; + QStringList supportedAudioCodecs() const override; + QString codecDescription(const QString &codecName) const override; + QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const override; + QAudioEncoderSettings audioSettings() const override; + void setAudioSettings(const QAudioEncoderSettings &settings) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcameracapturebufferformatcontrol.h b/src/plugins/qnx/camera/bbcameracapturebufferformatcontrol.h index 2be6f0c3b..4aac740c8 100644 --- a/src/plugins/qnx/camera/bbcameracapturebufferformatcontrol.h +++ b/src/plugins/qnx/camera/bbcameracapturebufferformatcontrol.h @@ -49,9 +49,9 @@ class BbCameraCaptureBufferFormatControl : public QCameraCaptureBufferFormatCont public: explicit BbCameraCaptureBufferFormatControl(QObject *parent = 0); - QList<QVideoFrame::PixelFormat> supportedBufferFormats() const Q_DECL_OVERRIDE; - QVideoFrame::PixelFormat bufferFormat() const Q_DECL_OVERRIDE; - void setBufferFormat(QVideoFrame::PixelFormat format) Q_DECL_OVERRIDE; + QList<QVideoFrame::PixelFormat> supportedBufferFormats() const override; + QVideoFrame::PixelFormat bufferFormat() const override; + void setBufferFormat(QVideoFrame::PixelFormat format) override; }; QT_END_NAMESPACE diff --git a/src/plugins/qnx/camera/bbcameracapturedestinationcontrol.h b/src/plugins/qnx/camera/bbcameracapturedestinationcontrol.h index ab6f54b3d..9586ec56a 100644 --- a/src/plugins/qnx/camera/bbcameracapturedestinationcontrol.h +++ b/src/plugins/qnx/camera/bbcameracapturedestinationcontrol.h @@ -51,9 +51,9 @@ class BbCameraCaptureDestinationControl : public QCameraCaptureDestinationContro public: explicit BbCameraCaptureDestinationControl(BbCameraSession *session, QObject *parent = 0); - bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const Q_DECL_OVERRIDE; - QCameraImageCapture::CaptureDestinations captureDestination() const Q_DECL_OVERRIDE; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) Q_DECL_OVERRIDE; + bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const override; + QCameraImageCapture::CaptureDestinations captureDestination() const override; + void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcameracontrol.h b/src/plugins/qnx/camera/bbcameracontrol.h index a22c8d6fa..0c97bd83c 100644 --- a/src/plugins/qnx/camera/bbcameracontrol.h +++ b/src/plugins/qnx/camera/bbcameracontrol.h @@ -51,16 +51,16 @@ class BbCameraControl : public QCameraControl public: explicit BbCameraControl(BbCameraSession *session, QObject *parent = 0); - QCamera::State state() const Q_DECL_OVERRIDE; - void setState(QCamera::State state) Q_DECL_OVERRIDE; + QCamera::State state() const override; + void setState(QCamera::State state) override; - QCamera::Status status() const Q_DECL_OVERRIDE; + QCamera::Status status() const override; - QCamera::CaptureModes captureMode() const Q_DECL_OVERRIDE; - void setCaptureMode(QCamera::CaptureModes) Q_DECL_OVERRIDE; - bool isCaptureModeSupported(QCamera::CaptureModes mode) const Q_DECL_OVERRIDE; + QCamera::CaptureModes captureMode() const override; + void setCaptureMode(QCamera::CaptureModes) override; + bool isCaptureModeSupported(QCamera::CaptureModes mode) const override; - bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const Q_DECL_OVERRIDE; + bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcameraexposurecontrol.h b/src/plugins/qnx/camera/bbcameraexposurecontrol.h index 4f5a71518..2d0da29bd 100644 --- a/src/plugins/qnx/camera/bbcameraexposurecontrol.h +++ b/src/plugins/qnx/camera/bbcameraexposurecontrol.h @@ -51,12 +51,12 @@ class BbCameraExposureControl : public QCameraExposureControl public: explicit BbCameraExposureControl(BbCameraSession *session, QObject *parent = 0); - virtual bool isParameterSupported(ExposureParameter parameter) const Q_DECL_OVERRIDE; - virtual QVariantList supportedParameterRange(ExposureParameter parameter, bool *continuous) const Q_DECL_OVERRIDE; + bool isParameterSupported(ExposureParameter parameter) const override; + QVariantList supportedParameterRange(ExposureParameter parameter, bool *continuous) const override; - virtual QVariant requestedValue(ExposureParameter parameter) const Q_DECL_OVERRIDE; - virtual QVariant actualValue(ExposureParameter parameter) const Q_DECL_OVERRIDE; - virtual bool setValue(ExposureParameter parameter, const QVariant& value) Q_DECL_OVERRIDE; + QVariant requestedValue(ExposureParameter parameter) const override; + QVariant actualValue(ExposureParameter parameter) const override; + bool setValue(ExposureParameter parameter, const QVariant& value) override; private Q_SLOTS: void statusChanged(QCamera::Status status); diff --git a/src/plugins/qnx/camera/bbcameraflashcontrol.h b/src/plugins/qnx/camera/bbcameraflashcontrol.h index e4b5f0a7f..8ce9c1f41 100644 --- a/src/plugins/qnx/camera/bbcameraflashcontrol.h +++ b/src/plugins/qnx/camera/bbcameraflashcontrol.h @@ -51,10 +51,10 @@ class BbCameraFlashControl : public QCameraFlashControl public: explicit BbCameraFlashControl(BbCameraSession *session, QObject *parent = 0); - QCameraExposure::FlashModes flashMode() const Q_DECL_OVERRIDE; - void setFlashMode(QCameraExposure::FlashModes mode) Q_DECL_OVERRIDE; - bool isFlashModeSupported(QCameraExposure::FlashModes mode) const Q_DECL_OVERRIDE; - bool isFlashReady() const Q_DECL_OVERRIDE; + QCameraExposure::FlashModes flashMode() const override; + void setFlashMode(QCameraExposure::FlashModes mode) override; + bool isFlashModeSupported(QCameraExposure::FlashModes mode) const override; + bool isFlashReady() const override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcamerafocuscontrol.h b/src/plugins/qnx/camera/bbcamerafocuscontrol.h index 2501aafdd..bf11ea03e 100644 --- a/src/plugins/qnx/camera/bbcamerafocuscontrol.h +++ b/src/plugins/qnx/camera/bbcamerafocuscontrol.h @@ -51,15 +51,15 @@ class BbCameraFocusControl : public QCameraFocusControl public: explicit BbCameraFocusControl(BbCameraSession *session, QObject *parent = 0); - QCameraFocus::FocusModes focusMode() const Q_DECL_OVERRIDE; - void setFocusMode(QCameraFocus::FocusModes mode) Q_DECL_OVERRIDE; - bool isFocusModeSupported(QCameraFocus::FocusModes mode) const Q_DECL_OVERRIDE; - QCameraFocus::FocusPointMode focusPointMode() const Q_DECL_OVERRIDE; - void setFocusPointMode(QCameraFocus::FocusPointMode mode) Q_DECL_OVERRIDE; - bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const Q_DECL_OVERRIDE; - QPointF customFocusPoint() const Q_DECL_OVERRIDE; - void setCustomFocusPoint(const QPointF &point) Q_DECL_OVERRIDE; - QCameraFocusZoneList focusZones() const Q_DECL_OVERRIDE; + QCameraFocus::FocusModes focusMode() const override; + void setFocusMode(QCameraFocus::FocusModes mode) override; + bool isFocusModeSupported(QCameraFocus::FocusModes mode) const override; + QCameraFocus::FocusPointMode focusPointMode() const override; + void setFocusPointMode(QCameraFocus::FocusPointMode mode) override; + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const override; + QPointF customFocusPoint() const override; + void setCustomFocusPoint(const QPointF &point) override; + QCameraFocusZoneList focusZones() const override; private: void updateCustomFocusRegion(); diff --git a/src/plugins/qnx/camera/bbcameraimagecapturecontrol.h b/src/plugins/qnx/camera/bbcameraimagecapturecontrol.h index 4d239ef59..b8013ba1f 100644 --- a/src/plugins/qnx/camera/bbcameraimagecapturecontrol.h +++ b/src/plugins/qnx/camera/bbcameraimagecapturecontrol.h @@ -51,13 +51,13 @@ class BbCameraImageCaptureControl : public QCameraImageCaptureControl public: explicit BbCameraImageCaptureControl(BbCameraSession *session, QObject *parent = 0); - bool isReadyForCapture() const Q_DECL_OVERRIDE; + bool isReadyForCapture() const override; - QCameraImageCapture::DriveMode driveMode() const Q_DECL_OVERRIDE; - void setDriveMode(QCameraImageCapture::DriveMode mode) Q_DECL_OVERRIDE; + QCameraImageCapture::DriveMode driveMode() const override; + void setDriveMode(QCameraImageCapture::DriveMode mode) override; - int capture(const QString &fileName) Q_DECL_OVERRIDE; - void cancelCapture() Q_DECL_OVERRIDE; + int capture(const QString &fileName) override; + void cancelCapture() override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcameraimageprocessingcontrol.h b/src/plugins/qnx/camera/bbcameraimageprocessingcontrol.h index 2060b4d99..0eefdd2a1 100644 --- a/src/plugins/qnx/camera/bbcameraimageprocessingcontrol.h +++ b/src/plugins/qnx/camera/bbcameraimageprocessingcontrol.h @@ -51,10 +51,10 @@ class BbCameraImageProcessingControl : public QCameraImageProcessingControl public: explicit BbCameraImageProcessingControl(BbCameraSession *session, QObject *parent = 0); - bool isParameterSupported(ProcessingParameter) const Q_DECL_OVERRIDE; - bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const Q_DECL_OVERRIDE; - QVariant parameter(ProcessingParameter parameter) const Q_DECL_OVERRIDE; - void setParameter(ProcessingParameter parameter, const QVariant &value) Q_DECL_OVERRIDE; + bool isParameterSupported(ProcessingParameter) const override; + bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const override; + QVariant parameter(ProcessingParameter parameter) const override; + void setParameter(ProcessingParameter parameter, const QVariant &value) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcameralockscontrol.h b/src/plugins/qnx/camera/bbcameralockscontrol.h index f6a7e1864..be3d1bd02 100644 --- a/src/plugins/qnx/camera/bbcameralockscontrol.h +++ b/src/plugins/qnx/camera/bbcameralockscontrol.h @@ -59,10 +59,10 @@ public: explicit BbCameraLocksControl(BbCameraSession *session, QObject *parent = 0); - QCamera::LockTypes supportedLocks() const Q_DECL_OVERRIDE; - QCamera::LockStatus lockStatus(QCamera::LockType lock) const Q_DECL_OVERRIDE; - void searchAndLock(QCamera::LockTypes locks) Q_DECL_OVERRIDE; - void unlock(QCamera::LockTypes locks) Q_DECL_OVERRIDE; + QCamera::LockTypes supportedLocks() const override; + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; private Q_SLOTS: void cameraOpened(); diff --git a/src/plugins/qnx/camera/bbcameramediarecordercontrol.h b/src/plugins/qnx/camera/bbcameramediarecordercontrol.h index 0ba82969f..af46479a5 100644 --- a/src/plugins/qnx/camera/bbcameramediarecordercontrol.h +++ b/src/plugins/qnx/camera/bbcameramediarecordercontrol.h @@ -51,19 +51,19 @@ class BbCameraMediaRecorderControl : public QMediaRecorderControl public: explicit BbCameraMediaRecorderControl(BbCameraSession *session, QObject *parent = 0); - QUrl outputLocation() const Q_DECL_OVERRIDE; - bool setOutputLocation(const QUrl &location) Q_DECL_OVERRIDE; - QMediaRecorder::State state() const Q_DECL_OVERRIDE; - QMediaRecorder::Status status() const Q_DECL_OVERRIDE; - qint64 duration() const Q_DECL_OVERRIDE; - bool isMuted() const Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; - void applySettings() Q_DECL_OVERRIDE; + QUrl outputLocation() const override; + bool setOutputLocation(const QUrl &location) override; + QMediaRecorder::State state() const override; + QMediaRecorder::Status status() const override; + qint64 duration() const override; + bool isMuted() const override; + qreal volume() const override; + void applySettings() override; public Q_SLOTS: - void setState(QMediaRecorder::State state) Q_DECL_OVERRIDE; - void setMuted(bool muted) Q_DECL_OVERRIDE; - void setVolume(qreal volume) Q_DECL_OVERRIDE; + void setState(QMediaRecorder::State state) override; + void setMuted(bool muted) override; + void setVolume(qreal volume) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcameraorientationhandler.h b/src/plugins/qnx/camera/bbcameraorientationhandler.h index e730acdc7..006a259cc 100644 --- a/src/plugins/qnx/camera/bbcameraorientationhandler.h +++ b/src/plugins/qnx/camera/bbcameraorientationhandler.h @@ -51,7 +51,7 @@ public: explicit BbCameraOrientationHandler(QObject *parent = 0); ~BbCameraOrientationHandler(); - bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE; + bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; int orientation() const; diff --git a/src/plugins/qnx/camera/bbcameravideoencodersettingscontrol.h b/src/plugins/qnx/camera/bbcameravideoencodersettingscontrol.h index 1e0ed8708..f67196be1 100644 --- a/src/plugins/qnx/camera/bbcameravideoencodersettingscontrol.h +++ b/src/plugins/qnx/camera/bbcameravideoencodersettingscontrol.h @@ -51,12 +51,12 @@ class BbCameraVideoEncoderSettingsControl : public QVideoEncoderSettingsControl public: explicit BbCameraVideoEncoderSettingsControl(BbCameraSession *session, QObject *parent = 0); - QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QStringList supportedVideoCodecs() const Q_DECL_OVERRIDE; - QString videoCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QVideoEncoderSettings videoSettings() const Q_DECL_OVERRIDE; - void setVideoSettings(const QVideoEncoderSettings &settings) Q_DECL_OVERRIDE; + QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings, bool *continuous = 0) const override; + QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous = 0) const override; + QStringList supportedVideoCodecs() const override; + QString videoCodecDescription(const QString &codecName) const override; + QVideoEncoderSettings videoSettings() const override; + void setVideoSettings(const QVideoEncoderSettings &settings) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcameraviewfindersettingscontrol.h b/src/plugins/qnx/camera/bbcameraviewfindersettingscontrol.h index b9c4af8a3..7a8e57a13 100644 --- a/src/plugins/qnx/camera/bbcameraviewfindersettingscontrol.h +++ b/src/plugins/qnx/camera/bbcameraviewfindersettingscontrol.h @@ -51,9 +51,9 @@ class BbCameraViewfinderSettingsControl : public QCameraViewfinderSettingsContro public: explicit BbCameraViewfinderSettingsControl(BbCameraSession *session, QObject *parent = 0); - bool isViewfinderParameterSupported(ViewfinderParameter parameter) const Q_DECL_OVERRIDE; - QVariant viewfinderParameter(ViewfinderParameter parameter) const Q_DECL_OVERRIDE; - void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) Q_DECL_OVERRIDE; + bool isViewfinderParameterSupported(ViewfinderParameter parameter) const override; + QVariant viewfinderParameter(ViewfinderParameter parameter) const override; + void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbcamerazoomcontrol.h b/src/plugins/qnx/camera/bbcamerazoomcontrol.h index fc5813db4..7b5e06f8d 100644 --- a/src/plugins/qnx/camera/bbcamerazoomcontrol.h +++ b/src/plugins/qnx/camera/bbcamerazoomcontrol.h @@ -52,13 +52,13 @@ class BbCameraZoomControl : public QCameraZoomControl public: explicit BbCameraZoomControl(BbCameraSession *session, QObject *parent = 0); - qreal maximumOpticalZoom() const Q_DECL_OVERRIDE; - qreal maximumDigitalZoom() const Q_DECL_OVERRIDE; - qreal requestedOpticalZoom() const Q_DECL_OVERRIDE; - qreal requestedDigitalZoom() const Q_DECL_OVERRIDE; - qreal currentOpticalZoom() const Q_DECL_OVERRIDE; - qreal currentDigitalZoom() const Q_DECL_OVERRIDE; - void zoomTo(qreal optical, qreal digital) Q_DECL_OVERRIDE; + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; + void zoomTo(qreal optical, qreal digital) override; private Q_SLOTS: void statusChanged(QCamera::Status status); diff --git a/src/plugins/qnx/camera/bbimageencodercontrol.h b/src/plugins/qnx/camera/bbimageencodercontrol.h index adb506f1f..bb246def6 100644 --- a/src/plugins/qnx/camera/bbimageencodercontrol.h +++ b/src/plugins/qnx/camera/bbimageencodercontrol.h @@ -51,11 +51,11 @@ class BbImageEncoderControl : public QImageEncoderControl public: explicit BbImageEncoderControl(BbCameraSession *session, QObject *parent = 0); - QStringList supportedImageCodecs() const Q_DECL_OVERRIDE; - QString imageCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QImageEncoderSettings imageSettings() const Q_DECL_OVERRIDE; - void setImageSettings(const QImageEncoderSettings &settings) Q_DECL_OVERRIDE; + QStringList supportedImageCodecs() const override; + QString imageCodecDescription(const QString &codecName) const override; + QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const override; + QImageEncoderSettings imageSettings() const override; + void setImageSettings(const QImageEncoderSettings &settings) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/camera/bbvideodeviceselectorcontrol.h b/src/plugins/qnx/camera/bbvideodeviceselectorcontrol.h index 051fd713a..08d6cbb14 100644 --- a/src/plugins/qnx/camera/bbvideodeviceselectorcontrol.h +++ b/src/plugins/qnx/camera/bbvideodeviceselectorcontrol.h @@ -52,16 +52,16 @@ class BbVideoDeviceSelectorControl : public QVideoDeviceSelectorControl public: explicit BbVideoDeviceSelectorControl(BbCameraSession *session, QObject *parent = 0); - int deviceCount() const Q_DECL_OVERRIDE; - QString deviceName(int index) const Q_DECL_OVERRIDE; - QString deviceDescription(int index) const Q_DECL_OVERRIDE; - int defaultDevice() const Q_DECL_OVERRIDE; - int selectedDevice() const Q_DECL_OVERRIDE; + int deviceCount() const override; + QString deviceName(int index) const override; + QString deviceDescription(int index) const override; + int defaultDevice() const override; + int selectedDevice() const override; static void enumerateDevices(QList<QByteArray> *devices, QStringList *descriptions); public Q_SLOTS: - void setSelectedDevice(int index) Q_DECL_OVERRIDE; + void setSelectedDevice(int index) override; private: BbCameraSession* m_session; diff --git a/src/plugins/qnx/camera/bbvideorenderercontrol.h b/src/plugins/qnx/camera/bbvideorenderercontrol.h index 44bd5ca1b..441ff369d 100644 --- a/src/plugins/qnx/camera/bbvideorenderercontrol.h +++ b/src/plugins/qnx/camera/bbvideorenderercontrol.h @@ -51,8 +51,8 @@ class BbVideoRendererControl : public QVideoRendererControl public: explicit BbVideoRendererControl(BbCameraSession *session, QObject *parent = 0); - QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE; - void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE; + QAbstractVideoSurface *surface() const override; + void setSurface(QAbstractVideoSurface *surface) override; private: BbCameraSession *m_session; diff --git a/src/plugins/qnx/common/windowgrabber.h b/src/plugins/qnx/common/windowgrabber.h index 4278f2e3a..4b2217f74 100644 --- a/src/plugins/qnx/common/windowgrabber.h +++ b/src/plugins/qnx/common/windowgrabber.h @@ -100,7 +100,7 @@ public: void pause(); void resume(); - bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE; + bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; bool handleScreenEvent(screen_event_t event); diff --git a/src/plugins/qnx/mediaplayer/mediaplayer.pri b/src/plugins/qnx/mediaplayer/mediaplayer.pri index 71bb98827..f39b542cc 100644 --- a/src/plugins/qnx/mediaplayer/mediaplayer.pri +++ b/src/plugins/qnx/mediaplayer/mediaplayer.pri @@ -10,7 +10,8 @@ HEADERS += \ $$PWD/mmrendererutil.h \ $$PWD/mmrenderervideowindowcontrol.h \ $$PWD/mmreventmediaplayercontrol.h \ - $$PWD/mmreventthread.h + $$PWD/mmreventthread.h \ + $$PWD/mmrenderercustomaudiorolecontrol.h SOURCES += \ $$PWD/mmrendereraudiorolecontrol.cpp \ $$PWD/mmrenderermediaplayercontrol.cpp \ @@ -21,6 +22,7 @@ SOURCES += \ $$PWD/mmrendererutil.cpp \ $$PWD/mmrenderervideowindowcontrol.cpp \ $$PWD/mmreventmediaplayercontrol.cpp \ - $$PWD/mmreventthread.cpp + $$PWD/mmreventthread.cpp \ + $$PWD/mmrenderercustomaudiorolecontrol.cpp QMAKE_USE += mmrenderer diff --git a/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.h b/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.h index 7458d3512..d0d2165eb 100644 --- a/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.h +++ b/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.h @@ -49,10 +49,10 @@ class MmRendererAudioRoleControl : public QAudioRoleControl public: explicit MmRendererAudioRoleControl(QObject *parent = 0); - QAudio::Role audioRole() const Q_DECL_OVERRIDE; - void setAudioRole(QAudio::Role role) Q_DECL_OVERRIDE; + QAudio::Role audioRole() const override; + void setAudioRole(QAudio::Role role) override; - QList<QAudio::Role> supportedAudioRoles() const Q_DECL_OVERRIDE; + QList<QAudio::Role> supportedAudioRoles() const override; private: QAudio::Role m_role; diff --git a/src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.cpp b/src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.cpp new file mode 100644 index 000000000..c8971d41c --- /dev/null +++ b/src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 QNX Software Systems. All rights reserved. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "mmrenderercustomaudiorolecontrol.h" +#include "mmrendererutil.h" + +QT_BEGIN_NAMESPACE + +MmRendererCustomAudioRoleControl::MmRendererCustomAudioRoleControl(QObject *parent) + : QCustomAudioRoleControl(parent) +{ +} + +QString MmRendererCustomAudioRoleControl::customAudioRole() const +{ + return m_role; +} + +void MmRendererCustomAudioRoleControl::setCustomAudioRole(const QString &role) +{ + if (m_role != role) { + m_role = role; + emit customAudioRoleChanged(m_role); + } +} + +QStringList MmRendererCustomAudioRoleControl::supportedCustomAudioRoles() const +{ + return QStringList(); +} + +QT_END_NAMESPACE diff --git a/src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.h b/src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.h new file mode 100644 index 000000000..ff16f9355 --- /dev/null +++ b/src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 QNX Software Systems. All rights reserved. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MMRENDERERCUSTOMAUDIOROLECONTROL_H +#define MMRENDERERCUSTOMAUDIOROLECONTROL_H + +#include <qcustomaudiorolecontrol.h> + +QT_BEGIN_NAMESPACE + +class MmRendererCustomAudioRoleControl : public QCustomAudioRoleControl +{ + Q_OBJECT +public: + explicit MmRendererCustomAudioRoleControl(QObject *parent = 0); + + QString customAudioRole() const Q_DECL_OVERRIDE; + void setCustomAudioRole(const QString &role) Q_DECL_OVERRIDE; + + QStringList supportedCustomAudioRoles() const Q_DECL_OVERRIDE; + +private: + QString m_role; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp index 55116f642..c66ac937d 100644 --- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp +++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp @@ -37,6 +37,7 @@ ** ****************************************************************************/ #include "mmrendereraudiorolecontrol.h" +#include "mmrenderercustomaudiorolecontrol.h" #include "mmrenderermediaplayercontrol.h" #include "mmrenderermetadatareadercontrol.h" #include "mmrendererplayervideorenderercontrol.h" @@ -120,6 +121,40 @@ void MmRendererMediaPlayerControl::handleMmStopped() } } +void MmRendererMediaPlayerControl::handleMmSuspend(const QString &reason) +{ + if (m_state == QMediaPlayer::StoppedState) + return; + + Q_UNUSED(reason); + setMediaStatus(QMediaPlayer::StalledMedia); +} + +void MmRendererMediaPlayerControl::handleMmSuspendRemoval(const QString &bufferStatus) +{ + if (m_state == QMediaPlayer::StoppedState) + return; + + if (bufferStatus == QLatin1String("buffering")) + setMediaStatus(QMediaPlayer::BufferingMedia); + else + setMediaStatus(QMediaPlayer::BufferedMedia); +} + +void MmRendererMediaPlayerControl::handleMmPause() +{ + if (m_state == QMediaPlayer::PlayingState) { + setState(QMediaPlayer::PausedState); + } +} + +void MmRendererMediaPlayerControl::handleMmPlay() +{ + if (m_state == QMediaPlayer::PausedState) { + setState(QMediaPlayer::PlayingState); + } +} + void MmRendererMediaPlayerControl::closeConnection() { stopMonitoring(); @@ -166,6 +201,8 @@ void MmRendererMediaPlayerControl::attach() return; } + resetMonitoring(); + if (m_videoRendererControl) m_videoRendererControl->attachDisplay(m_context); @@ -180,7 +217,10 @@ void MmRendererMediaPlayerControl::attach() } if (m_audioId != -1 && m_audioRoleControl) { - QString audioType = qnxAudioType(m_audioRoleControl->audioRole()); + QAudio::Role audioRole = m_audioRoleControl->audioRole(); + QString audioType = (audioRole == QAudio::CustomRole && m_customAudioRoleControl) + ? m_customAudioRoleControl->customAudioRole() + : qnxAudioType(audioRole); QByteArray latin1AudioType = audioType.toLatin1(); if (!audioType.isEmpty() && latin1AudioType == audioType) { strm_dict_t *dict = strm_dict_new(); @@ -334,6 +374,7 @@ void MmRendererMediaPlayerControl::setState(QMediaPlayer::State state) void MmRendererMediaPlayerControl::stopInternal(StopCommand stopCommand) { + resetMonitoring(); setPosition(0); if (m_state != QMediaPlayer::StoppedState) { @@ -496,6 +537,7 @@ void MmRendererMediaPlayerControl::play() if (m_mediaStatus == QMediaPlayer::EndOfMedia) m_position = 0; + resetMonitoring(); setPositionInternal(m_position); setVolumeInternal(m_muted ? 0 : m_volume); setPlaybackRateInternal(m_rate); @@ -547,6 +589,11 @@ void MmRendererMediaPlayerControl::setAudioRoleControl(MmRendererAudioRoleContro m_audioRoleControl = audioRoleControl; } +void MmRendererMediaPlayerControl::setCustomAudioRoleControl(MmRendererCustomAudioRoleControl *customAudioRoleControl) +{ + m_customAudioRoleControl = customAudioRoleControl; +} + void MmRendererMediaPlayerControl::setMmPosition(qint64 newPosition) { if (newPosition != 0 && newPosition != m_position) { @@ -564,18 +611,11 @@ void MmRendererMediaPlayerControl::setMmBufferStatus(const QString &bufferStatus // ignore "idle" buffer status } -void MmRendererMediaPlayerControl::setMmBufferLevel(const QString &bufferLevel) +void MmRendererMediaPlayerControl::setMmBufferLevel(int level, int capacity) { - // buffer level has format level/capacity, e.g. "91319/124402" - const int slashPos = bufferLevel.indexOf('/'); - if (slashPos != -1) { - const int fill = bufferLevel.leftRef(slashPos).toInt(); - const int capacity = bufferLevel.midRef(slashPos + 1).toInt(); - if (capacity != 0) { - m_bufferLevel = fill / static_cast<float>(capacity) * 100.0f; - emit bufferStatusChanged(m_bufferLevel); - } - } + m_bufferLevel = capacity == 0 ? 0 : level / static_cast<float>(capacity) * 100.0f; + m_bufferLevel = qBound(0, m_bufferLevel, 100); + emit bufferStatusChanged(m_bufferLevel); } void MmRendererMediaPlayerControl::updateMetaData(const strm_dict *dict) diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h index ffa80bd27..3426ef2f2 100644 --- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h +++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h @@ -53,6 +53,7 @@ typedef struct strm_dict strm_dict_t; QT_BEGIN_NAMESPACE class MmRendererAudioRoleControl; +class MmRendererCustomAudioRoleControl; class MmRendererMetaDataReaderControl; class MmRendererPlayerVideoRendererControl; class MmRendererVideoWindowControl; @@ -63,40 +64,40 @@ class MmRendererMediaPlayerControl : public QMediaPlayerControl, public QAbstrac public: explicit MmRendererMediaPlayerControl(QObject *parent = 0); - QMediaPlayer::State state() const Q_DECL_OVERRIDE; + QMediaPlayer::State state() const override; - QMediaPlayer::MediaStatus mediaStatus() const Q_DECL_OVERRIDE; + QMediaPlayer::MediaStatus mediaStatus() const override; - qint64 duration() const Q_DECL_OVERRIDE; + qint64 duration() const override; - qint64 position() const Q_DECL_OVERRIDE; - void setPosition(qint64 position) Q_DECL_OVERRIDE; + qint64 position() const override; + void setPosition(qint64 position) override; - int volume() const Q_DECL_OVERRIDE; - void setVolume(int volume) Q_DECL_OVERRIDE; + int volume() const override; + void setVolume(int volume) override; - bool isMuted() const Q_DECL_OVERRIDE; - void setMuted(bool muted) Q_DECL_OVERRIDE; + bool isMuted() const override; + void setMuted(bool muted) override; - int bufferStatus() const Q_DECL_OVERRIDE; + int bufferStatus() const override; - bool isAudioAvailable() const Q_DECL_OVERRIDE; - bool isVideoAvailable() const Q_DECL_OVERRIDE; + bool isAudioAvailable() const override; + bool isVideoAvailable() const override; - bool isSeekable() const Q_DECL_OVERRIDE; + bool isSeekable() const override; - QMediaTimeRange availablePlaybackRanges() const Q_DECL_OVERRIDE; + QMediaTimeRange availablePlaybackRanges() const override; - qreal playbackRate() const Q_DECL_OVERRIDE; - void setPlaybackRate(qreal rate) Q_DECL_OVERRIDE; + qreal playbackRate() const override; + void setPlaybackRate(qreal rate) override; - QMediaContent media() const Q_DECL_OVERRIDE; - const QIODevice *mediaStream() const Q_DECL_OVERRIDE; - void setMedia(const QMediaContent &media, QIODevice *stream) Q_DECL_OVERRIDE; + QMediaContent media() const override; + const QIODevice *mediaStream() const override; + void setMedia(const QMediaContent &media, QIODevice *stream) override; - void play() Q_DECL_OVERRIDE; - void pause() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; + void play() override; + void pause() override; + void stop() override; MmRendererPlayerVideoRendererControl *videoRendererControl() const; void setVideoRendererControl(MmRendererPlayerVideoRendererControl *videoControl); @@ -105,18 +106,24 @@ public: void setVideoWindowControl(MmRendererVideoWindowControl *videoControl); void setMetaDataReaderControl(MmRendererMetaDataReaderControl *metaDataReaderControl); void setAudioRoleControl(MmRendererAudioRoleControl *audioRoleControl); + void setCustomAudioRoleControl(MmRendererCustomAudioRoleControl *customAudioRoleControl); protected: virtual void startMonitoring() = 0; virtual void stopMonitoring() = 0; + virtual void resetMonitoring() = 0; void openConnection(); void emitMmError(const QString &msg); void emitPError(const QString &msg); void setMmPosition(qint64 newPosition); void setMmBufferStatus(const QString &bufferStatus); - void setMmBufferLevel(const QString &bufferLevel); + void setMmBufferLevel(int level, int capacity); void handleMmStopped(); + void handleMmSuspend(const QString &reason); + void handleMmSuspendRemoval(const QString &bufferStatus); + void handleMmPause(); + void handleMmPlay(); void updateMetaData(const strm_dict_t *dict); // must be called from subclass dtors (calls virtual function stopMonitoring()) @@ -158,6 +165,7 @@ private: QPointer<MmRendererVideoWindowControl> m_videoWindowControl; QPointer<MmRendererMetaDataReaderControl> m_metaDataReaderControl; QPointer<MmRendererAudioRoleControl> m_audioRoleControl; + QPointer<MmRendererCustomAudioRoleControl> m_customAudioRoleControl; MmRendererMetaData m_metaData; qint64 m_position; QMediaPlayer::MediaStatus m_mediaStatus; diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp b/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp index 257c437ce..190cb8b80 100644 --- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp +++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp @@ -39,6 +39,7 @@ #include "mmrenderermediaplayerservice.h" #include "mmrendereraudiorolecontrol.h" +#include "mmrenderercustomaudiorolecontrol.h" #include "mmrenderermediaplayercontrol.h" #include "mmrenderermetadatareadercontrol.h" #include "mmrendererplayervideorenderercontrol.h" @@ -68,6 +69,7 @@ MmRendererMediaPlayerService::~MmRendererMediaPlayerService() delete m_mediaPlayerControl; delete m_metaDataReaderControl; delete m_audioRoleControl; + delete m_customAudioRoleControl; } QMediaControl *MmRendererMediaPlayerService::requestControl(const char *name) @@ -90,6 +92,12 @@ QMediaControl *MmRendererMediaPlayerService::requestControl(const char *name) updateControls(); } return m_audioRoleControl; + } else if (qstrcmp(name, QCustomAudioRoleControl_iid) == 0) { + if (!m_customAudioRoleControl) { + m_customAudioRoleControl = new MmRendererCustomAudioRoleControl(); + updateControls(); + } + return m_customAudioRoleControl; } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) { if (!m_appHasDrmPermissionChecked) { m_appHasDrmPermission = checkForDrmPermission(); @@ -130,6 +138,8 @@ void MmRendererMediaPlayerService::releaseControl(QMediaControl *control) m_metaDataReaderControl = 0; if (control == m_audioRoleControl) m_audioRoleControl = 0; + if (control == m_customAudioRoleControl) + m_customAudioRoleControl = 0; delete control; } @@ -146,6 +156,9 @@ void MmRendererMediaPlayerService::updateControls() if (m_audioRoleControl && m_mediaPlayerControl) m_mediaPlayerControl->setAudioRoleControl(m_audioRoleControl); + + if (m_customAudioRoleControl && m_mediaPlayerControl) + m_mediaPlayerControl->setCustomAudioRoleControl(m_customAudioRoleControl); } QT_END_NAMESPACE diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.h b/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.h index 9434b85b2..ab3054af5 100644 --- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.h +++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.h @@ -45,6 +45,7 @@ QT_BEGIN_NAMESPACE class MmRendererAudioRoleControl; +class MmRendererCustomAudioRoleControl; class MmRendererMediaPlayerControl; class MmRendererMetaDataReaderControl; class MmRendererPlayerVideoRendererControl; @@ -57,8 +58,8 @@ public: explicit MmRendererMediaPlayerService(QObject *parent = 0); ~MmRendererMediaPlayerService(); - QMediaControl *requestControl(const char *name) Q_DECL_OVERRIDE; - void releaseControl(QMediaControl *control) Q_DECL_OVERRIDE; + QMediaControl *requestControl(const char *name) override; + void releaseControl(QMediaControl *control) override; private: void updateControls(); @@ -68,6 +69,7 @@ private: QPointer<MmRendererMediaPlayerControl> m_mediaPlayerControl; QPointer<MmRendererMetaDataReaderControl> m_metaDataReaderControl; QPointer<MmRendererAudioRoleControl> m_audioRoleControl; + QPointer<MmRendererCustomAudioRoleControl> m_customAudioRoleControl; bool m_appHasDrmPermission : 1; bool m_appHasDrmPermissionChecked : 1; diff --git a/src/plugins/qnx/mediaplayer/mmrenderermetadatareadercontrol.h b/src/plugins/qnx/mediaplayer/mmrenderermetadatareadercontrol.h index 9c000224e..878420460 100644 --- a/src/plugins/qnx/mediaplayer/mmrenderermetadatareadercontrol.h +++ b/src/plugins/qnx/mediaplayer/mmrenderermetadatareadercontrol.h @@ -50,10 +50,10 @@ class MmRendererMetaDataReaderControl : public QMetaDataReaderControl public: explicit MmRendererMetaDataReaderControl(QObject *parent = 0); - bool isMetaDataAvailable() const Q_DECL_OVERRIDE; + bool isMetaDataAvailable() const override; - QVariant metaData(const QString &key) const Q_DECL_OVERRIDE; - QStringList availableMetaData() const Q_DECL_OVERRIDE; + QVariant metaData(const QString &key) const override; + QStringList availableMetaData() const override; void setMetaData(const MmRendererMetaData &data); diff --git a/src/plugins/qnx/mediaplayer/mmrendererplayervideorenderercontrol.h b/src/plugins/qnx/mediaplayer/mmrendererplayervideorenderercontrol.h index 878aa4bb0..c547ef534 100644 --- a/src/plugins/qnx/mediaplayer/mmrendererplayervideorenderercontrol.h +++ b/src/plugins/qnx/mediaplayer/mmrendererplayervideorenderercontrol.h @@ -56,8 +56,8 @@ public: explicit MmRendererPlayerVideoRendererControl(QObject *parent = 0); ~MmRendererPlayerVideoRendererControl(); - QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE; - void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE; + QAbstractVideoSurface *surface() const override; + void setSurface(QAbstractVideoSurface *surface) override; // Called by media control void attachDisplay(mmr_context_t *context); @@ -65,7 +65,7 @@ public: void pause(); void resume(); - void customEvent(QEvent *) Q_DECL_OVERRIDE; + void customEvent(QEvent *) override; private Q_SLOTS: void updateScene(const QSize &size); diff --git a/src/plugins/qnx/mediaplayer/mmrendererutil.cpp b/src/plugins/qnx/mediaplayer/mmrendererutil.cpp index 7a9f6393b..d8af4a746 100644 --- a/src/plugins/qnx/mediaplayer/mmrendererutil.cpp +++ b/src/plugins/qnx/mediaplayer/mmrendererutil.cpp @@ -92,7 +92,7 @@ static const unsigned int numMmErrors = sizeof(mmErrors) / sizeof(MmError); static QBasicMutex roleMapMutex; static bool roleMapInitialized = false; -static QString roleMap[QAudio::GameRole + 1]; +static QString roleMap[QAudio::CustomRole + 1]; template <typename T, size_t N> constexpr size_t countof(T (&)[N]) @@ -166,9 +166,15 @@ static void loadRoleMap() loadRoleMapping(AccessibilityRole); loadRoleMapping(SonificationRole); loadRoleMapping(GameRole); + loadRoleMapping(CustomRole); } #undef loadRoleMapping #pragma GCC diagnostic pop + + if (!roleMap[QAudio::CustomRole].isEmpty()) { + qWarning("CustomRole mapping ignored"); + roleMap[QAudio::CustomRole].clear(); + } } roleMapInitialized = true; diff --git a/src/plugins/qnx/mediaplayer/mmrenderervideowindowcontrol.h b/src/plugins/qnx/mediaplayer/mmrenderervideowindowcontrol.h index 5bfd192bb..8327e259d 100644 --- a/src/plugins/qnx/mediaplayer/mmrenderervideowindowcontrol.h +++ b/src/plugins/qnx/mediaplayer/mmrenderervideowindowcontrol.h @@ -54,33 +54,33 @@ public: explicit MmRendererVideoWindowControl(QObject *parent = 0); ~MmRendererVideoWindowControl(); - WId winId() const Q_DECL_OVERRIDE; - void setWinId(WId id) Q_DECL_OVERRIDE; + WId winId() const override; + void setWinId(WId id) override; - QRect displayRect() const Q_DECL_OVERRIDE; - void setDisplayRect(const QRect &rect) Q_DECL_OVERRIDE; + QRect displayRect() const override; + void setDisplayRect(const QRect &rect) override; - bool isFullScreen() const Q_DECL_OVERRIDE; - void setFullScreen(bool fullScreen) Q_DECL_OVERRIDE; + bool isFullScreen() const override; + void setFullScreen(bool fullScreen) override; - void repaint() Q_DECL_OVERRIDE; + void repaint() override; - QSize nativeSize() const Q_DECL_OVERRIDE; + QSize nativeSize() const override; - Qt::AspectRatioMode aspectRatioMode() const Q_DECL_OVERRIDE; - void setAspectRatioMode(Qt::AspectRatioMode mode) Q_DECL_OVERRIDE; + Qt::AspectRatioMode aspectRatioMode() const override; + void setAspectRatioMode(Qt::AspectRatioMode mode) override; - int brightness() const Q_DECL_OVERRIDE; - void setBrightness(int brightness) Q_DECL_OVERRIDE; + int brightness() const override; + void setBrightness(int brightness) override; - int contrast() const Q_DECL_OVERRIDE; - void setContrast(int contrast) Q_DECL_OVERRIDE; + int contrast() const override; + void setContrast(int contrast) override; - int hue() const Q_DECL_OVERRIDE; - void setHue(int hue) Q_DECL_OVERRIDE; + int hue() const override; + void setHue(int hue) override; - int saturation() const Q_DECL_OVERRIDE; - void setSaturation(int saturation) Q_DECL_OVERRIDE; + int saturation() const override; + void setSaturation(int saturation) override; // // Called by media control diff --git a/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.cpp b/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.cpp index a0bac1261..c050c03c5 100644 --- a/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.cpp +++ b/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.cpp @@ -42,13 +42,39 @@ #include "mmrenderervideowindowcontrol.h" #include <mm/renderer.h> +#include <tuple> QT_BEGIN_NAMESPACE +static std::tuple<int, int, bool> parseBufferLevel(const QByteArray &value) +{ + const int slashPos = value.indexOf('/'); + if (slashPos <= 0) + return std::make_tuple(0, 0, false); + + bool ok = false; + const int level = value.left(slashPos).toInt(&ok); + if (!ok || level < 0) + return std::make_tuple(0, 0, false); + + const int capacity = value.mid(slashPos + 1).toInt(&ok); + if (!ok || capacity < 0) + return std::make_tuple(0, 0, false); + + return std::make_tuple(level, capacity, true); +} + MmrEventMediaPlayerControl::MmrEventMediaPlayerControl(QObject *parent) : MmRendererMediaPlayerControl(parent) , m_eventThread(nullptr) + , m_bufferStatus("") + , m_bufferLevel(0) + , m_bufferCapacity(0) + , m_position(0) + , m_suspended(false) + , m_suspendedReason("unknown") , m_state(MMR_STATE_IDLE) + , m_speed(0) { openConnection(); } @@ -75,6 +101,18 @@ void MmrEventMediaPlayerControl::stopMonitoring() m_eventThread = nullptr; } +void MmrEventMediaPlayerControl::resetMonitoring() +{ + m_bufferStatus = ""; + m_bufferLevel = 0; + m_bufferCapacity = 0; + m_position = 0; + m_suspended = false; + m_suspendedReason = "unknown"; + m_state = MMR_STATE_IDLE; + m_speed = 0; +} + bool MmrEventMediaPlayerControl::nativeEventFilter(const QByteArray &eventType, void *message, long *result) @@ -102,32 +140,68 @@ void MmrEventMediaPlayerControl::readEvents() if (event->data) { const strm_string_t *value; value = strm_dict_find_rstr(event->data, "bufferstatus"); - if (value) - setMmBufferStatus(QString::fromLatin1(strm_string_get(value))); + if (value) { + m_bufferStatus = QByteArray(strm_string_get(value)); + if (!m_suspended) + setMmBufferStatus(m_bufferStatus); + } value = strm_dict_find_rstr(event->data, "bufferlevel"); - if (value) - setMmBufferLevel(QString::fromLatin1(strm_string_get(value))); + if (value) { + const char *cstrValue = strm_string_get(value); + int level; + int capacity; + bool ok; + std::tie(level, capacity, ok) = parseBufferLevel(QByteArray(cstrValue)); + if (!ok) { + qCritical("Could not parse buffer capacity from '%s'", cstrValue); + } else { + m_bufferLevel = level; + m_bufferCapacity = capacity; + setMmBufferLevel(level, capacity); + } + } + + value = strm_dict_find_rstr(event->data, "suspended"); + if (value) { + if (!m_suspended) { + m_suspended = true; + m_suspendedReason = strm_string_get(value); + handleMmSuspend(m_suspendedReason); + } + } else if (m_suspended) { + m_suspended = false; + handleMmSuspendRemoval(m_bufferStatus); + } } if (event->pos_str) { const QByteArray valueBa = QByteArray(event->pos_str); bool ok; - const qint64 position = valueBa.toLongLong(&ok); + m_position = valueBa.toLongLong(&ok); if (!ok) { qCritical("Could not parse position from '%s'", valueBa.constData()); } else { - setMmPosition(position); + setMmPosition(m_position); } } break; } + case MMR_EVENT_STATE: { + if (event->state == MMR_STATE_PLAYING && m_speed != event->speed) { + m_speed = event->speed; + if (m_speed == 0) + handleMmPause(); + else + handleMmPlay(); + } + break; + } case MMR_EVENT_METADATA: { updateMetaData(event->data); break; } case MMR_EVENT_ERROR: - case MMR_EVENT_STATE: case MMR_EVENT_NONE: case MMR_EVENT_OVERFLOW: case MMR_EVENT_WARNING: diff --git a/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.h b/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.h index e0aa952a7..0e4defc5c 100644 --- a/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.h +++ b/src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.h @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE class MmrEventThread; -class MmrEventMediaPlayerControl Q_DECL_FINAL : public MmRendererMediaPlayerControl +class MmrEventMediaPlayerControl final : public MmRendererMediaPlayerControl { Q_OBJECT public: @@ -56,6 +56,7 @@ public: void startMonitoring() override; void stopMonitoring() override; + void resetMonitoring() override; bool nativeEventFilter(const QByteArray &eventType, void *message, @@ -66,7 +67,18 @@ private Q_SLOTS: private: MmrEventThread *m_eventThread; + + // status properties. + QByteArray m_bufferStatus; + int m_bufferLevel; + int m_bufferCapacity; + qint64 m_position; + bool m_suspended; + QByteArray m_suspendedReason; + + // state properties. mmr_state_t m_state; + int m_speed; }; QT_END_NAMESPACE diff --git a/src/plugins/qnx/neutrinoserviceplugin.h b/src/plugins/qnx/neutrinoserviceplugin.h index 6e4b6861e..62ed7f0bd 100644 --- a/src/plugins/qnx/neutrinoserviceplugin.h +++ b/src/plugins/qnx/neutrinoserviceplugin.h @@ -53,9 +53,9 @@ class NeutrinoServicePlugin public: NeutrinoServicePlugin(); - QMediaService *create(const QString &key) Q_DECL_OVERRIDE; - void release(QMediaService *service) Q_DECL_OVERRIDE; - QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const Q_DECL_OVERRIDE; + QMediaService *create(const QString &key) override; + void release(QMediaService *service) override; + QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const override; }; QT_END_NAMESPACE diff --git a/src/plugins/wasapi/qwasapiaudiodeviceinfo.h b/src/plugins/wasapi/qwasapiaudiodeviceinfo.h index 97966c171..878d0273a 100644 --- a/src/plugins/wasapi/qwasapiaudiodeviceinfo.h +++ b/src/plugins/wasapi/qwasapiaudiodeviceinfo.h @@ -61,15 +61,15 @@ public: explicit QWasapiAudioDeviceInfo(QByteArray dev,QAudio::Mode mode); ~QWasapiAudioDeviceInfo(); - QAudioFormat preferredFormat() const Q_DECL_OVERRIDE; - bool isFormatSupported(const QAudioFormat& format) const Q_DECL_OVERRIDE; - QString deviceName() const Q_DECL_OVERRIDE; - QStringList supportedCodecs() Q_DECL_OVERRIDE; - QList<int> supportedSampleRates() Q_DECL_OVERRIDE; - QList<int> supportedChannelCounts() Q_DECL_OVERRIDE; - QList<int> supportedSampleSizes() Q_DECL_OVERRIDE; - QList<QAudioFormat::Endian> supportedByteOrders() Q_DECL_OVERRIDE; - QList<QAudioFormat::SampleType> supportedSampleTypes() Q_DECL_OVERRIDE; + QAudioFormat preferredFormat() const override; + bool isFormatSupported(const QAudioFormat& format) const override; + QString deviceName() const override; + QStringList supportedCodecs() override; + QList<int> supportedSampleRates() override; + QList<int> supportedChannelCounts() override; + QList<int> supportedSampleSizes() override; + QList<QAudioFormat::Endian> supportedByteOrders() override; + QList<QAudioFormat::SampleType> supportedSampleTypes() override; private: Microsoft::WRL::ComPtr<AudioInterface> m_interface; diff --git a/src/plugins/wasapi/qwasapiaudioinput.h b/src/plugins/wasapi/qwasapiaudioinput.h index 34ede06b7..babfb5b10 100644 --- a/src/plugins/wasapi/qwasapiaudioinput.h +++ b/src/plugins/wasapi/qwasapiaudioinput.h @@ -66,26 +66,26 @@ public: explicit QWasapiAudioInput(const QByteArray &device); ~QWasapiAudioInput(); - void start(QIODevice* device) Q_DECL_OVERRIDE; - QIODevice* start() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; - void reset() Q_DECL_OVERRIDE; - void suspend() Q_DECL_OVERRIDE; - void resume() Q_DECL_OVERRIDE; - int bytesReady() const Q_DECL_OVERRIDE; - int periodSize() const Q_DECL_OVERRIDE; - void setBufferSize(int value) Q_DECL_OVERRIDE; - int bufferSize() const Q_DECL_OVERRIDE; - void setNotifyInterval(int milliSeconds) Q_DECL_OVERRIDE; - int notifyInterval() const Q_DECL_OVERRIDE; - qint64 processedUSecs() const Q_DECL_OVERRIDE; - qint64 elapsedUSecs() const Q_DECL_OVERRIDE; - QAudio::Error error() const Q_DECL_OVERRIDE; - QAudio::State state() const Q_DECL_OVERRIDE; - void setFormat(const QAudioFormat& fmt) Q_DECL_OVERRIDE; - QAudioFormat format() const Q_DECL_OVERRIDE; - void setVolume(qreal) Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; + void start(QIODevice* device) override; + QIODevice* start() override; + void stop() override; + void reset() override; + void suspend() override; + void resume() override; + int bytesReady() const override; + int periodSize() const override; + void setBufferSize(int value) override; + int bufferSize() const override; + void setNotifyInterval(int milliSeconds) override; + int notifyInterval() const override; + qint64 processedUSecs() const override; + qint64 elapsedUSecs() const override; + QAudio::Error error() const override; + QAudio::State state() const override; + void setFormat(const QAudioFormat& fmt) override; + QAudioFormat format() const override; + void setVolume(qreal) override; + qreal volume() const override; void process(); public slots: diff --git a/src/plugins/wasapi/qwasapiaudiooutput.h b/src/plugins/wasapi/qwasapiaudiooutput.h index 02974071b..49219c5cc 100644 --- a/src/plugins/wasapi/qwasapiaudiooutput.h +++ b/src/plugins/wasapi/qwasapiaudiooutput.h @@ -67,26 +67,26 @@ public: explicit QWasapiAudioOutput(const QByteArray &device); ~QWasapiAudioOutput(); - void start(QIODevice* device) Q_DECL_OVERRIDE; - QIODevice* start() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; - void reset() Q_DECL_OVERRIDE; - void suspend() Q_DECL_OVERRIDE; - void resume() Q_DECL_OVERRIDE; - int bytesFree() const Q_DECL_OVERRIDE; - int periodSize() const Q_DECL_OVERRIDE; - void setBufferSize(int value) Q_DECL_OVERRIDE; - int bufferSize() const Q_DECL_OVERRIDE; - void setNotifyInterval(int milliSeconds) Q_DECL_OVERRIDE; - int notifyInterval() const Q_DECL_OVERRIDE; - qint64 processedUSecs() const Q_DECL_OVERRIDE; - qint64 elapsedUSecs() const Q_DECL_OVERRIDE; - QAudio::Error error() const Q_DECL_OVERRIDE; - QAudio::State state() const Q_DECL_OVERRIDE; - void setFormat(const QAudioFormat& fmt) Q_DECL_OVERRIDE; - QAudioFormat format() const Q_DECL_OVERRIDE; - void setVolume(qreal) Q_DECL_OVERRIDE; - qreal volume() const Q_DECL_OVERRIDE; + void start(QIODevice* device) override; + QIODevice* start() override; + void stop() override; + void reset() override; + void suspend() override; + void resume() override; + int bytesFree() const override; + int periodSize() const override; + void setBufferSize(int value) override; + int bufferSize() const override; + void setNotifyInterval(int milliSeconds) override; + int notifyInterval() const override; + qint64 processedUSecs() const override; + qint64 elapsedUSecs() const override; + QAudio::Error error() const override; + QAudio::State state() const override; + void setFormat(const QAudioFormat& fmt) override; + QAudioFormat format() const override; + void setVolume(qreal) override; + qreal volume() const override; void process(); public slots: diff --git a/src/plugins/wasapi/qwasapiplugin.h b/src/plugins/wasapi/qwasapiplugin.h index e69e7895f..7b20676f6 100644 --- a/src/plugins/wasapi/qwasapiplugin.h +++ b/src/plugins/wasapi/qwasapiplugin.h @@ -60,11 +60,11 @@ public: explicit QWasapiPlugin(QObject *parent = 0); ~QWasapiPlugin() {} - QByteArray defaultDevice(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QList<QByteArray> availableDevices(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QAbstractAudioInput *createInput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioOutput *createOutput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) Q_DECL_OVERRIDE; + QByteArray defaultDevice(QAudio::Mode mode) const override; + QList<QByteArray> availableDevices(QAudio::Mode mode) const override; + QAbstractAudioInput *createInput(const QByteArray &device) override; + QAbstractAudioOutput *createOutput(const QByteArray &device) override; + QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) override; private: QList<QByteArray> m_deviceNames; diff --git a/src/plugins/windowsaudio/qwindowsaudioplugin.h b/src/plugins/windowsaudio/qwindowsaudioplugin.h index 7b500a39c..a155ae082 100644 --- a/src/plugins/windowsaudio/qwindowsaudioplugin.h +++ b/src/plugins/windowsaudio/qwindowsaudioplugin.h @@ -56,11 +56,11 @@ public: QWindowsAudioPlugin(QObject *parent = 0); ~QWindowsAudioPlugin() {} - QByteArray defaultDevice(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QList<QByteArray> availableDevices(QAudio::Mode mode) const Q_DECL_OVERRIDE; - QAbstractAudioInput *createInput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioOutput *createOutput(const QByteArray &device) Q_DECL_OVERRIDE; - QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) Q_DECL_OVERRIDE; + QByteArray defaultDevice(QAudio::Mode mode) const override; + QList<QByteArray> availableDevices(QAudio::Mode mode) const override; + QAbstractAudioInput *createInput(const QByteArray &device) override; + QAbstractAudioOutput *createOutput(const QByteArray &device) override; + QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) override; }; QT_END_NAMESPACE diff --git a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp index 79545f6ee..3544031a7 100644 --- a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp +++ b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp @@ -150,12 +150,12 @@ public: create(); } - MapMode mapMode() const Q_DECL_OVERRIDE + MapMode mapMode() const override { return NotMapped; } - uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) Q_DECL_OVERRIDE + uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) override { Q_UNUSED(mode); Q_UNUSED(numBytes); @@ -163,11 +163,11 @@ public: return 0; } - void unmap() Q_DECL_OVERRIDE + void unmap() override { } - QVariant handle() const Q_DECL_OVERRIDE + QVariant handle() const override { return QVariant::fromValue(textureId()); } diff --git a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h index 53dcb6b94..e190c8c4a 100644 --- a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h +++ b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h @@ -63,8 +63,8 @@ public: MediaFoundation }; - QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE; - void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE; + QAbstractVideoSurface *surface() const override; + void setSurface(QAbstractVideoSurface *surface) override; QSize size() const; void setSize(const QSize &size); diff --git a/src/plugins/winrt/qwinrtcameracontrol.cpp b/src/plugins/winrt/qwinrtcameracontrol.cpp index 527dd6e8f..4c515bc3d 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.cpp +++ b/src/plugins/winrt/qwinrtcameracontrol.cpp @@ -245,12 +245,12 @@ public: { if (m_pendingSamples.load() < 3) { m_pendingSamples.ref(); - return QueueEvent(MEStreamSinkRequestSample, GUID_NULL, S_OK, Q_NULLPTR); + return QueueEvent(MEStreamSinkRequestSample, GUID_NULL, S_OK, nullptr); } return S_OK; } - HRESULT __stdcall GetEvent(DWORD flags, IMFMediaEvent **event) Q_DECL_OVERRIDE + HRESULT __stdcall GetEvent(DWORD flags, IMFMediaEvent **event) override { QMutexLocker locker(&m_mutex); // Create an extra reference to avoid deadlock @@ -260,43 +260,43 @@ public: return eventQueue->GetEvent(flags, event); } - HRESULT __stdcall BeginGetEvent(IMFAsyncCallback *callback, IUnknown *state) Q_DECL_OVERRIDE + HRESULT __stdcall BeginGetEvent(IMFAsyncCallback *callback, IUnknown *state) override { QMutexLocker locker(&m_mutex); HRESULT hr = m_eventQueue->BeginGetEvent(callback, state); return hr; } - HRESULT __stdcall EndGetEvent(IMFAsyncResult *result, IMFMediaEvent **event) Q_DECL_OVERRIDE + HRESULT __stdcall EndGetEvent(IMFAsyncResult *result, IMFMediaEvent **event) override { QMutexLocker locker(&m_mutex); return m_eventQueue->EndGetEvent(result, event); } - HRESULT __stdcall QueueEvent(MediaEventType eventType, const GUID &extendedType, HRESULT status, const PROPVARIANT *value) Q_DECL_OVERRIDE + HRESULT __stdcall QueueEvent(MediaEventType eventType, const GUID &extendedType, HRESULT status, const PROPVARIANT *value) override { QMutexLocker locker(&m_mutex); return m_eventQueue->QueueEventParamVar(eventType, extendedType, status, value); } - HRESULT __stdcall GetMediaSink(IMFMediaSink **mediaSink) Q_DECL_OVERRIDE + HRESULT __stdcall GetMediaSink(IMFMediaSink **mediaSink) override { *mediaSink = m_sink; return S_OK; } - HRESULT __stdcall GetIdentifier(DWORD *identifier) Q_DECL_OVERRIDE + HRESULT __stdcall GetIdentifier(DWORD *identifier) override { *identifier = 0; return S_OK; } - HRESULT __stdcall GetMediaTypeHandler(IMFMediaTypeHandler **handler) Q_DECL_OVERRIDE + HRESULT __stdcall GetMediaTypeHandler(IMFMediaTypeHandler **handler) override { return QueryInterface(IID_PPV_ARGS(handler)); } - HRESULT __stdcall ProcessSample(IMFSample *sample) Q_DECL_OVERRIDE + HRESULT __stdcall ProcessSample(IMFSample *sample) override { ComPtr<IMFMediaBuffer> buffer; HRESULT hr = sample->GetBufferByIndex(0, &buffer); @@ -311,7 +311,7 @@ public: return hr; } - HRESULT __stdcall PlaceMarker(MFSTREAMSINK_MARKER_TYPE type, const PROPVARIANT *value, const PROPVARIANT *context) Q_DECL_OVERRIDE + HRESULT __stdcall PlaceMarker(MFSTREAMSINK_MARKER_TYPE type, const PROPVARIANT *value, const PROPVARIANT *context) override { Q_UNUSED(type); Q_UNUSED(value); @@ -319,14 +319,14 @@ public: return S_OK; } - HRESULT __stdcall Flush() Q_DECL_OVERRIDE + HRESULT __stdcall Flush() override { m_videoRenderer->discardBuffers(); m_pendingSamples.store(0); return S_OK; } - HRESULT __stdcall IsMediaTypeSupported(IMFMediaType *type, IMFMediaType **) Q_DECL_OVERRIDE + HRESULT __stdcall IsMediaTypeSupported(IMFMediaType *type, IMFMediaType **) override { HRESULT hr; GUID majorType; @@ -337,34 +337,34 @@ public: return S_OK; } - HRESULT __stdcall GetMediaTypeCount(DWORD *typeCount) Q_DECL_OVERRIDE + HRESULT __stdcall GetMediaTypeCount(DWORD *typeCount) override { *typeCount = 1; return S_OK; } - HRESULT __stdcall GetMediaTypeByIndex(DWORD index, IMFMediaType **type) Q_DECL_OVERRIDE + HRESULT __stdcall GetMediaTypeByIndex(DWORD index, IMFMediaType **type) override { if (index == 0) return m_type.CopyTo(type); return E_BOUNDS; } - HRESULT __stdcall SetCurrentMediaType(IMFMediaType *type) Q_DECL_OVERRIDE + HRESULT __stdcall SetCurrentMediaType(IMFMediaType *type) override { - if (FAILED(IsMediaTypeSupported(type, Q_NULLPTR))) + if (FAILED(IsMediaTypeSupported(type, nullptr))) return MF_E_INVALIDREQUEST; m_type = type; return S_OK; } - HRESULT __stdcall GetCurrentMediaType(IMFMediaType **type) Q_DECL_OVERRIDE + HRESULT __stdcall GetCurrentMediaType(IMFMediaType **type) override { return m_type.CopyTo(type); } - HRESULT __stdcall GetMajorType(GUID *majorType) Q_DECL_OVERRIDE + HRESULT __stdcall GetMajorType(GUID *majorType) override { return m_type->GetMajorType(majorType); } @@ -405,19 +405,19 @@ public: return m_stream->RequestSample(); } - HRESULT __stdcall SetProperties(Collections::IPropertySet *configuration) Q_DECL_OVERRIDE + HRESULT __stdcall SetProperties(Collections::IPropertySet *configuration) override { Q_UNUSED(configuration); return E_NOTIMPL; } - HRESULT __stdcall GetCharacteristics(DWORD *characteristics) Q_DECL_OVERRIDE + HRESULT __stdcall GetCharacteristics(DWORD *characteristics) override { *characteristics = MEDIASINK_FIXED_STREAMS | MEDIASINK_RATELESS; return S_OK; } - HRESULT __stdcall AddStreamSink(DWORD streamSinkIdentifier, IMFMediaType *mediaType, IMFStreamSink **streamSink) Q_DECL_OVERRIDE + HRESULT __stdcall AddStreamSink(DWORD streamSinkIdentifier, IMFMediaType *mediaType, IMFStreamSink **streamSink) override { Q_UNUSED(streamSinkIdentifier); Q_UNUSED(mediaType); @@ -425,33 +425,33 @@ public: return E_NOTIMPL; } - HRESULT __stdcall RemoveStreamSink(DWORD streamSinkIdentifier) Q_DECL_OVERRIDE + HRESULT __stdcall RemoveStreamSink(DWORD streamSinkIdentifier) override { Q_UNUSED(streamSinkIdentifier); return E_NOTIMPL; } - HRESULT __stdcall GetStreamSinkCount(DWORD *streamSinkCount) Q_DECL_OVERRIDE + HRESULT __stdcall GetStreamSinkCount(DWORD *streamSinkCount) override { *streamSinkCount = 1; return S_OK; } - HRESULT __stdcall GetStreamSinkByIndex(DWORD index, IMFStreamSink **streamSink) Q_DECL_OVERRIDE + HRESULT __stdcall GetStreamSinkByIndex(DWORD index, IMFStreamSink **streamSink) override { if (index == 0) return m_stream.CopyTo(streamSink); return MF_E_INVALIDINDEX; } - HRESULT __stdcall GetStreamSinkById(DWORD streamSinkIdentifier, IMFStreamSink **streamSink) Q_DECL_OVERRIDE + HRESULT __stdcall GetStreamSinkById(DWORD streamSinkIdentifier, IMFStreamSink **streamSink) override { // ID and index are always 0 HRESULT hr = GetStreamSinkByIndex(streamSinkIdentifier, streamSink); return hr == MF_E_INVALIDINDEX ? MF_E_INVALIDSTREAMNUMBER : hr; } - HRESULT __stdcall SetPresentationClock(IMFPresentationClock *presentationClock) Q_DECL_OVERRIDE + HRESULT __stdcall SetPresentationClock(IMFPresentationClock *presentationClock) override { HRESULT hr = S_OK; m_presentationClock = presentationClock; @@ -460,19 +460,19 @@ public: return hr; } - HRESULT __stdcall GetPresentationClock(IMFPresentationClock **presentationClock) Q_DECL_OVERRIDE + HRESULT __stdcall GetPresentationClock(IMFPresentationClock **presentationClock) override { return m_presentationClock.CopyTo(presentationClock); } - HRESULT __stdcall Shutdown() Q_DECL_OVERRIDE + HRESULT __stdcall Shutdown() override { m_stream->Flush(); scheduleSetActive(false); return m_presentationClock ? m_presentationClock->Stop() : S_OK; } - HRESULT __stdcall OnClockStart(MFTIME systemTime, LONGLONG clockStartOffset) Q_DECL_OVERRIDE + HRESULT __stdcall OnClockStart(MFTIME systemTime, LONGLONG clockStartOffset) override { Q_UNUSED(systemTime); Q_UNUSED(clockStartOffset); @@ -482,34 +482,34 @@ public: return S_OK; } - HRESULT __stdcall OnClockStop(MFTIME systemTime) Q_DECL_OVERRIDE + HRESULT __stdcall OnClockStop(MFTIME systemTime) override { Q_UNUSED(systemTime); scheduleSetActive(false); - return m_stream->QueueEvent(MEStreamSinkStopped, GUID_NULL, S_OK, Q_NULLPTR); + return m_stream->QueueEvent(MEStreamSinkStopped, GUID_NULL, S_OK, nullptr); } - HRESULT __stdcall OnClockPause(MFTIME systemTime) Q_DECL_OVERRIDE + HRESULT __stdcall OnClockPause(MFTIME systemTime) override { Q_UNUSED(systemTime); scheduleSetActive(false); - return m_stream->QueueEvent(MEStreamSinkPaused, GUID_NULL, S_OK, Q_NULLPTR); + return m_stream->QueueEvent(MEStreamSinkPaused, GUID_NULL, S_OK, nullptr); } - HRESULT __stdcall OnClockRestart(MFTIME systemTime) Q_DECL_OVERRIDE + HRESULT __stdcall OnClockRestart(MFTIME systemTime) override { Q_UNUSED(systemTime); scheduleSetActive(true); - return m_stream->QueueEvent(MEStreamSinkStarted, GUID_NULL, S_OK, Q_NULLPTR); + return m_stream->QueueEvent(MEStreamSinkStarted, GUID_NULL, S_OK, nullptr); } - HRESULT __stdcall OnClockSetRate(MFTIME systemTime, float rate) Q_DECL_OVERRIDE + HRESULT __stdcall OnClockSetRate(MFTIME systemTime, float rate) override { Q_UNUSED(systemTime); Q_UNUSED(rate); diff --git a/src/plugins/winrt/qwinrtcameracontrol.h b/src/plugins/winrt/qwinrtcameracontrol.h index 7ef67e957..c46921a9c 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.h +++ b/src/plugins/winrt/qwinrtcameracontrol.h @@ -81,16 +81,16 @@ public: explicit QWinRTCameraControl(QObject *parent = 0); ~QWinRTCameraControl(); - QCamera::State state() const Q_DECL_OVERRIDE; - void setState(QCamera::State state) Q_DECL_OVERRIDE; + QCamera::State state() const override; + void setState(QCamera::State state) override; - QCamera::Status status() const Q_DECL_OVERRIDE; + QCamera::Status status() const override; - QCamera::CaptureModes captureMode() const Q_DECL_OVERRIDE; - void setCaptureMode(QCamera::CaptureModes mode) Q_DECL_OVERRIDE; - bool isCaptureModeSupported(QCamera::CaptureModes mode) const Q_DECL_OVERRIDE; + QCamera::CaptureModes captureMode() const override; + void setCaptureMode(QCamera::CaptureModes mode) override; + bool isCaptureModeSupported(QCamera::CaptureModes mode) const override; - bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const Q_DECL_OVERRIDE; + bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; QVideoRendererControl *videoRenderer() const; QVideoDeviceSelectorControl *videoDeviceSelector() const; diff --git a/src/plugins/winrt/qwinrtcameraflashcontrol.h b/src/plugins/winrt/qwinrtcameraflashcontrol.h index 335329037..b9be69230 100644 --- a/src/plugins/winrt/qwinrtcameraflashcontrol.h +++ b/src/plugins/winrt/qwinrtcameraflashcontrol.h @@ -62,11 +62,11 @@ public: void initialize(Microsoft::WRL::ComPtr<ABI::Windows::Media::Devices::IAdvancedVideoCaptureDeviceController2> &controller); - QCameraExposure::FlashModes flashMode() const Q_DECL_OVERRIDE; - void setFlashMode(QCameraExposure::FlashModes mode) Q_DECL_OVERRIDE; - bool isFlashModeSupported(QCameraExposure::FlashModes mode) const Q_DECL_OVERRIDE; + QCameraExposure::FlashModes flashMode() const override; + void setFlashMode(QCameraExposure::FlashModes mode) override; + bool isFlashModeSupported(QCameraExposure::FlashModes mode) const override; - bool isFlashReady() const Q_DECL_OVERRIDE; + bool isFlashReady() const override; private: QScopedPointer<QWinRTCameraFlashControlPrivate> d_ptr; diff --git a/src/plugins/winrt/qwinrtcamerafocuscontrol.h b/src/plugins/winrt/qwinrtcamerafocuscontrol.h index 0a8c0afcf..fcfb84edc 100644 --- a/src/plugins/winrt/qwinrtcamerafocuscontrol.h +++ b/src/plugins/winrt/qwinrtcamerafocuscontrol.h @@ -51,15 +51,15 @@ class QWinRTCameraFocusControl : public QCameraFocusControl public: explicit QWinRTCameraFocusControl(QWinRTCameraControl *parent); - QCameraFocus::FocusModes focusMode() const Q_DECL_OVERRIDE; - void setFocusMode(QCameraFocus::FocusModes mode) Q_DECL_OVERRIDE; - bool isFocusModeSupported(QCameraFocus::FocusModes mode) const Q_DECL_OVERRIDE; - QCameraFocus::FocusPointMode focusPointMode() const Q_DECL_OVERRIDE; - void setFocusPointMode(QCameraFocus::FocusPointMode mode) Q_DECL_OVERRIDE; - bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const Q_DECL_OVERRIDE; - QPointF customFocusPoint() const Q_DECL_OVERRIDE; - void setCustomFocusPoint(const QPointF &point) Q_DECL_OVERRIDE; - QCameraFocusZoneList focusZones() const Q_DECL_OVERRIDE; + QCameraFocus::FocusModes focusMode() const override; + void setFocusMode(QCameraFocus::FocusModes mode) override; + bool isFocusModeSupported(QCameraFocus::FocusModes mode) const override; + QCameraFocus::FocusPointMode focusPointMode() const override; + void setFocusPointMode(QCameraFocus::FocusPointMode mode) override; + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const override; + QPointF customFocusPoint() const override; + void setCustomFocusPoint(const QPointF &point) override; + QCameraFocusZoneList focusZones() const override; void setSupportedFocusMode(QCameraFocus::FocusModes flag); void setSupportedFocusPointMode(const QSet<QCameraFocus::FocusPointMode> &supportedFocusPointModes); diff --git a/src/plugins/winrt/qwinrtcameraimagecapturecontrol.h b/src/plugins/winrt/qwinrtcameraimagecapturecontrol.h index 3820bfaf1..ce1404e1c 100644 --- a/src/plugins/winrt/qwinrtcameraimagecapturecontrol.h +++ b/src/plugins/winrt/qwinrtcameraimagecapturecontrol.h @@ -64,13 +64,13 @@ class QWinRTCameraImageCaptureControl : public QCameraImageCaptureControl public: explicit QWinRTCameraImageCaptureControl(QWinRTCameraControl *parent); - bool isReadyForCapture() const Q_DECL_OVERRIDE; + bool isReadyForCapture() const override; - QCameraImageCapture::DriveMode driveMode() const Q_DECL_OVERRIDE; - void setDriveMode(QCameraImageCapture::DriveMode mode) Q_DECL_OVERRIDE; + QCameraImageCapture::DriveMode driveMode() const override; + void setDriveMode(QCameraImageCapture::DriveMode mode) override; - int capture(const QString &fileName) Q_DECL_OVERRIDE; - void cancelCapture() Q_DECL_OVERRIDE; + int capture(const QString &fileName) override; + void cancelCapture() override; private slots: void onCameraStateChanged(QCamera::State state); diff --git a/src/plugins/winrt/qwinrtcamerainfocontrol.h b/src/plugins/winrt/qwinrtcamerainfocontrol.h index b97025dcb..031ed2720 100644 --- a/src/plugins/winrt/qwinrtcamerainfocontrol.h +++ b/src/plugins/winrt/qwinrtcamerainfocontrol.h @@ -50,8 +50,8 @@ class QWinRTCameraInfoControl : public QCameraInfoControl public: explicit QWinRTCameraInfoControl(QObject *parent = 0); - QCamera::Position cameraPosition(const QString &deviceName) const Q_DECL_OVERRIDE; - int cameraOrientation(const QString &deviceName) const Q_DECL_OVERRIDE; + QCamera::Position cameraPosition(const QString &deviceName) const override; + int cameraOrientation(const QString &deviceName) const override; }; QT_END_NAMESPACE diff --git a/src/plugins/winrt/qwinrtcameralockscontrol.h b/src/plugins/winrt/qwinrtcameralockscontrol.h index 873c355b0..61015fdaa 100644 --- a/src/plugins/winrt/qwinrtcameralockscontrol.h +++ b/src/plugins/winrt/qwinrtcameralockscontrol.h @@ -51,10 +51,10 @@ class QWinRTCameraLocksControl : public QCameraLocksControl public: explicit QWinRTCameraLocksControl(QObject *parent); - QCamera::LockTypes supportedLocks() const Q_DECL_OVERRIDE; - QCamera::LockStatus lockStatus(QCamera::LockType lock) const Q_DECL_OVERRIDE; - void searchAndLock(QCamera::LockTypes locks) Q_DECL_OVERRIDE; - void unlock(QCamera::LockTypes locks) Q_DECL_OVERRIDE; + QCamera::LockTypes supportedLocks() const override; + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; void initialize(); private: diff --git a/src/plugins/winrt/qwinrtcameraservice.h b/src/plugins/winrt/qwinrtcameraservice.h index beae2a140..6fa4d5fce 100644 --- a/src/plugins/winrt/qwinrtcameraservice.h +++ b/src/plugins/winrt/qwinrtcameraservice.h @@ -51,8 +51,8 @@ class QWinRTCameraService : public QMediaService public: explicit QWinRTCameraService(QObject *parent = 0); - QMediaControl *requestControl(const char *name) Q_DECL_OVERRIDE; - void releaseControl(QMediaControl *control) Q_DECL_OVERRIDE; + QMediaControl *requestControl(const char *name) override; + void releaseControl(QMediaControl *control) override; private: QScopedPointer<QWinRTCameraServicePrivate> d_ptr; diff --git a/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp b/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp index 5f7810060..0a5ae46fa 100644 --- a/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp +++ b/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp @@ -89,12 +89,12 @@ public: unmap(); } - MapMode mapMode() const Q_DECL_OVERRIDE + MapMode mapMode() const override { return currentMode; } - uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) Q_DECL_OVERRIDE + uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) override { if (currentMode != NotMapped || mode == NotMapped || control && control->state() != QCamera::ActiveState) return nullptr; @@ -113,7 +113,7 @@ public: return bytes; } - void unmap() Q_DECL_OVERRIDE + void unmap() override { if (currentMode == NotMapped) return; diff --git a/src/plugins/winrt/qwinrtcameravideorenderercontrol.h b/src/plugins/winrt/qwinrtcameravideorenderercontrol.h index ec6e0e0e4..eeda83d52 100644 --- a/src/plugins/winrt/qwinrtcameravideorenderercontrol.h +++ b/src/plugins/winrt/qwinrtcameravideorenderercontrol.h @@ -58,8 +58,8 @@ public: explicit QWinRTCameraVideoRendererControl(const QSize &size, QObject *parent); ~QWinRTCameraVideoRendererControl(); - bool render(ID3D11Texture2D *texture) Q_DECL_OVERRIDE; - bool dequeueFrame(QVideoFrame *frame) Q_DECL_OVERRIDE; + bool render(ID3D11Texture2D *texture) override; + bool dequeueFrame(QVideoFrame *frame) override; void queueBuffer(IMF2DBuffer *buffer); void discardBuffers(); void incrementProbe(); diff --git a/src/plugins/winrt/qwinrtimageencodercontrol.h b/src/plugins/winrt/qwinrtimageencodercontrol.h index 7b0781798..dbeac2384 100644 --- a/src/plugins/winrt/qwinrtimageencodercontrol.h +++ b/src/plugins/winrt/qwinrtimageencodercontrol.h @@ -51,11 +51,11 @@ class QWinRTImageEncoderControl : public QImageEncoderControl public: explicit QWinRTImageEncoderControl(QObject *parent = 0); - QStringList supportedImageCodecs() const Q_DECL_OVERRIDE; - QString imageCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE; - QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE; - QImageEncoderSettings imageSettings() const Q_DECL_OVERRIDE; - void setImageSettings(const QImageEncoderSettings &settings) Q_DECL_OVERRIDE; + QStringList supportedImageCodecs() const override; + QString imageCodecDescription(const QString &codecName) const override; + QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const override; + QImageEncoderSettings imageSettings() const override; + void setImageSettings(const QImageEncoderSettings &settings) override; void setSupportedResolutionsList(const QList<QSize> resolution); void applySettings(); diff --git a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp index 9fd48fd76..de6b3418e 100644 --- a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp +++ b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp @@ -541,7 +541,7 @@ QWinRTMediaPlayerControl::QWinRTMediaPlayerControl(IMFMediaEngineClassFactory *f d->seekable = false; d->hasAudio = false; d->hasVideo = false; - d->videoRenderer = Q_NULLPTR; + d->videoRenderer = nullptr; d->notifier = Make<MediaEngineNotify>(this, d); HRESULT hr; @@ -796,7 +796,7 @@ void QWinRTMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *s } // Let Windows handle all other URLs - hr = d->engine->SetSource(Q_NULLPTR); // Resets the byte stream + hr = d->engine->SetSource(nullptr); // Resets the byte stream Q_ASSERT_SUCCEEDED(hr); hr = d->engine->Load(); if (FAILED(hr)) diff --git a/src/plugins/winrt/qwinrtmediaplayercontrol.h b/src/plugins/winrt/qwinrtmediaplayercontrol.h index 3d4154093..1e854f5bb 100644 --- a/src/plugins/winrt/qwinrtmediaplayercontrol.h +++ b/src/plugins/winrt/qwinrtmediaplayercontrol.h @@ -56,39 +56,39 @@ public: QWinRTMediaPlayerControl(IMFMediaEngineClassFactory *factory, QObject *parent = 0); ~QWinRTMediaPlayerControl(); - QMediaPlayer::State state() const Q_DECL_OVERRIDE; - QMediaPlayer::MediaStatus mediaStatus() const Q_DECL_OVERRIDE; + QMediaPlayer::State state() const override; + QMediaPlayer::MediaStatus mediaStatus() const override; - qint64 duration() const Q_DECL_OVERRIDE; + qint64 duration() const override; - qint64 position() const Q_DECL_OVERRIDE; - void setPosition(qint64 position) Q_DECL_OVERRIDE; + qint64 position() const override; + void setPosition(qint64 position) override; - int volume() const Q_DECL_OVERRIDE; - void setVolume(int volume) Q_DECL_OVERRIDE; + int volume() const override; + void setVolume(int volume) override; - bool isMuted() const Q_DECL_OVERRIDE; - void setMuted(bool muted) Q_DECL_OVERRIDE; + bool isMuted() const override; + void setMuted(bool muted) override; - int bufferStatus() const Q_DECL_OVERRIDE; + int bufferStatus() const override; - bool isAudioAvailable() const Q_DECL_OVERRIDE; - bool isVideoAvailable() const Q_DECL_OVERRIDE; + bool isAudioAvailable() const override; + bool isVideoAvailable() const override; - bool isSeekable() const Q_DECL_OVERRIDE; + bool isSeekable() const override; - QMediaTimeRange availablePlaybackRanges() const Q_DECL_OVERRIDE; + QMediaTimeRange availablePlaybackRanges() const override; - qreal playbackRate() const Q_DECL_OVERRIDE; - void setPlaybackRate(qreal rate) Q_DECL_OVERRIDE; + qreal playbackRate() const override; + void setPlaybackRate(qreal rate) override; - QMediaContent media() const Q_DECL_OVERRIDE; - const QIODevice *mediaStream() const Q_DECL_OVERRIDE; - void setMedia(const QMediaContent &media, QIODevice *stream) Q_DECL_OVERRIDE; + QMediaContent media() const override; + const QIODevice *mediaStream() const override; + void setMedia(const QMediaContent &media, QIODevice *stream) override; - void play() Q_DECL_OVERRIDE; - void pause() Q_DECL_OVERRIDE; - void stop() Q_DECL_OVERRIDE; + void play() override; + void pause() override; + void stop() override; QVideoRendererControl *videoRendererControl(); diff --git a/src/plugins/winrt/qwinrtmediaplayerservice.cpp b/src/plugins/winrt/qwinrtmediaplayerservice.cpp index 58149fd33..3253ed188 100644 --- a/src/plugins/winrt/qwinrtmediaplayerservice.cpp +++ b/src/plugins/winrt/qwinrtmediaplayerservice.cpp @@ -65,7 +65,7 @@ QWinRTMediaPlayerService::QWinRTMediaPlayerService(QObject *parent) { Q_D(QWinRTMediaPlayerService); - d->player = Q_NULLPTR; + d->player = nullptr; HRESULT hr = MFStartup(MF_VERSION); Q_ASSERT(SUCCEEDED(hr)); @@ -94,11 +94,11 @@ QMediaControl *QWinRTMediaPlayerService::requestControl(const char *name) } if (qstrcmp(name, QVideoRendererControl_iid) == 0) { if (!d->player) - return Q_NULLPTR; + return nullptr; return d->player->videoRendererControl(); } - return Q_NULLPTR; + return nullptr; } void QWinRTMediaPlayerService::releaseControl(QMediaControl *control) diff --git a/src/plugins/winrt/qwinrtplayerrenderercontrol.h b/src/plugins/winrt/qwinrtplayerrenderercontrol.h index fb67d0c8c..70f3c4af2 100644 --- a/src/plugins/winrt/qwinrtplayerrenderercontrol.h +++ b/src/plugins/winrt/qwinrtplayerrenderercontrol.h @@ -58,7 +58,7 @@ public: bool ensureReady(); - bool render(ID3D11Texture2D *texture) Q_DECL_OVERRIDE; + bool render(ID3D11Texture2D *texture) override; private: QScopedPointer<QWinRTPlayerRendererControlPrivate> d_ptr; diff --git a/src/plugins/winrt/qwinrtserviceplugin.cpp b/src/plugins/winrt/qwinrtserviceplugin.cpp index d08a39a5e..286789e4c 100644 --- a/src/plugins/winrt/qwinrtserviceplugin.cpp +++ b/src/plugins/winrt/qwinrtserviceplugin.cpp @@ -55,7 +55,7 @@ QMediaService *QWinRTServicePlugin::create(QString const &key) if (key == QLatin1String(Q_MEDIASERVICE_CAMERA)) return new QWinRTCameraService(this); - return Q_NULLPTR; + return nullptr; } void QWinRTServicePlugin::release(QMediaService *service) diff --git a/src/plugins/winrt/qwinrtserviceplugin.h b/src/plugins/winrt/qwinrtserviceplugin.h index d6600aa54..30a76022d 100644 --- a/src/plugins/winrt/qwinrtserviceplugin.h +++ b/src/plugins/winrt/qwinrtserviceplugin.h @@ -62,13 +62,13 @@ public: QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const; - QCamera::Position cameraPosition(const QByteArray &device) const Q_DECL_OVERRIDE; - int cameraOrientation(const QByteArray &device) const Q_DECL_OVERRIDE; + QCamera::Position cameraPosition(const QByteArray &device) const override; + int cameraOrientation(const QByteArray &device) const override; - QList<QByteArray> devices(const QByteArray &service) const Q_DECL_OVERRIDE; - QString deviceDescription(const QByteArray &service, const QByteArray &device) Q_DECL_OVERRIDE; + QList<QByteArray> devices(const QByteArray &service) const override; + QString deviceDescription(const QByteArray &service, const QByteArray &device) override; - QByteArray defaultDevice(const QByteArray &service) const Q_DECL_OVERRIDE; + QByteArray defaultDevice(const QByteArray &service) const override; }; QT_END_NAMESPACE diff --git a/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.cpp b/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.cpp index abe10f9a4..41d4693cb 100644 --- a/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.cpp +++ b/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.cpp @@ -124,7 +124,7 @@ struct QWinRTVideoDeviceSelectorControlGlobal IDeviceInformation *device; hr = deviceList->GetAt(i, &device); Q_ASSERT_SUCCEEDED(hr); - onDeviceAdded(Q_NULLPTR, device); + onDeviceAdded(nullptr, device); } // If there is no default device provided by the API, choose the first one diff --git a/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.h b/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.h index 36f00656c..3beb9782a 100644 --- a/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.h +++ b/src/plugins/winrt/qwinrtvideodeviceselectorcontrol.h @@ -65,13 +65,13 @@ public: explicit QWinRTVideoDeviceSelectorControl(QObject *parent = 0); ~QWinRTVideoDeviceSelectorControl(); - int deviceCount() const Q_DECL_OVERRIDE; + int deviceCount() const override; - QString deviceName(int index) const Q_DECL_OVERRIDE; - QString deviceDescription(int index) const Q_DECL_OVERRIDE; + QString deviceName(int index) const override; + QString deviceDescription(int index) const override; - int defaultDevice() const Q_DECL_OVERRIDE; - int selectedDevice() const Q_DECL_OVERRIDE; + int defaultDevice() const override; + int selectedDevice() const override; static QCamera::Position cameraPosition(const QString &deviceName); static int cameraOrientation(const QString &deviceName); @@ -80,7 +80,7 @@ public: static QByteArray defaultDeviceName(); public slots: - void setSelectedDevice(int index) Q_DECL_OVERRIDE; + void setSelectedDevice(int index) override; private: QScopedPointer<QWinRTVideoDeviceSelectorControlPrivate> d_ptr; diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp index 0cb6659ca..c51aec088 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp @@ -130,7 +130,7 @@ class FilterRunnableDeleter : public QRunnable { public: FilterRunnableDeleter(const QList<QVideoFilterRunnable *> &runnables) : m_runnables(runnables) { } - void run() Q_DECL_OVERRIDE { + void run() override { for (QVideoFilterRunnable *runnable : qAsConst(m_runnables)) delete runnable; } diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h index c84612960..4f1a90c8b 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h @@ -74,25 +74,25 @@ public: QDeclarativeVideoRendererBackend(QDeclarativeVideoOutput *parent); ~QDeclarativeVideoRendererBackend(); - bool init(QMediaService *service) Q_DECL_OVERRIDE; - void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) Q_DECL_OVERRIDE; - void releaseSource() Q_DECL_OVERRIDE; - void releaseControl() Q_DECL_OVERRIDE; - QSize nativeSize() const Q_DECL_OVERRIDE; - void updateGeometry() Q_DECL_OVERRIDE; - QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) Q_DECL_OVERRIDE; - QAbstractVideoSurface *videoSurface() const Q_DECL_OVERRIDE; - QRectF adjustedViewport() const Q_DECL_OVERRIDE; + bool init(QMediaService *service) override; + void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) override; + void releaseSource() override; + void releaseControl() override; + QSize nativeSize() const override; + void updateGeometry() override; + QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override; + QAbstractVideoSurface *videoSurface() const override; + QRectF adjustedViewport() const override; QOpenGLContext *glContext() const; friend class QSGVideoItemSurface; void present(const QVideoFrame &frame); void stop(); - void appendFilter(QAbstractVideoFilter *filter) Q_DECL_OVERRIDE; - void clearFilters() Q_DECL_OVERRIDE; - void releaseResources() Q_DECL_OVERRIDE; - void invalidateSceneGraph() Q_DECL_OVERRIDE; + void appendFilter(QAbstractVideoFilter *filter) override; + void clearFilters() override; + void releaseResources() override; + void invalidateSceneGraph() override; private: void scheduleDeleteFilterResources(); diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h index 942cc18d9..eb1814b07 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h @@ -63,15 +63,15 @@ public: QDeclarativeVideoWindowBackend(QDeclarativeVideoOutput *parent); ~QDeclarativeVideoWindowBackend(); - bool init(QMediaService *service) Q_DECL_OVERRIDE; - void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) Q_DECL_OVERRIDE; - void releaseSource() Q_DECL_OVERRIDE; - void releaseControl() Q_DECL_OVERRIDE; - QSize nativeSize() const Q_DECL_OVERRIDE; - void updateGeometry() Q_DECL_OVERRIDE; - QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) Q_DECL_OVERRIDE; - QAbstractVideoSurface *videoSurface() const Q_DECL_OVERRIDE; - QRectF adjustedViewport() const Q_DECL_OVERRIDE; + bool init(QMediaService *service) override; + void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) override; + void releaseSource() override; + void releaseControl() override; + QSize nativeSize() const override; + void updateGeometry() override; + QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override; + QAbstractVideoSurface *videoSurface() const override; + QRectF adjustedViewport() const override; private: QPointer<QVideoWindowControl> m_videoWindowControl; diff --git a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp index b04c6b38b..9eff9dbd6 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp @@ -120,9 +120,9 @@ public: setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/uyvyvideo.frag")); } - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) Q_DECL_OVERRIDE; + void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - char const *const *attributeNames() const Q_DECL_OVERRIDE { + char const *const *attributeNames() const override { static const char *names[] = { "qt_VertexPosition", "qt_VertexTexCoord", @@ -132,7 +132,7 @@ public: } protected: - void initialize() Q_DECL_OVERRIDE { + void initialize() override { m_id_matrix = program()->uniformLocation("qt_Matrix"); m_id_yTexture = program()->uniformLocation("yTexture"); m_id_uvTexture = program()->uniformLocation("uvTexture"); diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp index 3deb534eb..b68bc030a 100644 --- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp +++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp @@ -1258,7 +1258,7 @@ void tst_QMediaPlayerBackend::playlistObject() QCOMPARE(errorSpy.count(), 0); QCOMPARE(mediaStatusSpy.count(), 7); // 2 x (LoadingMedia -> BufferedMedia -> EndOfMedia) + NoMedia - player.setPlaylist(Q_NULLPTR); + player.setPlaylist(nullptr); mediaSpy.clear(); currentMediaSpy.clear(); @@ -1283,7 +1283,7 @@ void tst_QMediaPlayerBackend::playlistObject() QCOMPARE(errorSpy.count(), 0); QCOMPARE(mediaStatusSpy.count(), 13); // 4 x (LoadingMedia -> BufferedMedia -> EndOfMedia) + NoMedia - player.setPlaylist(Q_NULLPTR); + player.setPlaylist(nullptr); mediaSpy.clear(); currentMediaSpy.clear(); @@ -1307,7 +1307,7 @@ void tst_QMediaPlayerBackend::playlistObject() QCOMPARE(errorSpy.count(), 1); QCOMPARE(mediaStatusSpy.count(), 6); // Loading -> Invalid -> Loading -> Buffered -> EndOfMedia -> NoMedia - player.setPlaylist(Q_NULLPTR); + player.setPlaylist(nullptr); mediaSpy.clear(); currentMediaSpy.clear(); diff --git a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp index 5ff557ef6..b270e93eb 100644 --- a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp +++ b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp @@ -74,6 +74,13 @@ private slots: void error(); void loops(); void audioRole(); + void customAudioRole(); + +private: + void enumerator(const QMetaObject *object, const char *name, QMetaEnum *result); + QMetaEnum enumerator(const QMetaObject *object, const char *name); + void keyToValue(const QMetaEnum &enumeration, const char *key, int *result); + int keyToValue(const QMetaEnum &enumeration, const char *key); }; Q_DECLARE_METATYPE(QDeclarativeAudio::Error); @@ -1051,6 +1058,149 @@ void tst_QDeclarativeAudio::audioRole() } } +void tst_QDeclarativeAudio::customAudioRole() +{ + MockMediaPlayerService mockService; + MockMediaServiceProvider mockProvider(&mockService); + QMediaServiceProvider::setDefaultServiceProvider(&mockProvider); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData("import QtQuick 2.0 \n import QtMultimedia 5.11 \n Audio { }", QUrl()); + + { + mockService.setHasCustomAudioRole(false); + QObject *audio = component.create(); + QVERIFY(audio); + + QMetaEnum audioRoleEnum = enumerator(audio->metaObject(), "AudioRole"); + int AudioRole_UnknownRoleValue = keyToValue(audioRoleEnum, "UnknownRole"); + QVERIFY(!QTest::currentTestFailed()); + + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + + QSignalSpy spyRole(audio, SIGNAL(audioRoleChanged())); + QSignalSpy spyCustomRole(audio, SIGNAL(customAudioRoleChanged())); + audio->setProperty("customAudioRole", QStringLiteral("customRole")); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_UnknownRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 0); + } + + { + mockService.reset(); + mockService.setHasAudioRole(false); + + QObject *audio = component.create(); + QVERIFY(audio); + + QMetaEnum audioRoleEnum = enumerator(audio->metaObject(), "AudioRole"); + int AudioRole_UnknownRoleValue = keyToValue(audioRoleEnum, "UnknownRole"); + QVERIFY(!QTest::currentTestFailed()); + + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + + QSignalSpy spyRole(audio, SIGNAL(audioRoleChanged())); + QSignalSpy spyCustomRole(audio, SIGNAL(customAudioRoleChanged())); + audio->setProperty("customAudioRole", QStringLiteral("customRole")); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_UnknownRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 0); + } + + { + mockService.reset(); + + QObject *audio = component.create(); + QVERIFY(audio); + + QMetaEnum audioRoleEnum = enumerator(audio->metaObject(), "AudioRole"); + int AudioRole_UnknownRoleValue = keyToValue(audioRoleEnum, "UnknownRole"); + int AudioRole_CustomRoleValue = keyToValue(audioRoleEnum, "CustomRole"); + int AudioRole_MusicRoleValue = keyToValue(audioRoleEnum, "MusicRole"); + QVERIFY(!QTest::currentTestFailed()); + + QSignalSpy spyRole(audio, SIGNAL(audioRoleChanged())); + QSignalSpy spyCustomRole(audio, SIGNAL(customAudioRoleChanged())); + + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_UnknownRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + + QString customRole(QStringLiteral("customRole")); + audio->setProperty("customAudioRole", customRole); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_CustomRoleValue); + QCOMPARE(audio->property("customAudioRole").toString(), customRole); + QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::CustomRole); + QCOMPARE(mockService.mockCustomAudioRoleControl->customAudioRole(), customRole); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(spyCustomRole.count(), 1); + + spyRole.clear(); + spyCustomRole.clear(); + + QString customRole2(QStringLiteral("customRole2")); + audio->setProperty("customAudioRole", customRole2); + QCOMPARE(audio->property("customAudioRole").toString(), customRole2); + QCOMPARE(mockService.mockCustomAudioRoleControl->customAudioRole(), customRole2); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 1); + + spyRole.clear(); + spyCustomRole.clear(); + + audio->setProperty("audioRole", AudioRole_MusicRoleValue); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_MusicRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::MusicRole); + QVERIFY(mockService.mockCustomAudioRoleControl->customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(spyCustomRole.count(), 1); + + spyRole.clear(); + spyCustomRole.clear(); + + audio->setProperty("audioRole", AudioRole_CustomRoleValue); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_CustomRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::CustomRole); + QVERIFY(mockService.mockCustomAudioRoleControl->customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(spyCustomRole.count(), 0); + } +} + +void tst_QDeclarativeAudio::enumerator(const QMetaObject *object, + const char *name, + QMetaEnum *result) +{ + int index = object->indexOfEnumerator(name); + QVERIFY(index >= 0); + *result = object->enumerator(index); +} + +QMetaEnum tst_QDeclarativeAudio::enumerator(const QMetaObject *object, const char *name) +{ + QMetaEnum result; + enumerator(object, name, &result); + return result; +} + +void tst_QDeclarativeAudio::keyToValue(const QMetaEnum &enumeration, const char *key, int *result) +{ + bool ok = false; + *result = enumeration.keyToValue(key, &ok); + QVERIFY(ok); +} + +int tst_QDeclarativeAudio::keyToValue(const QMetaEnum &enumeration, const char *key) +{ + int result; + keyToValue(enumeration, key, &result); + return result; +} + QTEST_MAIN(tst_QDeclarativeAudio) #include "tst_qdeclarativeaudio.moc" diff --git a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp index a529517d3..94d297ad0 100644 --- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp +++ b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp @@ -133,6 +133,7 @@ private slots: void testQrc_data(); void testQrc(); void testAudioRole(); + void testCustomAudioRole(); private: void setupCommonTestData(); @@ -1336,5 +1337,99 @@ void tst_QMediaPlayer::testAudioRole() } } +void tst_QMediaPlayer::testCustomAudioRole() +{ + { + mockService->setHasCustomAudioRole(false); + QMediaPlayer player; + + QVERIFY(player.customAudioRole().isEmpty()); + QVERIFY(player.supportedCustomAudioRoles().isEmpty()); + + QSignalSpy spyRole(&player, SIGNAL(audioRoleChanged(QAudio::Role))); + QSignalSpy spyCustomRole(&player, SIGNAL(customAudioRoleChanged(const QString &))); + player.setCustomAudioRole(QStringLiteral("customRole")); + QCOMPARE(player.audioRole(), QAudio::UnknownRole); + QVERIFY(player.customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 0); + } + + { + mockService->reset(); + mockService->setHasAudioRole(false); + QMediaPlayer player; + + QVERIFY(player.customAudioRole().isEmpty()); + QVERIFY(player.supportedCustomAudioRoles().isEmpty()); + + QSignalSpy spyRole(&player, SIGNAL(audioRoleChanged(QAudio::Role))); + QSignalSpy spyCustomRole(&player, SIGNAL(customAudioRoleChanged(const QString &))); + player.setCustomAudioRole(QStringLiteral("customRole")); + QCOMPARE(player.audioRole(), QAudio::UnknownRole); + QVERIFY(player.customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 0); + } + + { + mockService->reset(); + QMediaPlayer player; + QSignalSpy spyRole(&player, SIGNAL(audioRoleChanged(QAudio::Role))); + QSignalSpy spyCustomRole(&player, SIGNAL(customAudioRoleChanged(const QString &))); + + QCOMPARE(player.audioRole(), QAudio::UnknownRole); + QVERIFY(player.customAudioRole().isEmpty()); + QVERIFY(!player.supportedCustomAudioRoles().isEmpty()); + + QString customRole(QStringLiteral("customRole")); + player.setCustomAudioRole(customRole); + QCOMPARE(player.audioRole(), QAudio::CustomRole); + QCOMPARE(player.customAudioRole(), customRole); + QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::CustomRole); + QCOMPARE(mockService->mockCustomAudioRoleControl->customAudioRole(), customRole); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(qvariant_cast<QAudio::Role>(spyRole.last().value(0)), QAudio::CustomRole); + QCOMPARE(spyCustomRole.count(), 1); + QCOMPARE(qvariant_cast<QString>(spyCustomRole.last().value(0)), customRole); + + spyRole.clear(); + spyCustomRole.clear(); + + QString customRole2(QStringLiteral("customRole2")); + player.setProperty("customAudioRole", qVariantFromValue(customRole2)); + QCOMPARE(qvariant_cast<QString>(player.property("customAudioRole")), customRole2); + QCOMPARE(mockService->mockCustomAudioRoleControl->customAudioRole(), customRole2); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 1); + QCOMPARE(qvariant_cast<QString>(spyCustomRole.last().value(0)), customRole2); + + spyRole.clear(); + spyCustomRole.clear(); + + player.setAudioRole(QAudio::MusicRole); + QCOMPARE(player.audioRole(), QAudio::MusicRole); + QVERIFY(player.customAudioRole().isEmpty()); + QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::MusicRole); + QVERIFY(mockService->mockCustomAudioRoleControl->customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(qvariant_cast<QAudio::Role>(spyRole.last().value(0)), QAudio::MusicRole); + QCOMPARE(spyCustomRole.count(), 1); + QVERIFY(qvariant_cast<QString>(spyCustomRole.last().value(0)).isEmpty()); + + spyRole.clear(); + spyCustomRole.clear(); + + player.setAudioRole(QAudio::CustomRole); + QCOMPARE(player.audioRole(), QAudio::CustomRole); + QVERIFY(player.customAudioRole().isEmpty()); + QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::CustomRole); + QVERIFY(mockService->mockCustomAudioRoleControl->customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(qvariant_cast<QAudio::Role>(spyRole.last().value(0)), QAudio::CustomRole); + QCOMPARE(spyCustomRole.count(), 0); + } +} + QTEST_GUILESS_MAIN(tst_QMediaPlayer) #include "tst_qmediaplayer.moc" diff --git a/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h b/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h index 299b8cf4c..06e914ba1 100644 --- a/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h +++ b/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h @@ -64,4 +64,3 @@ public: }; #endif // MOCKAUDIOROLECONTROL_H - diff --git a/tests/auto/unit/qmultimedia_common/mockcustomaudiorolecontrol.h b/tests/auto/unit/qmultimedia_common/mockcustomaudiorolecontrol.h new file mode 100644 index 000000000..f4031bb04 --- /dev/null +++ b/tests/auto/unit/qmultimedia_common/mockcustomaudiorolecontrol.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 QNX Software Systems. All rights reserved. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MOCKCUSTOMAUDIOROLECONTROL_H +#define MOCKCUSTOMAUDIOROLECONTROL_H + +#include <qcustomaudiorolecontrol.h> + +class MockCustomAudioRoleControl : public QCustomAudioRoleControl +{ + friend class MockMediaPlayerService; + +public: + MockCustomAudioRoleControl() + : QCustomAudioRoleControl() + , m_customAudioRole(QAudio::UnknownRole) + { + } + + QString customAudioRole() const + { + return m_customAudioRole; + } + + void setCustomAudioRole(const QString &role) + { + if (role != m_customAudioRole) + emit customAudioRoleChanged(m_customAudioRole = role); + } + + QStringList supportedCustomAudioRoles() const + { + return QStringList() << QStringLiteral("customRole") + << QStringLiteral("customRole2"); + } + + QString m_customAudioRole; +}; + +#endif // MOCKCUSTOMAUDIOROLECONTROL_H diff --git a/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h b/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h index 46b81899c..068bb84a9 100644 --- a/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h +++ b/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h @@ -38,6 +38,7 @@ #include "mockvideoprobecontrol.h" #include "mockvideowindowcontrol.h" #include "mockaudiorolecontrol.h" +#include "mockcustomaudiorolecontrol.h" class MockMediaPlayerService : public QMediaService { @@ -48,6 +49,7 @@ public: { mockControl = new MockMediaPlayerControl; mockAudioRoleControl = new MockAudioRoleControl; + mockCustomAudioRoleControl = new MockCustomAudioRoleControl; mockStreamsControl = new MockStreamsControl; mockNetworkControl = new MockNetworkAccessControl; rendererControl = new MockVideoRendererControl; @@ -56,12 +58,14 @@ public: windowControl = new MockVideoWindowControl; windowRef = 0; enableAudioRole = true; + enableCustomAudioRole = true; } ~MockMediaPlayerService() { delete mockControl; delete mockAudioRoleControl; + delete mockCustomAudioRoleControl; delete mockStreamsControl; delete mockNetworkControl; delete rendererControl; @@ -88,6 +92,8 @@ public: } } else if (enableAudioRole && qstrcmp(iid, QAudioRoleControl_iid) == 0) { return mockAudioRoleControl; + } else if (enableCustomAudioRole && qstrcmp(iid, QCustomAudioRoleControl_iid) == 0) { + return mockCustomAudioRoleControl; } if (qstrcmp(iid, QMediaNetworkAccessControl_iid) == 0) @@ -127,6 +133,7 @@ public: void selectCurrentConfiguration(QNetworkConfiguration config) { mockNetworkControl->setCurrentConfiguration(config); } void setHasAudioRole(bool enable) { enableAudioRole = enable; } + void setHasCustomAudioRole(bool enable) { enableCustomAudioRole = enable; } void reset() { @@ -148,6 +155,8 @@ public: enableAudioRole = true; mockAudioRoleControl->m_audioRole = QAudio::UnknownRole; + enableCustomAudioRole = true; + mockCustomAudioRoleControl->m_customAudioRole.clear(); mockNetworkControl->_current = QNetworkConfiguration(); mockNetworkControl->_configurations = QList<QNetworkConfiguration>(); @@ -155,6 +164,7 @@ public: MockMediaPlayerControl *mockControl; MockAudioRoleControl *mockAudioRoleControl; + MockCustomAudioRoleControl *mockCustomAudioRoleControl; MockStreamsControl *mockStreamsControl; MockNetworkAccessControl *mockNetworkControl; MockVideoRendererControl *rendererControl; @@ -163,6 +173,7 @@ public: int windowRef; int rendererRef; bool enableAudioRole; + bool enableCustomAudioRole; }; diff --git a/tests/auto/unit/qmultimedia_common/mockplayer.pri b/tests/auto/unit/qmultimedia_common/mockplayer.pri index c43fb31e5..93cdbf3d8 100644 --- a/tests/auto/unit/qmultimedia_common/mockplayer.pri +++ b/tests/auto/unit/qmultimedia_common/mockplayer.pri @@ -9,6 +9,7 @@ HEADERS *= \ ../qmultimedia_common/mockmediastreamscontrol.h \ ../qmultimedia_common/mockmedianetworkaccesscontrol.h \ ../qmultimedia_common/mockvideoprobecontrol.h \ - ../qmultimedia_common/mockaudiorolecontrol.h + ../qmultimedia_common/mockaudiorolecontrol.h \ + ../qmultimedia_common/mockcustomaudiorolecontrol.h include(mockvideo.pri) |