summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/alsa/qalsaaudiooutput.cpp3
-rw-r--r--src/plugins/alsa/qalsaplugin.h10
-rw-r--r--src/plugins/android/jar/bundledjar.pro3
-rw-r--r--src/plugins/android/jar/distributedjar.pro2
-rw-r--r--src/plugins/android/jar/jar.pri19
-rw-r--r--src/plugins/android/jar/jar.pro22
-rw-r--r--src/plugins/android/src/common/qandroidvideooutput.h14
-rw-r--r--src/plugins/android/src/mediacapture/qandroidaudioencodersettingscontrol.h10
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameracapturebufferformatcontrol.h6
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameracapturedestinationcontrol.h6
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.h10
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.h8
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h18
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraimagecapturecontrol.h10
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h8
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameralockscontrol.h8
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.cpp12
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameravideorenderercontrol.h6
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h14
-rw-r--r--src/plugins/android/src/mediacapture/qandroidimageencodercontrol.h10
-rw-r--r--src/plugins/android/src/mediacapture/qandroidmediacontainercontrol.h8
-rw-r--r--src/plugins/android/src/mediacapture/qandroidmediarecordercontrol.h22
-rw-r--r--src/plugins/android/src/mediacapture/qandroidvideoencodersettingscontrol.h12
-rw-r--r--src/plugins/android/src/mediacapture/qandroidviewfindersettingscontrol.h6
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h46
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaplayervideorenderercontrol.h6
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaservice.h6
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.h8
-rw-r--r--src/plugins/android/src/qandroidmediaserviceplugin.h16
-rw-r--r--src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h10
-rw-r--r--src/plugins/avfoundation/camera/avfcameraexposurecontrol.h10
-rw-r--r--src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm25
-rw-r--r--src/plugins/avfoundation/camera/avfcameraflashcontrol.h8
-rw-r--r--src/plugins/avfoundation/camera/avfcamerafocuscontrol.h18
-rw-r--r--src/plugins/avfoundation/camera/avfcameraservice.mm6
-rw-r--r--src/plugins/avfoundation/camera/avfcamerautility.mm11
-rw-r--r--src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfcamerazoomcontrol.h14
-rw-r--r--src/plugins/avfoundation/camera/avfimageencodercontrol.h10
-rw-r--r--src/plugins/avfoundation/camera/avfimageencodercontrol.mm53
-rw-r--r--src/plugins/avfoundation/camera/avfmediacontainercontrol.h8
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h22
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm6
-rw-r--r--src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h12
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm1
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm34
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm8
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp8
-rw-r--r--src/plugins/common/evr/evrcustompresenter.h2
-rw-r--r--src/plugins/common/evr/evrd3dpresentengine.cpp6
-rw-r--r--src/plugins/coreaudio/coreaudioplugin.h10
-rw-r--r--src/plugins/directshow/camera/camera.pri12
-rw-r--r--src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.cpp65
-rw-r--r--src/plugins/directshow/camera/directshowcameracapturebufferformatcontrol.h60
-rw-r--r--src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.cpp68
-rw-r--r--src/plugins/directshow/camera/directshowcameracapturedestinationcontrol.h66
-rw-r--r--src/plugins/directshow/camera/directshowcameraexposurecontrol.cpp411
-rw-r--r--src/plugins/directshow/camera/directshowcameraexposurecontrol.h100
-rw-r--r--src/plugins/directshow/camera/directshowcamerazoomcontrol.cpp209
-rw-r--r--src/plugins/directshow/camera/directshowcamerazoomcontrol.h88
-rw-r--r--src/plugins/directshow/camera/dscameraservice.cpp56
-rw-r--r--src/plugins/directshow/camera/dscameraservice.h12
-rw-r--r--src/plugins/directshow/camera/dscamerasession.cpp78
-rw-r--r--src/plugins/directshow/camera/dscamerasession.h18
-rw-r--r--src/plugins/directshow/camera/dsimagecapturecontrol.cpp2
-rw-r--r--src/plugins/directshow/directshow.pro8
-rw-r--r--src/plugins/directshow/dsserviceplugin.cpp6
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp4
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp12
-rw-r--r--src/plugins/gstreamer/common.pri4
-rw-r--r--src/plugins/opensles/qopenslesaudiooutput.cpp38
-rw-r--r--src/plugins/opensles/qopenslesaudiooutput.h54
-rw-r--r--src/plugins/plugins.pro3
-rw-r--r--src/plugins/pulseaudio/qaudioinput_pulse.cpp2
-rw-r--r--src/plugins/pulseaudio/qaudiooutput_pulse.cpp2
-rw-r--r--src/plugins/pulseaudio/qpulsehelpers.cpp39
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudiodeviceinfo.h18
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudioinput.h44
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudiooutput.cpp162
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudiooutput.h60
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudioplugin.h10
-rw-r--r--src/plugins/qnx/camera/bbcameraaudioencodersettingscontrol.h10
-rw-r--r--src/plugins/qnx/camera/bbcameracapturebufferformatcontrol.h6
-rw-r--r--src/plugins/qnx/camera/bbcameracapturedestinationcontrol.h6
-rw-r--r--src/plugins/qnx/camera/bbcameracontrol.h14
-rw-r--r--src/plugins/qnx/camera/bbcameraexposurecontrol.h10
-rw-r--r--src/plugins/qnx/camera/bbcameraflashcontrol.h8
-rw-r--r--src/plugins/qnx/camera/bbcamerafocuscontrol.h18
-rw-r--r--src/plugins/qnx/camera/bbcameraimagecapturecontrol.h10
-rw-r--r--src/plugins/qnx/camera/bbcameraimageprocessingcontrol.h8
-rw-r--r--src/plugins/qnx/camera/bbcameralockscontrol.h8
-rw-r--r--src/plugins/qnx/camera/bbcameramediarecordercontrol.h22
-rw-r--r--src/plugins/qnx/camera/bbcameraorientationhandler.h2
-rw-r--r--src/plugins/qnx/camera/bbcameravideoencodersettingscontrol.h12
-rw-r--r--src/plugins/qnx/camera/bbcameraviewfindersettingscontrol.h6
-rw-r--r--src/plugins/qnx/camera/bbcamerazoomcontrol.h14
-rw-r--r--src/plugins/qnx/camera/bbimageencodercontrol.h10
-rw-r--r--src/plugins/qnx/camera/bbvideodeviceselectorcontrol.h12
-rw-r--r--src/plugins/qnx/camera/bbvideorenderercontrol.h4
-rw-r--r--src/plugins/qnx/common/windowgrabber.h2
-rw-r--r--src/plugins/qnx/mediaplayer/mediaplayer.pri8
-rw-r--r--src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.cpp68
-rw-r--r--src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.h63
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.cpp67
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderercustomaudiorolecontrol.h63
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp109
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h59
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp35
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.h8
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermetadatareadercontrol.h6
-rw-r--r--src/plugins/qnx/mediaplayer/mmrendererplayervideorenderercontrol.h6
-rw-r--r--src/plugins/qnx/mediaplayer/mmrendererutil.cpp119
-rw-r--r--src/plugins/qnx/mediaplayer/mmrendererutil.h4
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderervideowindowcontrol.h36
-rw-r--r--src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.cpp88
-rw-r--r--src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.h14
-rw-r--r--src/plugins/qnx/neutrinoserviceplugin.h6
-rw-r--r--src/plugins/wasapi/qwasapiaudiodeviceinfo.cpp2
-rw-r--r--src/plugins/wasapi/qwasapiaudiodeviceinfo.h18
-rw-r--r--src/plugins/wasapi/qwasapiaudioinput.h40
-rw-r--r--src/plugins/wasapi/qwasapiaudiooutput.h40
-rw-r--r--src/plugins/wasapi/qwasapiplugin.h10
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiooutput.h3
-rw-r--r--src/plugins/windowsaudio/qwindowsaudioplugin.h10
-rw-r--r--src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp8
-rw-r--r--src/plugins/winrt/qwinrtabstractvideorenderercontrol.h4
-rw-r--r--src/plugins/winrt/qwinrtcameracontrol.cpp72
-rw-r--r--src/plugins/winrt/qwinrtcameracontrol.h14
-rw-r--r--src/plugins/winrt/qwinrtcameraflashcontrol.h8
-rw-r--r--src/plugins/winrt/qwinrtcamerafocuscontrol.h18
-rw-r--r--src/plugins/winrt/qwinrtcameraimagecapturecontrol.h10
-rw-r--r--src/plugins/winrt/qwinrtcamerainfocontrol.h4
-rw-r--r--src/plugins/winrt/qwinrtcameralockscontrol.h8
-rw-r--r--src/plugins/winrt/qwinrtcameraservice.h4
-rw-r--r--src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp6
-rw-r--r--src/plugins/winrt/qwinrtcameravideorenderercontrol.h4
-rw-r--r--src/plugins/winrt/qwinrtimageencodercontrol.h10
-rw-r--r--src/plugins/winrt/qwinrtmediaplayercontrol.cpp4
-rw-r--r--src/plugins/winrt/qwinrtmediaplayercontrol.h44
-rw-r--r--src/plugins/winrt/qwinrtmediaplayerservice.cpp6
-rw-r--r--src/plugins/winrt/qwinrtplayerrenderercontrol.h2
-rw-r--r--src/plugins/winrt/qwinrtserviceplugin.cpp2
-rw-r--r--src/plugins/winrt/qwinrtserviceplugin.h10
-rw-r--r--src/plugins/winrt/qwinrtvideodeviceselectorcontrol.cpp2
-rw-r--r--src/plugins/winrt/qwinrtvideodeviceselectorcontrol.h12
-rw-r--r--src/plugins/wmf/mfstream.cpp2
-rw-r--r--src/plugins/wmf/player/mfmetadatacontrol.cpp7
150 files changed, 2785 insertions, 882 deletions
diff --git a/src/plugins/alsa/qalsaaudiooutput.cpp b/src/plugins/alsa/qalsaaudiooutput.cpp
index cd97ae85b..ddbe04de9 100644
--- a/src/plugins/alsa/qalsaaudiooutput.cpp
+++ b/src/plugins/alsa/qalsaaudiooutput.cpp
@@ -316,9 +316,6 @@ bool QAlsaAudioOutput::open()
return false;
}
- if (!QAlsaAudioDeviceInfo::availableDevices(QAudio::AudioOutput).contains(m_device))
- return false;
-
QString dev;
#if SND_LIB_VERSION < 0x1000e // 1.0.14
if (m_device != "default")
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/avfcameraservice.mm b/src/plugins/avfoundation/camera/avfcameraservice.mm
index 7fd04250e..71ea31e5b 100644
--- a/src/plugins/avfoundation/camera/avfcameraservice.mm
+++ b/src/plugins/avfoundation/camera/avfcameraservice.mm
@@ -37,7 +37,6 @@
**
****************************************************************************/
-#include <QtCore/qoperatingsystemversion.h>
#include <QtCore/qvariant.h>
#include <QtCore/qdebug.h>
@@ -95,9 +94,8 @@ AVFCameraService::AVFCameraService(QObject *parent):
m_imageCaptureControl = new AVFImageCaptureControl(this);
m_cameraFocusControl = new AVFCameraFocusControl(this);
m_cameraExposureControl = 0;
-#if defined(Q_OS_IOS) && QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
- if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::IOS, 8))
- m_cameraExposureControl = new AVFCameraExposureControl(this);
+#ifdef Q_OS_IOS
+ m_cameraExposureControl = new AVFCameraExposureControl(this);
#endif
m_cameraZoomControl = 0;
diff --git a/src/plugins/avfoundation/camera/avfcamerautility.mm b/src/plugins/avfoundation/camera/avfcamerautility.mm
index b864162a3..8a2254c2e 100644
--- a/src/plugins/avfoundation/camera/avfcamerautility.mm
+++ b/src/plugins/avfoundation/camera/avfcamerautility.mm
@@ -40,7 +40,6 @@
#include "avfcamerautility.h"
#include "avfcameradebug.h"
-#include <QtCore/qoperatingsystemversion.h>
#include <QtCore/qvector.h>
#include <QtCore/qpair.h>
#include <private/qmultimediautils_p.h>
@@ -180,12 +179,10 @@ QSize qt_device_format_high_resolution(AVCaptureDeviceFormat *format)
{
Q_ASSERT(format);
QSize res;
-#if defined(Q_OS_IOS) && QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
- if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::IOS, 8)) {
- const CMVideoDimensions hrDim(format.highResolutionStillImageDimensions);
- res.setWidth(hrDim.width);
- res.setHeight(hrDim.height);
- }
+#if defined(Q_OS_IOS)
+ const CMVideoDimensions hrDim(format.highResolutionStillImageDimensions);
+ res.setWidth(hrDim.width);
+ res.setHeight(hrDim.height);
#endif
return res;
}
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/avfimageencodercontrol.mm b/src/plugins/avfoundation/camera/avfimageencodercontrol.mm
index 8384ce6ae..e858d93c4 100644
--- a/src/plugins/avfoundation/camera/avfimageencodercontrol.mm
+++ b/src/plugins/avfoundation/camera/avfimageencodercontrol.mm
@@ -48,7 +48,6 @@
#include <QtMultimedia/qmediaencodersettings.h>
-#include <QtCore/qoperatingsystemversion.h>
#include <QtCore/qdebug.h>
#include <AVFoundation/AVFoundation.h>
@@ -94,17 +93,15 @@ QList<QSize> AVFImageEncoderControl::supportedResolutions(const QImageEncoderSet
const QSize res(qt_device_format_resolution(format));
if (!res.isNull() && res.isValid())
resolutions << res;
-#if defined(Q_OS_IOS) && QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
- if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::IOS, 8)) {
- // From Apple's docs (iOS):
- // By default, AVCaptureStillImageOutput emits images with the same dimensions as
- // its source AVCaptureDevice instance’s activeFormat.formatDescription. However,
- // if you set this property to YES, the receiver emits still images at the capture
- // device’s highResolutionStillImageDimensions value.
- const QSize hrRes(qt_device_format_high_resolution(format));
- if (!hrRes.isNull() && hrRes.isValid())
- resolutions << res;
- }
+#ifdef Q_OS_IOS
+ // From Apple's docs (iOS):
+ // By default, AVCaptureStillImageOutput emits images with the same dimensions as
+ // its source AVCaptureDevice instance’s activeFormat.formatDescription. However,
+ // if you set this property to YES, the receiver emits still images at the capture
+ // device’s highResolutionStillImageDimensions value.
+ const QSize hrRes(qt_device_format_high_resolution(format));
+ if (!hrRes.isNull() && hrRes.isValid())
+ resolutions << res;
#endif
}
@@ -133,17 +130,15 @@ QImageEncoderSettings AVFImageEncoderControl::imageSettings() const
}
QSize res(qt_device_format_resolution(captureDevice.activeFormat));
-#if defined(Q_OS_IOS) && QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
- if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::IOS, 8)) {
- if (!m_service->imageCaptureControl() || !m_service->imageCaptureControl()->stillImageOutput()) {
- qDebugCamera() << Q_FUNC_INFO << "no still image output";
- return settings;
- }
-
- AVCaptureStillImageOutput *stillImageOutput = m_service->imageCaptureControl()->stillImageOutput();
- if (stillImageOutput.highResolutionStillImageOutputEnabled)
- res = qt_device_format_high_resolution(captureDevice.activeFormat);
+#ifdef Q_OS_IOS
+ if (!m_service->imageCaptureControl() || !m_service->imageCaptureControl()->stillImageOutput()) {
+ qDebugCamera() << Q_FUNC_INFO << "no still image output";
+ return settings;
}
+
+ AVCaptureStillImageOutput *stillImageOutput = m_service->imageCaptureControl()->stillImageOutput();
+ if (stillImageOutput.highResolutionStillImageOutputEnabled)
+ res = qt_device_format_high_resolution(captureDevice.activeFormat);
#endif
if (res.isNull() || !res.isValid()) {
qDebugCamera() << Q_FUNC_INFO << "failed to exctract the image resolution";
@@ -217,14 +212,12 @@ bool AVFImageEncoderControl::applySettings()
activeFormatChanged = qt_set_active_format(captureDevice, match, true);
-#if defined(Q_OS_IOS) && QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
- if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::IOS, 8)) {
- AVCaptureStillImageOutput *imageOutput = m_service->imageCaptureControl()->stillImageOutput();
- if (res == qt_device_format_high_resolution(captureDevice.activeFormat))
- imageOutput.highResolutionStillImageOutputEnabled = YES;
- else
- imageOutput.highResolutionStillImageOutputEnabled = NO;
- }
+#ifdef Q_OS_IOS
+ AVCaptureStillImageOutput *imageOutput = m_service->imageCaptureControl()->stillImageOutput();
+ if (res == qt_device_format_high_resolution(captureDevice.activeFormat))
+ imageOutput.highResolutionStillImageOutputEnabled = YES;
+ else
+ imageOutput.highResolutionStillImageOutputEnabled = NO;
#endif
return activeFormatChanged;
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/avfmediarecordercontrol_ios.mm b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm
index d657dc17d..0b31bd0bc 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm
@@ -49,6 +49,7 @@
#include "avfmediacontainercontrol.h"
#include "avfcamerautility.h"
+#include <QtCore/qmath.h>
#include <QtCore/qdebug.h>
QT_USE_NAMESPACE
@@ -273,14 +274,11 @@ void AVFMediaRecorderControlIOS::setState(QMediaRecorder::State state)
else
rotation = (screenOrientation + (360 - cameraInfo.orientation)) % 360;
- // convert to radians
- rotation *= M_PI / 180.f;
-
if ([m_writer setupWithFileURL:nsFileURL
cameraService:m_service
audioSettings:m_audioSettings
videoSettings:m_videoSettings
- transform:CGAffineTransformMakeRotation(rotation)]) {
+ transform:CGAffineTransformMakeRotation(qDegreesToRadians(rotation))]) {
m_state = QMediaRecorder::RecordingState;
m_lastStatus = QMediaRecorder::StartingStatus;
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/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 38e8c3a8f..b07dbe719 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -560,7 +560,6 @@ EVRCustomPresenter::EVRCustomPresenter(QAbstractVideoSurface *surface)
, m_mediaType(0)
, m_surface(0)
, m_canRenderToSurface(false)
- , m_sampleToPresent(0)
{
// Initial source rectangle = (0,0,1,1)
m_sourceRect.top = 0;
@@ -1351,13 +1350,6 @@ HRESULT EVRCustomPresenter::createOptimalVideoType(IMFMediaType *proposedType, I
// Modify the new type.
- // Set the pixel aspect ratio (PAR) to 1:1 (see assumption #1, above)
- // The ratio is packed in a single UINT64. A helper function is normally available for
- // that (MFSetAttributeRatio) but it's not correctly defined in MinGW 4.9.1.
- hr = mtOptimal->SetUINT64(MF_MT_PIXEL_ASPECT_RATIO, (((UINT64) 1) << 32) | ((UINT64) 1));
- if (FAILED(hr))
- goto done;
-
hr = proposedType->GetUINT64(MF_MT_FRAME_SIZE, &size);
width = int(HI32(size));
height = int(LO32(size));
diff --git a/src/plugins/common/evr/evrcustompresenter.h b/src/plugins/common/evr/evrcustompresenter.h
index 5c240ea95..199dee774 100644
--- a/src/plugins/common/evr/evrcustompresenter.h
+++ b/src/plugins/common/evr/evrcustompresenter.h
@@ -367,8 +367,6 @@ private:
QAbstractVideoSurface *m_surface;
bool m_canRenderToSurface;
-
- IMFSample *m_sampleToPresent;
};
bool qt_evr_setCustomPresenter(IUnknown *evr, EVRCustomPresenter *presenter);
diff --git a/src/plugins/common/evr/evrd3dpresentengine.cpp b/src/plugins/common/evr/evrd3dpresentengine.cpp
index 754faef2d..54403faba 100644
--- a/src/plugins/common/evr/evrd3dpresentengine.cpp
+++ b/src/plugins/common/evr/evrd3dpresentengine.cpp
@@ -50,7 +50,7 @@
#include <QOffscreenSurface>
#ifdef MAYBE_ANGLE
-# include <qtgui/qguiapplication.h>
+# include <qguiapplication.h>
# include <qpa/qplatformnativeinterface.h>
# include <qopenglfunctions.h>
# include <EGL/eglext.h>
@@ -581,6 +581,10 @@ done:
: qt_evr_pixelFormatFromD3DFormat(d3dFormat),
m_useTextureRendering ? QAbstractVideoBuffer::GLTextureHandle
: QAbstractVideoBuffer::NoHandle);
+ UINT32 horizontal = 1, vertical = 1;
+ hr = MFGetAttributeRatio(format, MF_MT_PIXEL_ASPECT_RATIO, &horizontal, &vertical);
+ if (SUCCEEDED(hr))
+ m_surfaceFormat.setPixelAspectRatio(horizontal, vertical);
} else {
releaseResources();
}
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 &currentValues,
+ QVariantList &parameterRange,
+ 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, &currentValue, &currentFlags)))
+ 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, &currentZoom, &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/directshow.pro b/src/plugins/directshow/directshow.pro
index 2857f87d9..54d617166 100644
--- a/src/plugins/directshow/directshow.pro
+++ b/src/plugins/directshow/directshow.pro
@@ -8,7 +8,13 @@ win32:!qtHaveModule(opengl)|qtConfig(dynamicgl) {
HEADERS += dsserviceplugin.h
SOURCES += dsserviceplugin.cpp
-mingw: DEFINES += NO_DSHOW_STRSAFE
+# Remove WINVER/_WIN32_WINNT definitions added to qt_build_config.prf
+# by qtbase/d57a7c41712f8627a462d893329dc3f0dbb52d32 since the multimedia
+# headers of MinGW 5.3/7.1 are too broken to compile with 0x0601.
+mingw {
+ DEFINES -= WINVER=0x0601 _WIN32_WINNT=0x0601
+ DEFINES += NO_DSHOW_STRSAFE
+}
include(common/common.pri)
qtConfig(directshow-player): include(player/player.pri)
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp
index 51be7e500..cb4f0cdf9 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -123,7 +123,9 @@ QMediaServiceProviderHint::Features DSServicePlugin::supportedFeatures(
QByteArray DSServicePlugin::defaultDevice(const QByteArray &service) const
{
if (service == Q_MEDIASERVICE_CAMERA) {
+ addRefCount();
const QList<DSVideoDeviceInfo> &devs = DSVideoDeviceControl::availableDevices();
+ releaseRefCount();
if (!devs.isEmpty())
return devs.first().first;
}
@@ -135,7 +137,9 @@ QList<QByteArray> DSServicePlugin::devices(const QByteArray &service) const
QList<QByteArray> result;
if (service == Q_MEDIASERVICE_CAMERA) {
+ addRefCount();
const QList<DSVideoDeviceInfo> &devs = DSVideoDeviceControl::availableDevices();
+ releaseRefCount();
for (const DSVideoDeviceInfo &info : devs)
result.append(info.first);
}
@@ -146,7 +150,9 @@ QList<QByteArray> DSServicePlugin::devices(const QByteArray &service) const
QString DSServicePlugin::deviceDescription(const QByteArray &service, const QByteArray &device)
{
if (service == Q_MEDIASERVICE_CAMERA) {
+ addRefCount();
const QList<DSVideoDeviceInfo> &devs = DSVideoDeviceControl::availableDevices();
+ releaseRefCount();
for (const DSVideoDeviceInfo &info : devs) {
if (info.first == device)
return info.second;
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/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index f06d95ea3..823cfe408 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -466,6 +466,9 @@ GstElement *CameraBinSession::buildCameraSource()
#if CAMERABIN_DEBUG
qDebug() << Q_FUNC_INFO;
#endif
+ if (m_inputDevice.isEmpty())
+ return nullptr;
+
if (!m_inputDeviceHasChanged)
return m_cameraSrc;
@@ -482,7 +485,7 @@ GstElement *CameraBinSession::buildCameraSource()
if (!m_cameraSrc)
m_cameraSrc = camSrc;
- if (m_cameraSrc && !m_inputDevice.isEmpty()) {
+ if (m_cameraSrc) {
#if CAMERABIN_DEBUG
qDebug() << "set camera device" << m_inputDevice;
#endif
@@ -729,21 +732,18 @@ void CameraBinSession::setState(QCamera::State newState)
if (newState == m_pendingState)
return;
- emit pendingStateChanged(newState);
+ m_pendingState = newState;
+ emit pendingStateChanged(m_pendingState);
#if CAMERABIN_DEBUG
qDebug() << Q_FUNC_INFO << newState;
#endif
setStateHelper(newState);
- m_pendingState = newState;
}
void CameraBinSession::setStateHelper(QCamera::State state)
{
- if (state == m_pendingState)
- return;
-
switch (state) {
case QCamera::UnloadedState:
unload();
diff --git a/src/plugins/gstreamer/common.pri b/src/plugins/gstreamer/common.pri
index cbe87be4f..d0c5c7bdd 100644
--- a/src/plugins/gstreamer/common.pri
+++ b/src/plugins/gstreamer/common.pri
@@ -1,12 +1,10 @@
-QT += core-private multimedia-private network
+QT += core-private multimedia-private multimediagsttools-private network
qtHaveModule(widgets) {
QT += widgets multimediawidgets-private
DEFINES += HAVE_WIDGETS
}
-LIBS += -lqgsttools_p
-
QMAKE_USE += gstreamer
qtConfig(resourcepolicy): \
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/plugins.pro b/src/plugins/plugins.pro
index 98a1bf242..71b9ec6e1 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -40,7 +40,8 @@ win32:!winrt {
winrt {
- SUBDIRS += winrt
+ SUBDIRS += winrt \
+ audiocapture
}
unix:!mac:!android {
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/pulseaudio/qpulsehelpers.cpp b/src/plugins/pulseaudio/qpulsehelpers.cpp
index 17579bdd9..0604c97f5 100644
--- a/src/plugins/pulseaudio/qpulsehelpers.cpp
+++ b/src/plugins/pulseaudio/qpulsehelpers.cpp
@@ -49,30 +49,23 @@ pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format)
spec.rate = format.sampleRate();
spec.channels = format.channelCount();
-
- if (format.sampleSize() == 8) {
- spec.format = PA_SAMPLE_U8;
- } else if (format.sampleSize() == 16) {
- switch (format.byteOrder()) {
- case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S16BE; break;
- case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S16LE; break;
- }
- } else if (format.sampleSize() == 24) {
- switch (format.byteOrder()) {
- case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S24BE; break;
- case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S24LE; break;
- }
- } else if (format.sampleSize() == 32) {
- switch (format.byteOrder()) {
- case QAudioFormat::BigEndian:
- format.sampleType() == QAudioFormat::Float ? spec.format = PA_SAMPLE_FLOAT32BE : spec.format = PA_SAMPLE_S32BE;
- break;
- case QAudioFormat::LittleEndian:
- format.sampleType() == QAudioFormat::Float ? spec.format = PA_SAMPLE_FLOAT32LE : spec.format = PA_SAMPLE_S32LE;
- break;
+ spec.format = PA_SAMPLE_INVALID;
+ const bool isBigEndian = (format.byteOrder() == QAudioFormat::BigEndian);
+
+ if (format.sampleType() == QAudioFormat::UnSignedInt) {
+ if (format.sampleSize() == 8)
+ spec.format = PA_SAMPLE_U8;
+ } else if (format.sampleType() == QAudioFormat::SignedInt) {
+ if (format.sampleSize() == 16) {
+ spec.format = isBigEndian ? PA_SAMPLE_S16BE : PA_SAMPLE_S16LE;
+ } else if (format.sampleSize() == 24) {
+ spec.format = isBigEndian ? PA_SAMPLE_S24BE : PA_SAMPLE_S24LE;
+ } else if (format.sampleSize() == 32) {
+ spec.format = isBigEndian ? PA_SAMPLE_S32BE : PA_SAMPLE_S32LE;
}
- } else {
- spec.format = PA_SAMPLE_INVALID;
+ } else if (format.sampleType() == QAudioFormat::Float) {
+ if (format.sampleSize() == 32)
+ spec.format = isBigEndian ? PA_SAMPLE_FLOAT32BE : PA_SAMPLE_FLOAT32LE;
}
return spec;
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.cpp b/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
index d08d01e6d..c4c09f543 100644
--- a/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
+++ b/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
@@ -43,19 +43,24 @@
#include <private/qaudiohelpers_p.h>
+#pragma GCC diagnostic ignored "-Wvla"
+
QT_BEGIN_NAMESPACE
QnxAudioOutput::QnxAudioOutput()
- : m_source(0),
- m_pushSource(false),
- m_notifyInterval(1000),
- m_error(QAudio::NoError),
- m_state(QAudio::StoppedState),
- m_volume(1.0),
- m_periodSize(0),
- m_pcmHandle(0),
- m_bytesWritten(0),
- m_intervalOffset(0)
+ : m_source(0)
+ , m_pushSource(false)
+ , m_notifyInterval(1000)
+ , m_error(QAudio::NoError)
+ , m_state(QAudio::StoppedState)
+ , m_volume(1.0)
+ , m_periodSize(0)
+ , m_pcmHandle(0)
+ , m_bytesWritten(0)
+ , m_intervalOffset(0)
+#if _NTO_VERSION >= 700
+ , m_pcmNotifier(0)
+#endif
{
m_timer.setSingleShot(false);
m_timer.setInterval(20);
@@ -124,20 +129,16 @@ void QnxAudioOutput::reset()
void QnxAudioOutput::suspend()
{
- m_timer.stop();
snd_pcm_playback_pause(m_pcmHandle);
- setState(QAudio::SuspendedState);
+ if (state() != QAudio::InterruptedState)
+ suspendInternal(QAudio::SuspendedState);
}
void QnxAudioOutput::resume()
{
snd_pcm_playback_resume(m_pcmHandle);
- if (m_pushSource)
- setState(QAudio::IdleState);
- else {
- setState(QAudio::ActiveState);
- m_timer.start();
- }
+ if (state() != QAudio::InterruptedState)
+ resumeInternal();
}
int QnxAudioOutput::bytesFree() const
@@ -146,6 +147,7 @@ int QnxAudioOutput::bytesFree() const
return 0;
snd_pcm_channel_status_t status;
+ memset(&status, 0, sizeof(status));
status.channel = SND_PCM_CHANNEL_PLAYBACK;
const int errorCode = snd_pcm_plugin_status(m_pcmHandle, &status);
@@ -214,9 +216,21 @@ qreal QnxAudioOutput::volume() const
return m_volume;
}
+void QnxAudioOutput::setCategory(const QString &category)
+{
+ m_category = category;
+}
+
+QString QnxAudioOutput::category() const
+{
+ return m_category;
+}
+
void QnxAudioOutput::pullData()
{
- if (m_state == QAudio::StoppedState || m_state == QAudio::SuspendedState)
+ if (m_state == QAudio::StoppedState
+ || m_state == QAudio::SuspendedState
+ || m_state == QAudio::InterruptedState)
return;
const int bytesAvailable = bytesFree();
@@ -290,6 +304,8 @@ bool QnxAudioOutput::open()
return false;
}
+ addPcmEventFilter();
+
// Necessary so that bytesFree() which uses the "free" member of the status struct works
snd_pcm_plugin_set_disable(m_pcmHandle, PLUGIN_MMAP);
@@ -303,6 +319,7 @@ bool QnxAudioOutput::open()
}
snd_pcm_channel_params_t params = QnxAudioUtils::formatToChannelParams(m_format, QAudio::AudioOutput, info.max_fragment_size);
+ setTypeName(&params);
if ((errorCode = snd_pcm_plugin_params(m_pcmHandle, &params)) < 0) {
qWarning("QnxAudioOutput: open error, couldn't set channel params (0x%x)", -errorCode);
@@ -331,6 +348,8 @@ bool QnxAudioOutput::open()
m_intervalOffset = 0;
m_bytesWritten = 0;
+ createPcmNotifiers();
+
return true;
}
@@ -338,6 +357,8 @@ void QnxAudioOutput::close()
{
m_timer.stop();
+ destroyPcmNotifiers();
+
if (m_pcmHandle) {
snd_pcm_plugin_flush(m_pcmHandle, SND_PCM_CHANNEL_PLAYBACK);
snd_pcm_close(m_pcmHandle);
@@ -400,6 +421,109 @@ qint64 QnxAudioOutput::write(const char *data, qint64 len)
}
}
+void QnxAudioOutput::suspendInternal(QAudio::State suspendState)
+{
+ m_timer.stop();
+ setState(suspendState);
+}
+
+void QnxAudioOutput::resumeInternal()
+{
+ if (m_pushSource) {
+ setState(QAudio::IdleState);
+ } else {
+ setState(QAudio::ActiveState);
+ m_timer.start();
+ }
+}
+
+#if _NTO_VERSION >= 700
+
+QAudio::State suspendState(const snd_pcm_event_t &event)
+{
+ Q_ASSERT(event.type == SND_PCM_EVENT_AUDIOMGMT_STATUS);
+ Q_ASSERT(event.data.audiomgmt_status.new_status == SND_PCM_STATUS_SUSPENDED);
+ return event.data.audiomgmt_status.flags & SND_PCM_STATUS_EVENT_HARD_SUSPEND
+ ? QAudio::InterruptedState : QAudio::SuspendedState;
+}
+
+void QnxAudioOutput::addPcmEventFilter()
+{
+ /* Enable PCM events */
+ snd_pcm_filter_t filter;
+ memset(&filter, 0, sizeof(filter));
+ filter.enable = (1<<SND_PCM_EVENT_AUDIOMGMT_STATUS) |
+ (1<<SND_PCM_EVENT_AUDIOMGMT_MUTE) |
+ (1<<SND_PCM_EVENT_OUTPUTCLASS);
+ snd_pcm_set_filter(m_pcmHandle, SND_PCM_CHANNEL_PLAYBACK, &filter);
+}
+
+void QnxAudioOutput::createPcmNotifiers()
+{
+ // QSocketNotifier::Read for poll based event dispatcher. Exception for
+ // select based event dispatcher.
+ m_pcmNotifier = new QSocketNotifier(snd_pcm_file_descriptor(m_pcmHandle,
+ SND_PCM_CHANNEL_PLAYBACK),
+ QSocketNotifier::Read, this);
+ connect(m_pcmNotifier, &QSocketNotifier::activated,
+ this, &QnxAudioOutput::pcmNotifierActivated);
+}
+
+void QnxAudioOutput::destroyPcmNotifiers()
+{
+ if (m_pcmNotifier) {
+ delete m_pcmNotifier;
+ m_pcmNotifier = 0;
+ }
+}
+
+void QnxAudioOutput::setTypeName(snd_pcm_channel_params_t *params)
+{
+ if (m_category.isEmpty())
+ return;
+
+ QByteArray latin1Category = m_category.toLatin1();
+
+ if (QString::fromLatin1(latin1Category) != m_category) {
+ qWarning("QnxAudioOutput: audio category name isn't a Latin1 string.");
+ return;
+ }
+
+ if (latin1Category.size() >= static_cast<int>(sizeof(params->audio_type_name))) {
+ qWarning("QnxAudioOutput: audio category name too long.");
+ return;
+ }
+
+ strcpy(params->audio_type_name, latin1Category.constData());
+}
+
+void QnxAudioOutput::pcmNotifierActivated(int socket)
+{
+ Q_UNUSED(socket);
+
+ snd_pcm_event_t pcm_event;
+ memset(&pcm_event, 0, sizeof(pcm_event));
+ while (snd_pcm_channel_read_event(m_pcmHandle, SND_PCM_CHANNEL_PLAYBACK, &pcm_event) == 0) {
+ if (pcm_event.type == SND_PCM_EVENT_AUDIOMGMT_STATUS) {
+ if (pcm_event.data.audiomgmt_status.new_status == SND_PCM_STATUS_SUSPENDED)
+ suspendInternal(suspendState(pcm_event));
+ else if (pcm_event.data.audiomgmt_status.new_status == SND_PCM_STATUS_RUNNING)
+ resumeInternal();
+ else if (pcm_event.data.audiomgmt_status.new_status == SND_PCM_STATUS_PAUSED)
+ suspendInternal(QAudio::SuspendedState);
+ }
+ }
+}
+
+#else
+
+void QnxAudioOutput::addPcmEventFilter() {}
+void QnxAudioOutput::createPcmNotifiers() {}
+void QnxAudioOutput::destroyPcmNotifiers() {}
+void QnxAudioOutput::setTypeName(snd_pcm_channel_params_t *) {}
+
+#endif
+
QnxPushIODevice::QnxPushIODevice(QnxAudioOutput *output)
: QIODevice(output),
m_output(output)
diff --git a/src/plugins/qnx-audio/audio/qnxaudiooutput.h b/src/plugins/qnx-audio/audio/qnxaudiooutput.h
index 5ee69b542..7a0979f77 100644
--- a/src/plugins/qnx-audio/audio/qnxaudiooutput.h
+++ b/src/plugins/qnx-audio/audio/qnxaudiooutput.h
@@ -45,8 +45,10 @@
#include <QTime>
#include <QTimer>
#include <QIODevice>
+#include <QSocketNotifier>
#include <sys/asoundlib.h>
+#include <sys/neutrino.h>
QT_BEGIN_NAMESPACE
@@ -60,26 +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 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();
@@ -90,6 +94,14 @@ private:
void setError(QAudio::Error error);
void setState(QAudio::State state);
+ void addPcmEventFilter();
+ void createPcmNotifiers();
+ void destroyPcmNotifiers();
+ void setTypeName(snd_pcm_channel_params_t *params);
+
+ void suspendInternal(QAudio::State suspendState);
+ void resumeInternal();
+
friend class QnxPushIODevice;
qint64 write(const char *data, qint64 len);
@@ -102,6 +114,7 @@ private:
QAudio::State m_state;
QAudioFormat m_format;
qreal m_volume;
+ QString m_category;
int m_periodSize;
snd_pcm_t *m_pcmHandle;
@@ -109,6 +122,13 @@ private:
QTime m_startTimeStamp;
QTime m_intervalTimeStamp;
qint64 m_intervalOffset;
+
+#if _NTO_VERSION >= 700
+ QSocketNotifier *m_pcmNotifier;
+
+private slots:
+ void pcmNotifierActivated(int socket);
+#endif
};
class QnxPushIODevice : public QIODevice
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 4c4363a91..f39b542cc 100644
--- a/src/plugins/qnx/mediaplayer/mediaplayer.pri
+++ b/src/plugins/qnx/mediaplayer/mediaplayer.pri
@@ -1,6 +1,7 @@
INCLUDEPATH += $$PWD
HEADERS += \
+ $$PWD/mmrendereraudiorolecontrol.h \
$$PWD/mmrenderermediaplayercontrol.h \
$$PWD/mmrenderermediaplayerservice.h \
$$PWD/mmrenderermetadata.h \
@@ -9,8 +10,10 @@ 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 \
$$PWD/mmrenderermediaplayerservice.cpp \
$$PWD/mmrenderermetadata.cpp \
@@ -19,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.cpp b/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.cpp
new file mode 100644
index 000000000..e470ed4c5
--- /dev/null
+++ b/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.cpp
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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 "mmrendereraudiorolecontrol.h"
+#include "mmrendererutil.h"
+
+QT_BEGIN_NAMESPACE
+
+MmRendererAudioRoleControl::MmRendererAudioRoleControl(QObject *parent)
+ : QAudioRoleControl(parent)
+ , m_role(QAudio::UnknownRole)
+{
+}
+
+QAudio::Role MmRendererAudioRoleControl::audioRole() const
+{
+ return m_role;
+}
+
+void MmRendererAudioRoleControl::setAudioRole(QAudio::Role role)
+{
+ if (m_role != role) {
+ m_role = role;
+ emit audioRoleChanged(m_role);
+ }
+}
+
+QList<QAudio::Role> MmRendererAudioRoleControl::supportedAudioRoles() const
+{
+ return qnxSupportedAudioRoles();
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.h b/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.h
new file mode 100644
index 000000000..d0d2165eb
--- /dev/null
+++ b/src/plugins/qnx/mediaplayer/mmrendereraudiorolecontrol.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 MMRENDERERAUDIOROLECONTROL_H
+#define MMRENDERERAUDIOROLECONTROL_H
+
+#include <qaudiorolecontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+class MmRendererAudioRoleControl : public QAudioRoleControl
+{
+ Q_OBJECT
+public:
+ explicit MmRendererAudioRoleControl(QObject *parent = 0);
+
+ QAudio::Role audioRole() const override;
+ void setAudioRole(QAudio::Role role) override;
+
+ QList<QAudio::Role> supportedAudioRoles() const override;
+
+private:
+ QAudio::Role m_role;
+};
+
+QT_END_NAMESPACE
+
+#endif
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 d8b0a3934..c66ac937d 100644
--- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp
+++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp
@@ -36,6 +36,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#include "mmrendereraudiorolecontrol.h"
+#include "mmrenderercustomaudiorolecontrol.h"
#include "mmrenderermediaplayercontrol.h"
#include "mmrenderermetadatareadercontrol.h"
#include "mmrendererplayervideorenderercontrol.h"
@@ -70,7 +72,6 @@ MmRendererMediaPlayerControl::MmRendererMediaPlayerControl(QObject *parent)
m_mediaStatus(QMediaPlayer::NoMedia),
m_playAfterMediaLoaded(false),
m_inputAttached(false),
- m_stopEventsToIgnore(0),
m_bufferLevel(0)
{
m_loadingTimer.setSingleShot(true);
@@ -109,35 +110,51 @@ void MmRendererMediaPlayerControl::openConnection()
startMonitoring();
}
-void MmRendererMediaPlayerControl::handleMmStatusUpdate(qint64 newPosition)
-{
- // Prevent spurious position change events from overriding our own position, for example
- // when setting the position to 0 in stop().
- // Also, don't change the position while we're loading the media, as then play() would
- // set a wrong initial position.
- if (m_state != QMediaPlayer::PlayingState ||
- m_mediaStatus == QMediaPlayer::LoadingMedia ||
- m_mediaStatus == QMediaPlayer::NoMedia ||
- m_mediaStatus == QMediaPlayer::InvalidMedia)
- return;
-
- setMmPosition(newPosition);
-}
-
void MmRendererMediaPlayerControl::handleMmStopped()
{
// Only react to stop events that happen when the end of the stream is reached and
// playback is stopped because of this.
- // Ignore other stop event sources, souch as calling mmr_stop() ourselves and
- // mmr_input_attach().
- if (m_stopEventsToIgnore > 0) {
- --m_stopEventsToIgnore;
- } else {
+ // Ignore other stop event sources, such as calling mmr_stop() ourselves.
+ if (m_state != QMediaPlayer::StoppedState) {
setMediaStatus(QMediaPlayer::EndOfMedia);
stopInternal(IgnoreMmRenderer);
}
}
+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();
@@ -184,6 +201,8 @@ void MmRendererMediaPlayerControl::attach()
return;
}
+ resetMonitoring();
+
if (m_videoRendererControl)
m_videoRendererControl->attachDisplay(m_context);
@@ -197,6 +216,20 @@ void MmRendererMediaPlayerControl::attach()
return;
}
+ if (m_audioId != -1 && m_audioRoleControl) {
+ 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();
+ dict = strm_dict_set(dict, "audio_type", latin1AudioType.constData());
+ if (mmr_output_parameters(m_context, m_audioId, dict) != 0)
+ emitMmError("mmr_output_parameters: Setting audio_type failed");
+ }
+ }
+
const QByteArray resourcePath = resourcePathForUrl(m_media.canonicalUrl());
if (resourcePath.isEmpty()) {
detach();
@@ -210,11 +243,6 @@ void MmRendererMediaPlayerControl::attach()
return;
}
- // For whatever reason, the mmrenderer sends out a MMR_STOPPED event when calling
- // mmr_input_attach() above. Ignore it, as otherwise we'll trigger stopping right after we
- // started.
- m_stopEventsToIgnore++;
-
m_inputAttached = true;
setMediaStatus(QMediaPlayer::LoadedMedia);
@@ -346,12 +374,12 @@ void MmRendererMediaPlayerControl::setState(QMediaPlayer::State state)
void MmRendererMediaPlayerControl::stopInternal(StopCommand stopCommand)
{
+ resetMonitoring();
setPosition(0);
if (m_state != QMediaPlayer::StoppedState) {
if (stopCommand == StopMmRenderer) {
- ++m_stopEventsToIgnore;
mmr_stop(m_context);
}
@@ -509,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);
@@ -519,7 +548,6 @@ void MmRendererMediaPlayerControl::play()
return;
}
- m_stopEventsToIgnore = 0; // once playing, stop events must be proccessed
setState( QMediaPlayer::PlayingState);
}
@@ -556,6 +584,16 @@ void MmRendererMediaPlayerControl::setMetaDataReaderControl(MmRendererMetaDataRe
m_metaDataReaderControl = metaDataReaderControl;
}
+void MmRendererMediaPlayerControl::setAudioRoleControl(MmRendererAudioRoleControl *audioRoleControl)
+{
+ m_audioRoleControl = audioRoleControl;
+}
+
+void MmRendererMediaPlayerControl::setCustomAudioRoleControl(MmRendererCustomAudioRoleControl *customAudioRoleControl)
+{
+ m_customAudioRoleControl = customAudioRoleControl;
+}
+
void MmRendererMediaPlayerControl::setMmPosition(qint64 newPosition)
{
if (newPosition != 0 && newPosition != m_position) {
@@ -573,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 2edbd50e0..3426ef2f2 100644
--- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h
+++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h
@@ -52,6 +52,8 @@ typedef struct strm_dict strm_dict_t;
QT_BEGIN_NAMESPACE
+class MmRendererAudioRoleControl;
+class MmRendererCustomAudioRoleControl;
class MmRendererMetaDataReaderControl;
class MmRendererPlayerVideoRendererControl;
class MmRendererVideoWindowControl;
@@ -62,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);
@@ -103,19 +105,25 @@ public:
MmRendererVideoWindowControl *videoWindowControl() const;
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 handleMmStatusUpdate(qint64 position);
+ 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())
@@ -156,12 +164,13 @@ private:
QPointer<MmRendererPlayerVideoRendererControl> m_videoRendererControl;
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;
bool m_playAfterMediaLoaded;
bool m_inputAttached;
- int m_stopEventsToIgnore;
int m_bufferLevel;
QTimer m_loadingTimer;
};
diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp b/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp
index 1258d199c..190cb8b80 100644
--- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp
+++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.cpp
@@ -38,6 +38,8 @@
****************************************************************************/
#include "mmrenderermediaplayerservice.h"
+#include "mmrendereraudiorolecontrol.h"
+#include "mmrenderercustomaudiorolecontrol.h"
#include "mmrenderermediaplayercontrol.h"
#include "mmrenderermetadatareadercontrol.h"
#include "mmrendererplayervideorenderercontrol.h"
@@ -66,6 +68,8 @@ MmRendererMediaPlayerService::~MmRendererMediaPlayerService()
delete m_videoWindowControl;
delete m_mediaPlayerControl;
delete m_metaDataReaderControl;
+ delete m_audioRoleControl;
+ delete m_customAudioRoleControl;
}
QMediaControl *MmRendererMediaPlayerService::requestControl(const char *name)
@@ -76,15 +80,25 @@ QMediaControl *MmRendererMediaPlayerService::requestControl(const char *name)
updateControls();
}
return m_mediaPlayerControl;
- }
- else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) {
+ } else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) {
if (!m_metaDataReaderControl) {
m_metaDataReaderControl = new MmRendererMetaDataReaderControl();
updateControls();
}
return m_metaDataReaderControl;
- }
- else if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
+ } else if (qstrcmp(name, QAudioRoleControl_iid) == 0) {
+ if (!m_audioRoleControl) {
+ m_audioRoleControl = new MmRendererAudioRoleControl();
+ 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();
m_appHasDrmPermissionChecked = true;
@@ -102,8 +116,7 @@ QMediaControl *MmRendererMediaPlayerService::requestControl(const char *name)
updateControls();
}
return m_videoRendererControl;
- }
- else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
+ } else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
if (!m_videoWindowControl) {
m_videoWindowControl = new MmRendererVideoWindowControl();
updateControls();
@@ -123,6 +136,10 @@ void MmRendererMediaPlayerService::releaseControl(QMediaControl *control)
m_mediaPlayerControl = 0;
if (control == m_metaDataReaderControl)
m_metaDataReaderControl = 0;
+ if (control == m_audioRoleControl)
+ m_audioRoleControl = 0;
+ if (control == m_customAudioRoleControl)
+ m_customAudioRoleControl = 0;
delete control;
}
@@ -136,6 +153,12 @@ void MmRendererMediaPlayerService::updateControls()
if (m_metaDataReaderControl && m_mediaPlayerControl)
m_mediaPlayerControl->setMetaDataReaderControl(m_metaDataReaderControl);
+
+ 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 de85293cb..ab3054af5 100644
--- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.h
+++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayerservice.h
@@ -44,6 +44,8 @@
QT_BEGIN_NAMESPACE
+class MmRendererAudioRoleControl;
+class MmRendererCustomAudioRoleControl;
class MmRendererMediaPlayerControl;
class MmRendererMetaDataReaderControl;
class MmRendererPlayerVideoRendererControl;
@@ -56,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();
@@ -66,6 +68,8 @@ private:
QPointer<MmRendererVideoWindowControl> m_videoWindowControl;
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 239d9d52e..d8af4a746 100644
--- a/src/plugins/qnx/mediaplayer/mmrendererutil.cpp
+++ b/src/plugins/qnx/mediaplayer/mmrendererutil.cpp
@@ -41,6 +41,11 @@
#include <QDebug>
#include <QDir>
#include <QFile>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QMutex>
+#include <QMutex>
#include <QString>
#include <QXmlStreamReader>
@@ -85,6 +90,97 @@ static const MmError mmErrors[] = {
};
static const unsigned int numMmErrors = sizeof(mmErrors) / sizeof(MmError);
+static QBasicMutex roleMapMutex;
+static bool roleMapInitialized = false;
+static QString roleMap[QAudio::CustomRole + 1];
+
+template <typename T, size_t N>
+constexpr size_t countof(T (&)[N])
+{
+ return N;
+}
+
+constexpr bool inBounds(QAudio::Role r)
+{
+ return r >= 0 && r < countof(roleMap);
+}
+
+QString keyValueMapsLocation()
+{
+ QByteArray qtKeyValueMaps = qgetenv("QT_KEY_VALUE_MAPS");
+ if (qtKeyValueMaps.isNull())
+ return QStringLiteral("/etc/qt/keyvaluemaps");
+ else
+ return qtKeyValueMaps;
+}
+
+QJsonObject loadMapObject(const QString &keyValueMapPath)
+{
+ QFile mapFile(keyValueMapsLocation() + keyValueMapPath);
+ if (mapFile.open(QIODevice::ReadOnly)) {
+ QByteArray mapFileContents = mapFile.readAll();
+ QJsonDocument mapDocument = QJsonDocument::fromJson(mapFileContents);
+ if (mapDocument.isObject()) {
+ QJsonObject mapObject = mapDocument.object();
+ return mapObject;
+ }
+ }
+ return QJsonObject();
+}
+
+static void loadRoleMap()
+{
+ QMutexLocker locker(&roleMapMutex);
+
+ if (!roleMapInitialized) {
+ QJsonObject mapObject = loadMapObject("/QAudio/Role.json");
+ if (!mapObject.isEmpty()) {
+ // Wrapping the loads in a switch like this ensures that anyone adding
+ // a new enumerator will be notified that this code must be updated. A
+ // compile error will occur because the enumerator is missing from the
+ // switch. A compile error will also occur if the enumerator used to
+ // size the mapping table isn't updated when a new enumerator is added.
+ // One or more enumerators will be outside the bounds of the array when
+ // the wrong enumerator is used to size the array.
+ //
+ // The code loads a mapping for each enumerator because role is set
+ // to UnknownRole and all the cases drop through to the next case.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic error "-Wswitch"
+#define loadRoleMapping(r) \
+ case QAudio::r: \
+ static_assert(inBounds(QAudio::r), #r " out-of-bounds." \
+ " Do you need to change the enumerator used to size the mapping table" \
+ " because you added new QAudio::Role enumerators?"); \
+ roleMap[QAudio::r] = mapObject.value(QLatin1String(#r)).toString();
+
+ QAudio::Role role = QAudio::UnknownRole;
+ switch (role) {
+ loadRoleMapping(UnknownRole);
+ loadRoleMapping(MusicRole);
+ loadRoleMapping(VideoRole);
+ loadRoleMapping(VoiceCommunicationRole);
+ loadRoleMapping(AlarmRole);
+ loadRoleMapping(NotificationRole);
+ loadRoleMapping(RingtoneRole);
+ 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;
+ }
+}
+
QString mmErrorMessage(const QString &msg, mmr_context_t *context, int *errorCode)
{
const mmr_error_info_t * const mmError = mmr_error_info(context);
@@ -124,4 +220,27 @@ bool checkForDrmPermission()
return false;
}
+QString qnxAudioType(QAudio::Role role)
+{
+ loadRoleMap();
+
+ if (role >= 0 && role < countof(roleMap))
+ return roleMap[role];
+ else
+ return QString();
+}
+
+QList<QAudio::Role> qnxSupportedAudioRoles()
+{
+ loadRoleMap();
+
+ QList<QAudio::Role> result;
+ for (size_t i = 0; i < countof(roleMap); ++i) {
+ if (!roleMap[i].isEmpty() || (i == QAudio::UnknownRole))
+ result.append(static_cast<QAudio::Role>(i));
+ }
+
+ return result;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/qnx/mediaplayer/mmrendererutil.h b/src/plugins/qnx/mediaplayer/mmrendererutil.h
index 8017b2690..ac6f73a7d 100644
--- a/src/plugins/qnx/mediaplayer/mmrendererutil.h
+++ b/src/plugins/qnx/mediaplayer/mmrendererutil.h
@@ -40,6 +40,7 @@
#define MMRENDERERUTIL_H
#include <QtCore/qglobal.h>
+#include <QtMultimedia/qaudio.h>
typedef struct mmr_context mmr_context_t;
@@ -51,6 +52,9 @@ QString mmErrorMessage(const QString &msg, mmr_context_t *context, int * errorCo
bool checkForDrmPermission();
+QString qnxAudioType(QAudio::Role role);
+QList<QAudio::Role> qnxSupportedAudioRoles();
+
QT_END_NAMESPACE
#endif
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.cpp b/src/plugins/wasapi/qwasapiaudiodeviceinfo.cpp
index e1a46841d..53345dec8 100644
--- a/src/plugins/wasapi/qwasapiaudiodeviceinfo.cpp
+++ b/src/plugins/wasapi/qwasapiaudiodeviceinfo.cpp
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcMmDeviceInfo, "qt.multimedia.deviceinfo")
QWasapiAudioDeviceInfo::QWasapiAudioDeviceInfo(QByteArray dev, QAudio::Mode mode)
- : m_deviceName(dev)
+ : m_deviceName(QString::fromLocal8Bit(dev))
{
qCDebug(lcMmDeviceInfo) << __FUNCTION__ << dev << mode;
m_interface = QWasapiUtils::createOrGetInterface(dev, mode);
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/qwindowsaudiooutput.h b/src/plugins/windowsaudio/qwindowsaudiooutput.h
index 19b4b92af..f25475b02 100644
--- a/src/plugins/windowsaudio/qwindowsaudiooutput.h
+++ b/src/plugins/windowsaudio/qwindowsaudiooutput.h
@@ -116,7 +116,6 @@ private slots:
private:
QByteArray m_device;
- bool resuming;
int bytesAvailable;
QTime timeStamp;
qint64 elapsedTimeOffset;
@@ -139,8 +138,6 @@ private:
WAVEFORMATEXTENSIBLE wfx;
HWAVEOUT hWaveOut;
- MMRESULT result;
- WAVEHDR header;
WAVEHDR* waveBlocks;
volatile bool finished;
volatile int waveFreeBlockCount;
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/plugins/wmf/mfstream.cpp b/src/plugins/wmf/mfstream.cpp
index fd95bf20b..a98b5a704 100644
--- a/src/plugins/wmf/mfstream.cpp
+++ b/src/plugins/wmf/mfstream.cpp
@@ -231,6 +231,8 @@ STDMETHODIMP MFStream::Seek(
qint64 pos = qint64(llSeekOffset);
switch (SeekOrigin) {
+ case msoBegin:
+ break;
case msoCurrent:
pos += m_stream->pos();
break;
diff --git a/src/plugins/wmf/player/mfmetadatacontrol.cpp b/src/plugins/wmf/player/mfmetadatacontrol.cpp
index 01be95e84..ac57ccfb5 100644
--- a/src/plugins/wmf/player/mfmetadatacontrol.cpp
+++ b/src/plugins/wmf/player/mfmetadatacontrol.cpp
@@ -193,6 +193,11 @@ QVariant MFMetaDataControl::metaData(const QString &key) const
if (m_content && SUCCEEDED(m_content->GetValue(PKEY_Video_FrameWidth, &var)))
res.setWidth(convertValue(var).toUInt());
value = res;
+ } else if (key == QMediaMetaData::Orientation) {
+ uint orientation = 0;
+ if (m_content && SUCCEEDED(m_content->GetValue(PKEY_Video_Orientation, &var)))
+ orientation = convertValue(var).toUInt();
+ value = orientation;
} else if (key == QMediaMetaData::PixelAspectRatio) {
QSize aspectRatio;
aspectRatio.setWidth(value.toUInt());
@@ -352,6 +357,8 @@ void MFMetaDataControl::updateSource(IMFPresentationDescriptor* sourcePD, IMFMed
m_availableMetaDatas.push_back(QMediaMetaData::ThumbnailImage);
} else if (key == PKEY_Video_FrameHeight) {
m_availableMetaDatas.push_back(QMediaMetaData::Resolution);
+ } else if (key == PKEY_Video_Orientation) {
+ m_availableMetaDatas.push_back(QMediaMetaData::Orientation);
} else if (key == PKEY_Video_HorizontalAspectRatio) {
m_availableMetaDatas.push_back(QMediaMetaData::PixelAspectRatio);
} else if (key == PKEY_Video_FrameRate) {