diff options
Diffstat (limited to 'src')
33 files changed, 599 insertions, 873 deletions
diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt index 201314dc1..5ed0746a3 100644 --- a/src/multimedia/CMakeLists.txt +++ b/src/multimedia/CMakeLists.txt @@ -132,12 +132,12 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_wmf platform/windows/audio/qwindowsaudioutils.cpp platform/windows/audio/qwindowsaudioutils_p.h platform/windows/common/mfmetadata.cpp platform/windows/common/mfmetadata_p.h platform/windows/common/qwindowsmultimediautils.cpp platform/windows/common/qwindowsmultimediautils_p.h + platform/windows/common/qwindowsmfdefs.cpp platform/windows/common/qwindowsmfdefs_p.h platform/windows/common/qwindowsiupointer_p.h platform/windows/decoder/mfaudiodecodercontrol.cpp platform/windows/decoder/mfaudiodecodercontrol_p.h platform/windows/decoder/mfdecodersourcereader.cpp platform/windows/decoder/mfdecodersourcereader_p.h platform/windows/evr/evrcustompresenter.cpp platform/windows/evr/evrcustompresenter_p.h platform/windows/evr/evrd3dpresentengine.cpp platform/windows/evr/evrd3dpresentengine_p.h - platform/windows/evr/evrdefs.cpp platform/windows/evr/evrdefs_p.h platform/windows/evr/evrhelpers.cpp platform/windows/evr/evrhelpers_p.h platform/windows/evr/evrvideowindowcontrol.cpp platform/windows/evr/evrvideowindowcontrol_p.h platform/windows/mfstream.cpp platform/windows/mfstream_p.h @@ -178,12 +178,16 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_wmf evr gdi32 mf + mfcore mfplat mfreadwrite mfuuid ole32 oleaut32 + propsys + shlwapi strmiids + amstrmid user32 winmm wmcodecdspuuid diff --git a/src/multimedia/platform/windows/audio/qwindowsaudiosink_p.h b/src/multimedia/platform/windows/audio/qwindowsaudiosink_p.h index d865011b5..fb743159a 100644 --- a/src/multimedia/platform/windows/audio/qwindowsaudiosink_p.h +++ b/src/multimedia/platform/windows/audio/qwindowsaudiosink_p.h @@ -85,22 +85,22 @@ public: qint64 write( const char *data, qint64 len ); - void setFormat(const QAudioFormat& fmt); - QAudioFormat format() const; - QIODevice* start(); - void start(QIODevice* device); - void stop(); - void reset(); - void suspend(); - void resume(); - qsizetype bytesFree() const; - void setBufferSize(qsizetype value); - qsizetype bufferSize() const; - qint64 processedUSecs() const; - QAudio::Error error() const; - QAudio::State state() const; - void setVolume(qreal); - qreal volume() const; + void setFormat(const QAudioFormat& fmt) override; + QAudioFormat format() const override; + QIODevice* start() override; + void start(QIODevice* device) override; + void stop() override; + void reset() override; + void suspend() override; + void resume() override; + qsizetype bytesFree() const override; + void setBufferSize(qsizetype value) override; + qsizetype bufferSize() const override; + qint64 processedUSecs() const override; + QAudio::Error error() const override; + QAudio::State state() const override; + void setVolume(qreal) override; + qreal volume() const override; QIODevice* audioSource; QAudioFormat settings; @@ -147,8 +147,8 @@ public: OutputPrivate(QWindowsAudioSink* audio); ~OutputPrivate(); - qint64 readData( char* data, qint64 len); - qint64 writeData(const char* data, qint64 len); + qint64 readData( char* data, qint64 len) override; + qint64 writeData(const char* data, qint64 len) override; private: QWindowsAudioSink *audioDevice; diff --git a/src/multimedia/platform/windows/audio/qwindowsaudiosource_p.h b/src/multimedia/platform/windows/audio/qwindowsaudiosource_p.h index ff68daab6..17bbdaaee 100644 --- a/src/multimedia/platform/windows/audio/qwindowsaudiosource_p.h +++ b/src/multimedia/platform/windows/audio/qwindowsaudiosource_p.h @@ -87,22 +87,22 @@ public: qint64 read(char* data, qint64 len); - void setFormat(const QAudioFormat& fmt); - QAudioFormat format() const; - QIODevice* start(); - void start(QIODevice* device); - void stop(); - void reset(); - void suspend(); - void resume(); - qsizetype bytesReady() const; - void setBufferSize(qsizetype value); - qsizetype bufferSize() const; - qint64 processedUSecs() const; - QAudio::Error error() const; - QAudio::State state() const; - void setVolume(qreal volume); - qreal volume() const; + void setFormat(const QAudioFormat& fmt) override; + QAudioFormat format() const override; + QIODevice* start() override; + void start(QIODevice* device) override; + void stop() override; + void reset() override; + void suspend() override; + void resume() override; + qsizetype bytesReady() const override; + void setBufferSize(qsizetype value) override; + qsizetype bufferSize() const override; + qint64 processedUSecs() const override; + QAudio::Error error() const override; + QAudio::State state() const override; + void setVolume(qreal volume) override; + qreal volume() const override; QIODevice* audioSource; QAudioFormat settings; @@ -157,8 +157,8 @@ public: InputPrivate(QWindowsAudioSource* audio); ~InputPrivate(); - qint64 readData( char* data, qint64 len); - qint64 writeData(const char* data, qint64 len); + qint64 readData( char* data, qint64 len) override; + qint64 writeData(const char* data, qint64 len) override; void trigger(); private: diff --git a/src/multimedia/platform/windows/common/mfmetadata.cpp b/src/multimedia/platform/windows/common/mfmetadata.cpp index ebc884759..0edb7aa01 100644 --- a/src/multimedia/platform/windows/common/mfmetadata.cpp +++ b/src/multimedia/platform/windows/common/mfmetadata.cpp @@ -52,85 +52,7 @@ //#define DEBUG_MEDIAFOUNDATION -static QString nameForGUID(GUID guid) -{ - // Audio formats - if (guid == MFAudioFormat_AAC) - return QStringLiteral("MPEG AAC Audio"); - else if (guid == MFAudioFormat_ADTS) - return QStringLiteral("MPEG ADTS AAC Audio"); - else if (guid == MFAudioFormat_Dolby_AC3_SPDIF) - return QStringLiteral("Dolby AC-3 SPDIF"); - else if (guid == MFAudioFormat_DRM) - return QStringLiteral("DRM"); - else if (guid == MFAudioFormat_DTS) - return QStringLiteral("Digital Theater Systems Audio (DTS)"); - else if (guid == MFAudioFormat_Float) - return QStringLiteral("IEEE Float Audio"); - else if (guid == MFAudioFormat_MP3) - return QStringLiteral("MPEG Audio Layer-3 (MP3)"); - else if (guid == MFAudioFormat_MPEG) - return QStringLiteral("MPEG-1 Audio"); - else if (guid == MFAudioFormat_MSP1) - return QStringLiteral("Windows Media Audio Voice"); - else if (guid == MFAudioFormat_PCM) - return QStringLiteral("Uncompressed PCM Audio"); - else if (guid == MFAudioFormat_WMASPDIF) - return QStringLiteral("Windows Media Audio 9 SPDIF"); - else if (guid == MFAudioFormat_WMAudioV8) - return QStringLiteral("Windows Media Audio 8 (WMA2)"); - else if (guid == MFAudioFormat_WMAudioV9) - return QStringLiteral("Windows Media Audio 9 (WMA3"); - else if (guid == MFAudioFormat_WMAudio_Lossless) - return QStringLiteral("Windows Media Audio 9 Lossless"); - - // Video formats - if (guid == MFVideoFormat_DV25) - return QStringLiteral("DVCPRO 25 (DV25)"); - else if (guid == MFVideoFormat_DV50) - return QStringLiteral("DVCPRO 50 (DV50)"); - else if (guid == MFVideoFormat_DVC) - return QStringLiteral("DVC/DV Video"); - else if (guid == MFVideoFormat_DVH1) - return QStringLiteral("DVCPRO 100 (DVH1)"); - else if (guid == MFVideoFormat_DVHD) - return QStringLiteral("HD-DVCR (DVHD)"); - else if (guid == MFVideoFormat_DVSD) - return QStringLiteral("SDL-DVCR (DVSD)"); - else if (guid == MFVideoFormat_DVSL) - return QStringLiteral("SD-DVCR (DVSL)"); - else if (guid == MFVideoFormat_H264) - return QStringLiteral("H.264 Video"); - else if (guid == MFVideoFormat_M4S2) - return QStringLiteral("MPEG-4 part 2 Video (M4S2)"); - else if (guid == MFVideoFormat_MJPG) - return QStringLiteral("Motion JPEG (MJPG)"); - else if (guid == MFVideoFormat_MP43) - return QStringLiteral("Microsoft MPEG 4 version 3 (MP43)"); - else if (guid == MFVideoFormat_MP4S) - return QStringLiteral("ISO MPEG 4 version 1 (MP4S)"); - else if (guid == MFVideoFormat_MP4V) - return QStringLiteral("MPEG-4 part 2 Video (MP4V)"); - else if (guid == MFVideoFormat_MPEG2) - return QStringLiteral("MPEG-2 Video"); - else if (guid == MFVideoFormat_MPG1) - return QStringLiteral("MPEG-1 Video"); - else if (guid == MFVideoFormat_MSS1) - return QStringLiteral("Windows Media Screen 1 (MSS1)"); - else if (guid == MFVideoFormat_MSS2) - return QStringLiteral("Windows Media Video 9 Screen (MSS2)"); - else if (guid == MFVideoFormat_WMV1) - return QStringLiteral("Windows Media Video 7 (WMV1)"); - else if (guid == MFVideoFormat_WMV2) - return QStringLiteral("Windows Media Video 8 (WMV2)"); - else if (guid == MFVideoFormat_WMV3) - return QStringLiteral("Windows Media Video 9 (WMV3)"); - else if (guid == MFVideoFormat_WVC1) - return QStringLiteral("Windows Media Video VC1 (WVC1)"); - - else - return QStringLiteral("Unknown codec"); -} +static const PROPERTYKEY PROP_KEY_NULL = {GUID_NULL, 0}; static QVariant convertValue(const PROPVARIANT& var) { @@ -388,7 +310,7 @@ static REFPROPERTYKEY propertyKeyForMetaDataKey(QMediaMetaData::Key key) case QMediaMetaData::MediaType: return PKEY_Media_ClassPrimaryID; default: - return PKEY_Null; + return PROP_KEY_NULL; } } @@ -509,7 +431,7 @@ void MFMetaData::toNative(const QMediaMetaData &metaData, IPropertyStore *conten // do validation and type conversion. REFPROPERTYKEY propKey = propertyKeyForMetaDataKey(key); - if (propKey != PKEY_Null) { + if (propKey != PROP_KEY_NULL) { QString strValue = metaData.stringValue(key); if (!strValue.isEmpty()) setStringProperty(content, propKey, strValue); diff --git a/src/multimedia/platform/windows/common/qwindowsmfdefs.cpp b/src/multimedia/platform/windows/common/qwindowsmfdefs.cpp new file mode 100644 index 000000000..97eae9743 --- /dev/null +++ b/src/multimedia/platform/windows/common/qwindowsmfdefs.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2021 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 "qwindowsmfdefs_p.h" + +const GUID QMM_MFTranscodeContainerType_ADTS = {0x132fd27d, 0x0f02, 0x43de, {0xa3, 0x01, 0x38, 0xfb, 0xbb, 0xb3, 0x83, 0x4e}}; +const GUID QMM_MFTranscodeContainerType_ASF = {0x430f6f6e, 0xb6bf, 0x4fc1, {0xa0, 0xbd, 0x9e, 0xe4, 0x6e, 0xee, 0x2a, 0xfb}}; +const GUID QMM_MFTranscodeContainerType_AVI = {0x7edfe8af, 0x402f, 0x4d76, {0xa3, 0x3c, 0x61, 0x9f, 0xd1, 0x57, 0xd0, 0xf1}}; +const GUID QMM_MFTranscodeContainerType_FLAC = {0x31344aa3, 0x05a9, 0x42b5, {0x90, 0x1b, 0x8e, 0x9d, 0x42, 0x57, 0xf7, 0x5e}}; +const GUID QMM_MFTranscodeContainerType_MP3 = {0xe438b912, 0x83f1, 0x4de6, {0x9e, 0x3a, 0x9f, 0xfb, 0xc6, 0xdd, 0x24, 0xd1}}; +const GUID QMM_MFTranscodeContainerType_MPEG4 = {0xdc6cd05d, 0xb9d0, 0x40ef, {0xbd, 0x35, 0xfa, 0x62, 0x2c, 0x1a, 0xb2, 0x8a}}; +const GUID QMM_MFTranscodeContainerType_WAVE = {0x64c3453c, 0x0f26, 0x4741, {0xbe, 0x63, 0x87, 0xbd, 0xf8, 0xbb, 0x93, 0x5b}}; + +const GUID QMM_MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID = {0x8ac3587a, 0x4ae7, 0x42d8, {0x99, 0xe0, 0x0a, 0x60, 0x13, 0xee, 0xf9, 0x0f}}; +const GUID QMM_MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID = {0x14dd9a1c, 0x7cff, 0x41be, {0xb1, 0xb9, 0xba, 0x1a, 0xc6, 0xec, 0xb5, 0x71}}; +const GUID QMM_MF_TRANSCODE_CONTAINERTYPE = {0x150ff23f, 0x4abc, 0x478b, {0xac, 0x4f, 0xe1, 0x91, 0x6f, 0xba, 0x1c, 0xca}}; + +const GUID QMM_MF_SD_STREAM_NAME = {0x4f1b099d, 0xd314, 0x41e5, {0xa7, 0x81, 0x7f, 0xef, 0xaa, 0x4c, 0x50, 0x1f}}; +const GUID QMM_MF_SD_LANGUAGE = {0xaf2180, 0xbdc2, 0x423c, {0xab, 0xca, 0xf5, 0x3, 0x59, 0x3b, 0xc1, 0x21}}; + +const GUID QMM_KSCATEGORY_VIDEO_CAMERA = {0xe5323777, 0xf976, 0x4f5b, {0x9b, 0x55, 0xb9, 0x46, 0x99, 0xc4, 0x6e, 0x44}}; + +const GUID QMM_MR_POLICY_VOLUME_SERVICE = {0x1abaa2ac, 0x9d3b, 0x47c6, {0xab, 0x48, 0xc5, 0x95, 0x6, 0xde, 0x78, 0x4d}}; + +const PROPERTYKEY QMM_PKEY_Device_FriendlyName = {{0xa45c254e, 0xdf1c, 0x4efd, {0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0}}, 14}; + diff --git a/src/multimedia/platform/windows/common/qwindowsmfdefs_p.h b/src/multimedia/platform/windows/common/qwindowsmfdefs_p.h new file mode 100644 index 000000000..173c8f8f0 --- /dev/null +++ b/src/multimedia/platform/windows/common/qwindowsmfdefs_p.h @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2021 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 QWINDOWSMFDEFS_P_H +#define QWINDOWSMFDEFS_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <d3d9.h> +#include <dxva2api.h> +#include <mfidl.h> + +// Stuff that is missing or incorrecty defined in MinGW. + +extern const GUID QMM_MFTranscodeContainerType_ADTS; +extern const GUID QMM_MFTranscodeContainerType_ASF; +extern const GUID QMM_MFTranscodeContainerType_AVI; +extern const GUID QMM_MFTranscodeContainerType_FLAC; +extern const GUID QMM_MFTranscodeContainerType_MP3; +extern const GUID QMM_MFTranscodeContainerType_MPEG4; +extern const GUID QMM_MFTranscodeContainerType_WAVE; + +extern const GUID QMM_MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID; +extern const GUID QMM_MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID; +extern const GUID QMM_MF_TRANSCODE_CONTAINERTYPE; + +extern const GUID QMM_MF_SD_STREAM_NAME; +extern const GUID QMM_MF_SD_LANGUAGE; + +extern const GUID QMM_KSCATEGORY_VIDEO_CAMERA; + +extern const GUID QMM_MR_POLICY_VOLUME_SERVICE; + +extern const PROPERTYKEY QMM_PKEY_Device_FriendlyName; + +extern "C" HRESULT WINAPI MFCreateDeviceSource(IMFAttributes *pAttributes, IMFMediaSource **ppSource); + +#define QMM_MFSESSION_GETFULLTOPOLOGY_CURRENT 1 +#define QMM_PRESENTATION_CURRENT_POSITION 0x7fffffffffffffff + +#ifndef __IMFVideoProcessor_INTERFACE_DEFINED__ +#define __IMFVideoProcessor_INTERFACE_DEFINED__ +DEFINE_GUID(IID_IMFVideoProcessor, 0x6AB0000C, 0xFECE, 0x4d1f, 0xA2,0xAC, 0xA9,0x57,0x35,0x30,0x65,0x6E); +MIDL_INTERFACE("6AB0000C-FECE-4d1f-A2AC-A9573530656E") +IMFVideoProcessor : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE GetAvailableVideoProcessorModes(UINT *, GUID **) = 0; + virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorCaps(LPGUID, DXVA2_VideoProcessorCaps *) = 0; + virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorMode(LPGUID) = 0; + virtual HRESULT STDMETHODCALLTYPE SetVideoProcessorMode(LPGUID) = 0; + virtual HRESULT STDMETHODCALLTYPE GetProcAmpRange(DWORD, DXVA2_ValueRange *) = 0; + virtual HRESULT STDMETHODCALLTYPE GetProcAmpValues(DWORD, DXVA2_ProcAmpValues *) = 0; + virtual HRESULT STDMETHODCALLTYPE SetProcAmpValues(DWORD, DXVA2_ProcAmpValues *) = 0; + virtual HRESULT STDMETHODCALLTYPE GetFilteringRange(DWORD, DXVA2_ValueRange *) = 0; + virtual HRESULT STDMETHODCALLTYPE GetFilteringValue(DWORD, DXVA2_Fixed32 *) = 0; + virtual HRESULT STDMETHODCALLTYPE SetFilteringValue(DWORD, DXVA2_Fixed32 *) = 0; + virtual HRESULT STDMETHODCALLTYPE GetBackgroundColor(COLORREF *) = 0; + virtual HRESULT STDMETHODCALLTYPE SetBackgroundColor(COLORREF) = 0; +}; +#ifdef __CRT_UUID_DECL +__CRT_UUID_DECL(IMFVideoProcessor, 0x6AB0000C, 0xFECE, 0x4d1f, 0xA2,0xAC, 0xA9,0x57,0x35,0x30,0x65,0x6E) +#endif +#endif // __IMFVideoProcessor_INTERFACE_DEFINED__ + +#ifndef __IMFSimpleAudioVolume_INTERFACE_DEFINED__ +#define __IMFSimpleAudioVolume_INTERFACE_DEFINED__ +DEFINE_GUID(IID_IMFSimpleAudioVolume, 0x089EDF13, 0xCF71, 0x4338, 0x8D,0x13, 0x9E,0x56,0x9D,0xBD,0xC3,0x19); +MIDL_INTERFACE("089EDF13-CF71-4338-8D13-9E569DBDC319") +IMFSimpleAudioVolume : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE SetMasterVolume(float) = 0; + virtual HRESULT STDMETHODCALLTYPE GetMasterVolume(float *) = 0; + virtual HRESULT STDMETHODCALLTYPE SetMute(BOOL) = 0; + virtual HRESULT STDMETHODCALLTYPE GetMute(BOOL *) = 0; +}; +#ifdef __CRT_UUID_DECL +__CRT_UUID_DECL(IMFSimpleAudioVolume, 0x089EDF13, 0xCF71, 0x4338, 0x8D,0x13, 0x9E,0x56,0x9D,0xBD,0xC3,0x19) +#endif +#endif // __IMFSimpleAudioVolume_INTERFACE_DEFINED__ + +#endif // QWINDOWSMFDEFS_P_H + diff --git a/src/multimedia/platform/windows/common/qwindowsmultimediautils.cpp b/src/multimedia/platform/windows/common/qwindowsmultimediautils.cpp index ad6a234eb..3c2f40d48 100644 --- a/src/multimedia/platform/windows/common/qwindowsmultimediautils.cpp +++ b/src/multimedia/platform/windows/common/qwindowsmultimediautils.cpp @@ -37,10 +37,18 @@ ** ****************************************************************************/ +#if defined(WINVER) && WINVER < _WIN32_WINNT_WIN10 +# undef WINVER +#endif +#if !defined(WINVER) +# define WINVER _WIN32_WINNT_WIN10 // Enables newer audio formats. +#endif + #include "qwindowsmultimediautils_p.h" #include <mfapi.h> #include <mfidl.h> +#include <private/qwindowsmfdefs_p.h> QT_BEGIN_NAMESPACE @@ -199,13 +207,13 @@ GUID QWindowsMultimediaUtils::containerForVideoFileFormat(QMediaFormat::FileForm { switch (format) { case QMediaFormat::FileFormat::MPEG4: - return MFTranscodeContainerType_MPEG4; + return QMM_MFTranscodeContainerType_MPEG4; case QMediaFormat::FileFormat::WMV: - return MFTranscodeContainerType_ASF; + return QMM_MFTranscodeContainerType_ASF; case QMediaFormat::FileFormat::AVI: - return MFTranscodeContainerType_AVI; + return QMM_MFTranscodeContainerType_AVI; default: - return MFTranscodeContainerType_MPEG4; + return QMM_MFTranscodeContainerType_MPEG4; } } @@ -213,19 +221,19 @@ GUID QWindowsMultimediaUtils::containerForAudioFileFormat(QMediaFormat::FileForm { switch (format) { case QMediaFormat::FileFormat::MP3: - return MFTranscodeContainerType_MP3; + return QMM_MFTranscodeContainerType_MP3; case QMediaFormat::FileFormat::AAC: - return MFTranscodeContainerType_ADTS; + return QMM_MFTranscodeContainerType_ADTS; case QMediaFormat::FileFormat::Mpeg4Audio: - return MFTranscodeContainerType_MPEG4; + return QMM_MFTranscodeContainerType_MPEG4; case QMediaFormat::FileFormat::WMA: - return MFTranscodeContainerType_ASF; + return QMM_MFTranscodeContainerType_ASF; case QMediaFormat::FileFormat::FLAC: - return MFTranscodeContainerType_FLAC; + return QMM_MFTranscodeContainerType_FLAC; case QMediaFormat::FileFormat::Wave: - return MFTranscodeContainerType_WAVE; + return QMM_MFTranscodeContainerType_WAVE; default: - return MFTranscodeContainerType_MPEG4; + return QMM_MFTranscodeContainerType_MPEG4; } } diff --git a/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h b/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h index 6efdbb346..ae4756c3d 100644 --- a/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h +++ b/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h @@ -64,23 +64,23 @@ public: MFAudioDecoderControl(QAudioDecoder *parent); ~MFAudioDecoderControl(); - QUrl source() const; - void setSource(const QUrl &fileName); + QUrl source() const override; + void setSource(const QUrl &fileName) override; - QIODevice* sourceDevice() const; - void setSourceDevice(QIODevice *device); + QIODevice* sourceDevice() const override; + void setSourceDevice(QIODevice *device) override; - void start(); - void stop(); + void start() override; + void stop() override; QAudioFormat audioFormat() const override; void setAudioFormat(const QAudioFormat &format) override; - QAudioBuffer read(); - bool bufferAvailable() const; + QAudioBuffer read() override; + bool bufferAvailable() const override; - qint64 position() const; - qint64 duration() const; + qint64 position() const override; + qint64 duration() const override; private Q_SLOTS: void handleMediaSourceReady(); diff --git a/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h b/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h index 7d63f5368..da571153e 100644 --- a/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h +++ b/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h @@ -76,15 +76,15 @@ public: QList<IMFSample*> takeSamples(); //internal samples will be cleared after this //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); - STDMETHODIMP_(ULONG) AddRef(void); - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; + STDMETHODIMP_(ULONG) AddRef(void) override; + STDMETHODIMP_(ULONG) Release(void) override; //from IMFSourceReaderCallback STDMETHODIMP OnReadSample(HRESULT hrStatus, DWORD dwStreamIndex, - DWORD dwStreamFlags, LONGLONG llTimestamp, IMFSample *pSample); - STDMETHODIMP OnFlush(DWORD dwStreamIndex); - STDMETHODIMP OnEvent(DWORD dwStreamIndex, IMFMediaEvent *pEvent); + DWORD dwStreamFlags, LONGLONG llTimestamp, IMFSample *pSample) override; + STDMETHODIMP OnFlush(DWORD dwStreamIndex) override; + STDMETHODIMP OnEvent(DWORD dwStreamIndex, IMFMediaEvent *pEvent) override; Q_SIGNALS: void sampleAdded(); diff --git a/src/multimedia/platform/windows/evr/evrcustompresenter.cpp b/src/multimedia/platform/windows/evr/evrcustompresenter.cpp index 086fb57d4..d5561d378 100644 --- a/src/multimedia/platform/windows/evr/evrcustompresenter.cpp +++ b/src/multimedia/platform/windows/evr/evrcustompresenter.cpp @@ -43,6 +43,7 @@ #include "evrhelpers_p.h" #include <private/qwindowsmultimediautils_p.h> #include <private/qplatformvideosink_p.h> +#include <private/qwindowsmfdefs_p.h> #include <QtGui/private/qrhi_p.h> @@ -634,7 +635,7 @@ HRESULT EVRCustomPresenter::GetService(REFGUID guidService, REFIID riid, LPVOID return E_POINTER; // The only service GUID that we support is MR_VIDEO_RENDER_SERVICE. - if (guidService != mr_VIDEO_RENDER_SERVICE) + if (guidService != MR_VIDEO_RENDER_SERVICE) return MF_E_UNSUPPORTED_SERVICE; // First try to get the service interface from the D3DPresentEngine object. @@ -651,7 +652,7 @@ HRESULT EVRCustomPresenter::GetDeviceID(IID* deviceID) if (!deviceID) return E_POINTER; - *deviceID = iid_IDirect3DDevice9; + *deviceID = IID_IDirect3DDevice9; return S_OK; } @@ -678,7 +679,7 @@ HRESULT EVRCustomPresenter::InitServicePointers(IMFTopologyServiceLookup *lookup objectCount = 1; lookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, - mr_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_clock), + MR_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_clock), &objectCount ); @@ -686,7 +687,7 @@ HRESULT EVRCustomPresenter::InitServicePointers(IMFTopologyServiceLookup *lookup objectCount = 1; hr = lookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, - mr_VIDEO_MIXER_SERVICE, IID_PPV_ARGS(&m_mixer), + MR_VIDEO_MIXER_SERVICE, IID_PPV_ARGS(&m_mixer), &objectCount ); @@ -702,7 +703,7 @@ HRESULT EVRCustomPresenter::InitServicePointers(IMFTopologyServiceLookup *lookup objectCount = 1; hr = lookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, - mr_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_mediaEventSink), + MR_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_mediaEventSink), &objectCount ); @@ -838,7 +839,7 @@ HRESULT EVRCustomPresenter::OnClockStart(MFTIME, LONGLONG clockStartOffset) // If the clock position changes while the clock is active, it // is a seek request. We need to flush all pending samples. - if (clockStartOffset != PRESENTATION_CURRENT_POSITION) + if (clockStartOffset != QMM_PRESENTATION_CURRENT_POSITION) flush(); } else { m_renderState = RenderStarted; @@ -1980,7 +1981,7 @@ HRESULT setMixerSourceRect(IMFTransform *mixer, const MFVideoNormalizedRect &sou HRESULT hr = mixer->GetAttributes(&attributes); if (SUCCEEDED(hr)) { - hr = attributes->SetBlob(video_ZOOM_RECT, reinterpret_cast<const UINT8*>(&sourceRect), + hr = attributes->SetBlob(VIDEO_ZOOM_RECT, reinterpret_cast<const UINT8*>(&sourceRect), sizeof(sourceRect)); attributes->Release(); } diff --git a/src/multimedia/platform/windows/evr/evrcustompresenter_p.h b/src/multimedia/platform/windows/evr/evrcustompresenter_p.h index 9b34e449f..1bf443efa 100644 --- a/src/multimedia/platform/windows/evr/evrcustompresenter_p.h +++ b/src/multimedia/platform/windows/evr/evrcustompresenter_p.h @@ -58,7 +58,13 @@ #include <qvideoframeformat.h> #include <qvideosink.h> -#include "evrdefs_p.h" +#include <d3d9.h> +#include <dxva2api.h> +#include <evr9.h> +#include <evr.h> +#include <mfidl.h> +#include <mfapi.h> +#include <mferror.h> QT_BEGIN_NAMESPACE diff --git a/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp b/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp index 89c22d3ae..fa1a8dbc4 100644 --- a/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp +++ b/src/multimedia/platform/windows/evr/evrd3dpresentengine.cpp @@ -60,14 +60,15 @@ public: , m_surface(0) , m_mapMode(QVideoFrame::NotMapped) { + Q_UNUSED(engine); if (m_sample) { m_sample->AddRef(); IMFMediaBuffer *buffer; if (SUCCEEDED(m_sample->GetBufferByIndex(0, &buffer))) { MFGetService(buffer, - mr_BUFFER_SERVICE, - iid_IDirect3DSurface9, + MR_BUFFER_SERVICE, + IID_IDirect3DSurface9, reinterpret_cast<void **>(&m_surface)); buffer->Release(); } diff --git a/src/multimedia/platform/windows/evr/evrdefs.cpp b/src/multimedia/platform/windows/evr/evrdefs.cpp deleted file mode 100644 index 94370a14a..000000000 --- a/src/multimedia/platform/windows/evr/evrdefs.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 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 "evrdefs_p.h" - -const CLSID clsid_EnhancedVideoRenderer = { 0xfa10746c, 0x9b63, 0x4b6c, {0xbc, 0x49, 0xfc, 0x30, 0xe, 0xa5, 0xf2, 0x56} }; -const GUID mr_VIDEO_RENDER_SERVICE = { 0x1092a86c, 0xab1a, 0x459a, {0xa3, 0x36, 0x83, 0x1f, 0xbc, 0x4d, 0x11, 0xff} }; -const GUID mr_VIDEO_MIXER_SERVICE = { 0x73cd2fc, 0x6cf4, 0x40b7, {0x88, 0x59, 0xe8, 0x95, 0x52, 0xc8, 0x41, 0xf8} }; -const GUID mr_BUFFER_SERVICE = { 0xa562248c, 0x9ac6, 0x4ffc, {0x9f, 0xba, 0x3a, 0xf8, 0xf8, 0xad, 0x1a, 0x4d} }; -const GUID video_ZOOM_RECT = { 0x7aaa1638, 0x1b7f, 0x4c93, {0xbd, 0x89, 0x5b, 0x9c, 0x9f, 0xb6, 0xfc, 0xf0} }; -const GUID iid_IDirect3DDevice9 = { 0xd0223b96, 0xbf7a, 0x43fd, {0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb} }; -const GUID iid_IDirect3DSurface9 = { 0xcfbaf3a, 0x9ff6, 0x429a, {0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b} }; diff --git a/src/multimedia/platform/windows/evr/evrdefs_p.h b/src/multimedia/platform/windows/evr/evrdefs_p.h deleted file mode 100644 index f9df48387..000000000 --- a/src/multimedia/platform/windows/evr/evrdefs_p.h +++ /dev/null @@ -1,364 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 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 EVRDEFS_H -#define EVRDEFS_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include <d3d9.h> -#include <evr9.h> -#include <evr.h> -#include <dxva2api.h> -#include <mfapi.h> -#include <mfidl.h> -#include <mferror.h> - -extern const CLSID clsid_EnhancedVideoRenderer; -extern const GUID mr_VIDEO_RENDER_SERVICE; -extern const GUID mr_VIDEO_MIXER_SERVICE; -extern const GUID mr_BUFFER_SERVICE; -extern const GUID video_ZOOM_RECT; -extern const GUID iid_IDirect3DDevice9; -extern const GUID iid_IDirect3DSurface9; - -// The following is required to compile with MinGW - -extern "C" { -HRESULT WINAPI MFCreateVideoSampleFromSurface(IUnknown *pUnkSurface, IMFSample **ppSample); -HRESULT WINAPI Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex**); -} - -#ifndef PRESENTATION_CURRENT_POSITION -#define PRESENTATION_CURRENT_POSITION 0x7fffffffffffffff -#endif - -#ifndef MF_E_SHUTDOWN -#define MF_E_SHUTDOWN ((HRESULT)0xC00D3E85L) -#endif - -#ifndef MF_E_SAMPLEALLOCATOR_EMPTY -#define MF_E_SAMPLEALLOCATOR_EMPTY ((HRESULT)0xC00D4A3EL) -#endif - -#ifndef MF_E_TRANSFORM_STREAM_CHANGE -#define MF_E_TRANSFORM_STREAM_CHANGE ((HRESULT)0xC00D6D61L) -#endif - -#ifndef MF_E_TRANSFORM_NEED_MORE_INPUT -#define MF_E_TRANSFORM_NEED_MORE_INPUT ((HRESULT)0xC00D6D72L) -#endif - -#if defined(__GNUC__) && !defined(_MFVideoNormalizedRect_) -#define _MFVideoNormalizedRect_ -typedef struct MFVideoNormalizedRect { - float left; - float top; - float right; - float bottom; -} MFVideoNormalizedRect; -#endif - -#include <initguid.h> - -#ifndef __IMFGetService_INTERFACE_DEFINED__ -#define __IMFGetService_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFGetService, 0xfa993888, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7); -MIDL_INTERFACE("fa993888-4383-415a-a930-dd472a8cf6f7") -IMFGetService : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE GetService(REFGUID, REFIID, LPVOID *) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFGetService, 0xfa993888, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7) -#endif -#endif // __IMFGetService_INTERFACE_DEFINED__ - -#ifndef __IMFVideoDisplayControl_INTERFACE_DEFINED__ -#define __IMFVideoDisplayControl_INTERFACE_DEFINED__ -typedef enum MFVideoAspectRatioMode -{ - MFVideoARMode_None = 0, - MFVideoARMode_PreservePicture = 0x1, - MFVideoARMode_PreservePixel = 0x2, - MFVideoARMode_NonLinearStretch = 0x4, - MFVideoARMode_Mask = 0x7 -} MFVideoAspectRatioMode; - -DEFINE_GUID(IID_IMFVideoDisplayControl, 0xa490b1e4, 0xab84, 0x4d31, 0xa1,0xb2, 0x18,0x1e,0x03,0xb1,0x07,0x7a); -MIDL_INTERFACE("a490b1e4-ab84-4d31-a1b2-181e03b1077a") -IMFVideoDisplayControl : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE GetNativeVideoSize(SIZE *, SIZE *) = 0; - virtual HRESULT STDMETHODCALLTYPE GetIdealVideoSize(SIZE *, SIZE *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetVideoPosition(const MFVideoNormalizedRect *, const LPRECT) = 0; - virtual HRESULT STDMETHODCALLTYPE GetVideoPosition(MFVideoNormalizedRect *, LPRECT) = 0; - virtual HRESULT STDMETHODCALLTYPE SetAspectRatioMode(DWORD) = 0; - virtual HRESULT STDMETHODCALLTYPE GetAspectRatioMode(DWORD *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetVideoWindow(HWND) = 0; - virtual HRESULT STDMETHODCALLTYPE GetVideoWindow(HWND *) = 0; - virtual HRESULT STDMETHODCALLTYPE RepaintVideo(void) = 0; - virtual HRESULT STDMETHODCALLTYPE GetCurrentImage(BITMAPINFOHEADER *, BYTE **, DWORD *, LONGLONG *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetBorderColor(COLORREF) = 0; - virtual HRESULT STDMETHODCALLTYPE GetBorderColor(COLORREF *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetRenderingPrefs(DWORD) = 0; - virtual HRESULT STDMETHODCALLTYPE GetRenderingPrefs(DWORD *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetFullscreen(BOOL) = 0; - virtual HRESULT STDMETHODCALLTYPE GetFullscreen(BOOL *) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFVideoDisplayControl, 0xa490b1e4, 0xab84, 0x4d31, 0xa1,0xb2, 0x18,0x1e,0x03,0xb1,0x07,0x7a) -#endif -#endif // __IMFVideoDisplayControl_INTERFACE_DEFINED__ - -#ifndef __IMFVideoProcessor_INTERFACE_DEFINED__ -#define __IMFVideoProcessor_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFVideoProcessor, 0x6AB0000C, 0xFECE, 0x4d1f, 0xA2,0xAC, 0xA9,0x57,0x35,0x30,0x65,0x6E); -MIDL_INTERFACE("6AB0000C-FECE-4d1f-A2AC-A9573530656E") -IMFVideoProcessor : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE GetAvailableVideoProcessorModes(UINT *, GUID **) = 0; - virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorCaps(LPGUID, DXVA2_VideoProcessorCaps *) = 0; - virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorMode(LPGUID) = 0; - virtual HRESULT STDMETHODCALLTYPE SetVideoProcessorMode(LPGUID) = 0; - virtual HRESULT STDMETHODCALLTYPE GetProcAmpRange(DWORD, DXVA2_ValueRange *) = 0; - virtual HRESULT STDMETHODCALLTYPE GetProcAmpValues(DWORD, DXVA2_ProcAmpValues *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetProcAmpValues(DWORD, DXVA2_ProcAmpValues *) = 0; - virtual HRESULT STDMETHODCALLTYPE GetFilteringRange(DWORD, DXVA2_ValueRange *) = 0; - virtual HRESULT STDMETHODCALLTYPE GetFilteringValue(DWORD, DXVA2_Fixed32 *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetFilteringValue(DWORD, DXVA2_Fixed32 *) = 0; - virtual HRESULT STDMETHODCALLTYPE GetBackgroundColor(COLORREF *) = 0; - virtual HRESULT STDMETHODCALLTYPE SetBackgroundColor(COLORREF) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFVideoProcessor, 0x6AB0000C, 0xFECE, 0x4d1f, 0xA2,0xAC, 0xA9,0x57,0x35,0x30,0x65,0x6E) -#endif -#endif // __IMFVideoProcessor_INTERFACE_DEFINED__ - -#ifndef __IMFVideoDeviceID_INTERFACE_DEFINED__ -#define __IMFVideoDeviceID_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFVideoDeviceID, 0xA38D9567, 0x5A9C, 0x4f3c, 0xB2,0x93, 0x8E,0xB4,0x15,0xB2,0x79,0xBA); -MIDL_INTERFACE("A38D9567-5A9C-4f3c-B293-8EB415B279BA") -IMFVideoDeviceID : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE GetDeviceID(IID *pDeviceID) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFVideoDeviceID, 0xA38D9567, 0x5A9C, 0x4f3c, 0xB2,0x93, 0x8E,0xB4,0x15,0xB2,0x79,0xBA) -#endif -#endif // __IMFVideoDeviceID_INTERFACE_DEFINED__ - -#ifndef __IMFClockStateSink_INTERFACE_DEFINED__ -#define __IMFClockStateSink_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFClockStateSink, 0xF6696E82, 0x74F7, 0x4f3d, 0xA1,0x78, 0x8A,0x5E,0x09,0xC3,0x65,0x9F); -MIDL_INTERFACE("F6696E82-74F7-4f3d-A178-8A5E09C3659F") -IMFClockStateSink : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset) = 0; - virtual HRESULT STDMETHODCALLTYPE OnClockStop(MFTIME hnsSystemTime) = 0; - virtual HRESULT STDMETHODCALLTYPE OnClockPause(MFTIME hnsSystemTime) = 0; - virtual HRESULT STDMETHODCALLTYPE OnClockRestart(MFTIME hnsSystemTime) = 0; - virtual HRESULT STDMETHODCALLTYPE OnClockSetRate(MFTIME hnsSystemTime, float flRate) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFClockStateSink, 0xF6696E82, 0x74F7, 0x4f3d, 0xA1,0x78, 0x8A,0x5E,0x09,0xC3,0x65,0x9F) -#endif -#endif // __IMFClockStateSink_INTERFACE_DEFINED__ - -#ifndef __IMFVideoPresenter_INTERFACE_DEFINED__ -#define __IMFVideoPresenter_INTERFACE_DEFINED__ -typedef enum MFVP_MESSAGE_TYPE -{ - MFVP_MESSAGE_FLUSH = 0, - MFVP_MESSAGE_INVALIDATEMEDIATYPE = 0x1, - MFVP_MESSAGE_PROCESSINPUTNOTIFY = 0x2, - MFVP_MESSAGE_BEGINSTREAMING = 0x3, - MFVP_MESSAGE_ENDSTREAMING = 0x4, - MFVP_MESSAGE_ENDOFSTREAM = 0x5, - MFVP_MESSAGE_STEP = 0x6, - MFVP_MESSAGE_CANCELSTEP = 0x7 -} MFVP_MESSAGE_TYPE; - -DEFINE_GUID(IID_IMFVideoPresenter, 0x29AFF080, 0x182A, 0x4a5d, 0xAF,0x3B, 0x44,0x8F,0x3A,0x63,0x46,0xCB); -MIDL_INTERFACE("29AFF080-182A-4a5d-AF3B-448F3A6346CB") -IMFVideoPresenter : public IMFClockStateSink -{ -public: - virtual HRESULT STDMETHODCALLTYPE ProcessMessage(MFVP_MESSAGE_TYPE eMessage, ULONG_PTR ulParam) = 0; - virtual HRESULT STDMETHODCALLTYPE GetCurrentMediaType(IMFVideoMediaType **ppMediaType) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFVideoPresenter, 0x29AFF080, 0x182A, 0x4a5d, 0xAF,0x3B, 0x44,0x8F,0x3A,0x63,0x46,0xCB) -#endif -#endif // __IMFVideoPresenter_INTERFACE_DEFINED__ - -#ifndef __IMFRateSupport_INTERFACE_DEFINED__ -#define __IMFRateSupport_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFRateSupport, 0x0a9ccdbc, 0xd797, 0x4563, 0x96,0x67, 0x94,0xec,0x5d,0x79,0x29,0x2d); -MIDL_INTERFACE("0a9ccdbc-d797-4563-9667-94ec5d79292d") -IMFRateSupport : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE GetSlowestRate(MFRATE_DIRECTION eDirection, BOOL fThin, float *pflRate) = 0; - virtual HRESULT STDMETHODCALLTYPE GetFastestRate(MFRATE_DIRECTION eDirection, BOOL fThin, float *pflRate) = 0; - virtual HRESULT STDMETHODCALLTYPE IsRateSupported(BOOL fThin, float flRate, float *pflNearestSupportedRate) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFRateSupport, 0x0a9ccdbc, 0xd797, 0x4563, 0x96,0x67, 0x94,0xec,0x5d,0x79,0x29,0x2d) -#endif -#endif // __IMFRateSupport_INTERFACE_DEFINED__ - -#ifndef __IMFTopologyServiceLookup_INTERFACE_DEFINED__ -#define __IMFTopologyServiceLookup_INTERFACE_DEFINED__ -typedef enum _MF_SERVICE_LOOKUP_TYPE -{ - MF_SERVICE_LOOKUP_UPSTREAM = 0, - MF_SERVICE_LOOKUP_UPSTREAM_DIRECT = (MF_SERVICE_LOOKUP_UPSTREAM + 1), - MF_SERVICE_LOOKUP_DOWNSTREAM = (MF_SERVICE_LOOKUP_UPSTREAM_DIRECT + 1), - MF_SERVICE_LOOKUP_DOWNSTREAM_DIRECT = (MF_SERVICE_LOOKUP_DOWNSTREAM + 1), - MF_SERVICE_LOOKUP_ALL = (MF_SERVICE_LOOKUP_DOWNSTREAM_DIRECT + 1), - MF_SERVICE_LOOKUP_GLOBAL = (MF_SERVICE_LOOKUP_ALL + 1) -} MF_SERVICE_LOOKUP_TYPE; - -DEFINE_GUID(IID_IMFTopologyServiceLookup, 0xfa993889, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7); -MIDL_INTERFACE("fa993889-4383-415a-a930-dd472a8cf6f7") -IMFTopologyServiceLookup : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE LookupService(MF_SERVICE_LOOKUP_TYPE Type, - DWORD dwIndex, - REFGUID guidService, - REFIID riid, - LPVOID *ppvObjects, - DWORD *pnObjects) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFTopologyServiceLookup, 0xfa993889, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7) -#endif -#endif // __IMFTopologyServiceLookup_INTERFACE_DEFINED__ - -#ifndef __IMFTopologyServiceLookupClient_INTERFACE_DEFINED__ -#define __IMFTopologyServiceLookupClient_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFTopologyServiceLookupClient, 0xfa99388a, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7); -MIDL_INTERFACE("fa99388a-4383-415a-a930-dd472a8cf6f7") -IMFTopologyServiceLookupClient : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE InitServicePointers(IMFTopologyServiceLookup *pLookup) = 0; - virtual HRESULT STDMETHODCALLTYPE ReleaseServicePointers(void) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFTopologyServiceLookupClient, 0xfa99388a, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7) -#endif -#endif // __IMFTopologyServiceLookupClient_INTERFACE_DEFINED__ - -#ifndef __IMediaEventSink_INTERFACE_DEFINED__ -#define __IMediaEventSink_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMediaEventSink, 0x56a868a2, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70); -MIDL_INTERFACE("56a868a2-0ad4-11ce-b03a-0020af0ba770") -IMediaEventSink : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE Notify(long EventCode, LONG_PTR EventParam1, LONG_PTR EventParam2) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMediaEventSink, 0x56a868a2, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70) -#endif -#endif // __IMediaEventSink_INTERFACE_DEFINED__ - -#ifndef __IMFVideoRenderer_INTERFACE_DEFINED__ -#define __IMFVideoRenderer_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFVideoRenderer, 0xDFDFD197, 0xA9CA, 0x43d8, 0xB3,0x41, 0x6A,0xF3,0x50,0x37,0x92,0xCD); -MIDL_INTERFACE("DFDFD197-A9CA-43d8-B341-6AF3503792CD") -IMFVideoRenderer : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE InitializeRenderer(IMFTransform *pVideoMixer, - IMFVideoPresenter *pVideoPresenter) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFVideoRenderer, 0xDFDFD197, 0xA9CA, 0x43d8, 0xB3,0x41, 0x6A,0xF3,0x50,0x37,0x92,0xCD) -#endif -#endif // __IMFVideoRenderer_INTERFACE_DEFINED__ - -#ifndef __IMFTrackedSample_INTERFACE_DEFINED__ -#define __IMFTrackedSample_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFTrackedSample, 0x245BF8E9, 0x0755, 0x40f7, 0x88,0xA5, 0xAE,0x0F,0x18,0xD5,0x5E,0x17); -MIDL_INTERFACE("245BF8E9-0755-40f7-88A5-AE0F18D55E17") -IMFTrackedSample : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE SetAllocator(IMFAsyncCallback *pSampleAllocator, IUnknown *pUnkState) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFTrackedSample, 0x245BF8E9, 0x0755, 0x40f7, 0x88,0xA5, 0xAE,0x0F,0x18,0xD5,0x5E,0x17) -#endif -#endif // __IMFTrackedSample_INTERFACE_DEFINED__ - -#ifndef __IMFDesiredSample_INTERFACE_DEFINED__ -#define __IMFDesiredSample_INTERFACE_DEFINED__ -DEFINE_GUID(IID_IMFDesiredSample, 0x56C294D0, 0x753E, 0x4260, 0x8D,0x61, 0xA3,0xD8,0x82,0x0B,0x1D,0x54); -MIDL_INTERFACE("56C294D0-753E-4260-8D61-A3D8820B1D54") -IMFDesiredSample : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE GetDesiredSampleTimeAndDuration(LONGLONG *phnsSampleTime, - LONGLONG *phnsSampleDuration) = 0; - virtual void STDMETHODCALLTYPE SetDesiredSampleTimeAndDuration(LONGLONG hnsSampleTime, - LONGLONG hnsSampleDuration) = 0; - virtual void STDMETHODCALLTYPE Clear( void) = 0; -}; -#ifdef __CRT_UUID_DECL -__CRT_UUID_DECL(IMFDesiredSample, 0x56C294D0, 0x753E, 0x4260, 0x8D,0x61, 0xA3,0xD8,0x82,0x0B,0x1D,0x54) -#endif -#endif - -#endif // EVRDEFS_H - diff --git a/src/multimedia/platform/windows/evr/evrhelpers_p.h b/src/multimedia/platform/windows/evr/evrhelpers_p.h index 340658571..d7d6fb298 100644 --- a/src/multimedia/platform/windows/evr/evrhelpers_p.h +++ b/src/multimedia/platform/windows/evr/evrhelpers_p.h @@ -51,8 +51,14 @@ // We mean it. // -#include "evrdefs_p.h" #include <qvideoframe.h> +#include <d3d9.h> +#include <dxva2api.h> +#include <evr9.h> +#include <evr.h> +#include <mfidl.h> +#include <mfapi.h> +#include <mferror.h> QT_BEGIN_NAMESPACE diff --git a/src/multimedia/platform/windows/evr/evrvideowindowcontrol.cpp b/src/multimedia/platform/windows/evr/evrvideowindowcontrol.cpp index 18f883289..013a5dc4d 100644 --- a/src/multimedia/platform/windows/evr/evrvideowindowcontrol.cpp +++ b/src/multimedia/platform/windows/evr/evrvideowindowcontrol.cpp @@ -70,9 +70,9 @@ bool EvrVideoWindowControl::setEvr(IUnknown *evr) IMFGetService *service = NULL; if (SUCCEEDED(evr->QueryInterface(IID_PPV_ARGS(&service))) - && SUCCEEDED(service->GetService(mr_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_displayControl)))) { + && SUCCEEDED(service->GetService(MR_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_displayControl)))) { - service->GetService(mr_VIDEO_MIXER_SERVICE, IID_PPV_ARGS(&m_processor)); + service->GetService(MR_VIDEO_MIXER_SERVICE, IID_PPV_ARGS(&m_processor)); setWinId(m_windowId); setDisplayRect(m_displayRect); diff --git a/src/multimedia/platform/windows/evr/evrvideowindowcontrol_p.h b/src/multimedia/platform/windows/evr/evrvideowindowcontrol_p.h index b9fbc271c..19b67df34 100644 --- a/src/multimedia/platform/windows/evr/evrvideowindowcontrol_p.h +++ b/src/multimedia/platform/windows/evr/evrvideowindowcontrol_p.h @@ -51,9 +51,12 @@ // We mean it. // -#include "private/qplatformvideosink_p.h" - -#include "evrdefs_p.h" +#include <d3d9.h> +#include <dxva2api.h> +#include <evr9.h> +#include <evr.h> +#include <private/qplatformvideosink_p.h> +#include <private/qwindowsmfdefs_p.h> QT_BEGIN_NAMESPACE diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader.cpp b/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader.cpp index 2e338476e..a1ff6602f 100644 --- a/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader.cpp +++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader.cpp @@ -44,6 +44,7 @@ #include <qmediadevices.h> #include <qaudiodevice.h> #include <private/qmemoryvideobuffer_p.h> +#include <private/qwindowsmfdefs_p.h> #include <QtCore/qdebug.h> #include <mmdeviceapi.h> @@ -78,8 +79,8 @@ HRESULT QWindowsMediaDeviceReader::createSource(const QString &deviceId, bool vi if (SUCCEEDED(hr)) { hr = sourceAttributes->SetGUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, - video ? MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID - : MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID); + video ? QMM_MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID + : QMM_MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID); if (SUCCEEDED(hr)) { hr = sourceAttributes->SetString(video ? MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK @@ -176,8 +177,8 @@ DWORD QWindowsMediaDeviceReader::findMediaTypeIndex(const QCameraFormat &reqForm float frameRate = float(num) / den; if (!reqFormat.isNull() - && reqFormat.resolution().width() == width - && reqFormat.resolution().height() == height + && UINT32(reqFormat.resolution().width()) == width + && UINT32(reqFormat.resolution().height()) == height && qFuzzyCompare(reqFormat.maxFrameRate(), frameRate) && reqFormat.pixelFormat() == pixelFormat) { mediaType->Release(); @@ -419,7 +420,7 @@ HRESULT QWindowsMediaDeviceReader::startMonitoring() IMFSimpleAudioVolume *audioVolume = nullptr; - if (SUCCEEDED(MFGetService(mediaSink, MR_POLICY_VOLUME_SERVICE, IID_PPV_ARGS(&audioVolume)))) { + if (SUCCEEDED(MFGetService(mediaSink, QMM_MR_POLICY_VOLUME_SERVICE, IID_PPV_ARGS(&audioVolume)))) { audioVolume->SetMasterVolume(float(m_outputVolume)); audioVolume->SetMute(m_outputMuted); audioVolume->Release(); @@ -683,7 +684,7 @@ bool QWindowsMediaDeviceReader::startRecording(const QString &fileName, const GU static_cast<IMFSinkWriterCallback*>(this)); if (SUCCEEDED(hr)) { - hr = writerAttributes->SetGUID(MF_TRANSCODE_CONTAINERTYPE, container); + hr = writerAttributes->SetGUID(QMM_MF_TRANSCODE_CONTAINERTYPE, container); if (SUCCEEDED(hr)) { hr = MFCreateSinkWriterFromURL(reinterpret_cast<LPCWSTR>(fileName.utf16()), @@ -868,7 +869,7 @@ void QWindowsMediaDeviceReader::setOutputMuted(bool muted) if (m_active && m_monitorSink) { IMFSimpleAudioVolume *audioVolume = nullptr; - if (SUCCEEDED(MFGetService(m_monitorSink, MR_POLICY_VOLUME_SERVICE, + if (SUCCEEDED(MFGetService(m_monitorSink, QMM_MR_POLICY_VOLUME_SERVICE, IID_PPV_ARGS(&audioVolume)))) { audioVolume->SetMute(m_outputMuted); audioVolume->Release(); @@ -884,7 +885,7 @@ void QWindowsMediaDeviceReader::setOutputVolume(qreal volume) if (m_active && m_monitorSink) { IMFSimpleAudioVolume *audioVolume = nullptr; - if (SUCCEEDED(MFGetService(m_monitorSink, MR_POLICY_VOLUME_SERVICE, + if (SUCCEEDED(MFGetService(m_monitorSink, QMM_MR_POLICY_VOLUME_SERVICE, IID_PPV_ARGS(&audioVolume)))) { audioVolume->SetMasterVolume(float(m_outputVolume)); audioVolume->Release(); diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader_p.h b/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader_p.h index e7af22e5d..6164d6804 100644 --- a/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader_p.h +++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediadevicereader_p.h @@ -77,19 +77,19 @@ public: ~QWindowsMediaDeviceReader(); //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); - STDMETHODIMP_(ULONG) AddRef(void); - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; + STDMETHODIMP_(ULONG) AddRef(void) override; + STDMETHODIMP_(ULONG) Release(void) override; //from IMFSourceReaderCallback STDMETHODIMP OnReadSample(HRESULT hrStatus, DWORD dwStreamIndex, - DWORD dwStreamFlags, LONGLONG llTimestamp, IMFSample *pSample); - STDMETHODIMP OnFlush(DWORD dwStreamIndex); - STDMETHODIMP OnEvent(DWORD dwStreamIndex, IMFMediaEvent *pEvent); + DWORD dwStreamFlags, LONGLONG llTimestamp, IMFSample *pSample) override; + STDMETHODIMP OnFlush(DWORD dwStreamIndex) override; + STDMETHODIMP OnEvent(DWORD dwStreamIndex, IMFMediaEvent *pEvent) override; //from IMFSinkWriterCallback - STDMETHODIMP OnFinalize(HRESULT hrStatus); - STDMETHODIMP OnMarker(DWORD dwStreamIndex, LPVOID pvContext); + STDMETHODIMP OnFinalize(HRESULT hrStatus) override; + STDMETHODIMP OnMarker(DWORD dwStreamIndex, LPVOID pvContext) override; bool activate(const QString &cameraId, const QCameraFormat &cameraFormat, diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp index 917a92082..1f727e381 100644 --- a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp +++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp @@ -224,6 +224,7 @@ void QWindowsMediaEncoder::onStreamingError(int errorCode) void QWindowsMediaEncoder::onRecordingError(int errorCode) { + Q_UNUSED(errorCode); error(QMediaRecorder::ResourceError, tr("Recording error")); auto lastState = m_state; diff --git a/src/multimedia/platform/windows/mfstream_p.h b/src/multimedia/platform/windows/mfstream_p.h index 975d02c9d..725e23417 100644 --- a/src/multimedia/platform/windows/mfstream_p.h +++ b/src/multimedia/platform/windows/mfstream_p.h @@ -68,64 +68,65 @@ public: ~MFStream(); //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; - STDMETHODIMP_(ULONG) AddRef(void); + STDMETHODIMP_(ULONG) AddRef(void) override; - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP_(ULONG) Release(void) override; //from IMFByteStream - STDMETHODIMP GetCapabilities(DWORD *pdwCapabilities); + STDMETHODIMP GetCapabilities(DWORD *pdwCapabilities) override; - STDMETHODIMP GetLength(QWORD *pqwLength); + STDMETHODIMP GetLength(QWORD *pqwLength) override; - STDMETHODIMP SetLength(QWORD); + STDMETHODIMP SetLength(QWORD) override; - STDMETHODIMP GetCurrentPosition(QWORD *pqwPosition); + STDMETHODIMP GetCurrentPosition(QWORD *pqwPosition) override; - STDMETHODIMP SetCurrentPosition(QWORD qwPosition); + STDMETHODIMP SetCurrentPosition(QWORD qwPosition) override; - STDMETHODIMP IsEndOfStream(BOOL *pfEndOfStream); + STDMETHODIMP IsEndOfStream(BOOL *pfEndOfStream) override; - STDMETHODIMP Read(BYTE *pb, ULONG cb, ULONG *pcbRead); + STDMETHODIMP Read(BYTE *pb, ULONG cb, ULONG *pcbRead) override; STDMETHODIMP BeginRead(BYTE *pb, ULONG cb, IMFAsyncCallback *pCallback, - IUnknown *punkState); + IUnknown *punkState) override; - STDMETHODIMP EndRead(IMFAsyncResult* pResult, ULONG *pcbRead); + STDMETHODIMP EndRead(IMFAsyncResult* pResult, ULONG *pcbRead) override; - STDMETHODIMP Write(const BYTE *, ULONG, ULONG *); + STDMETHODIMP Write(const BYTE *, ULONG, ULONG *) override; STDMETHODIMP BeginWrite(const BYTE *, ULONG , IMFAsyncCallback *, - IUnknown *); + IUnknown *) override; STDMETHODIMP EndWrite(IMFAsyncResult *, - ULONG *); + ULONG *) override; STDMETHODIMP Seek( MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, LONGLONG llSeekOffset, DWORD, - QWORD *pqwCurrentPosition); + QWORD *pqwCurrentPosition) override; - STDMETHODIMP Flush(); + STDMETHODIMP Flush() override; - STDMETHODIMP Close(); + STDMETHODIMP Close() override; private: class AsyncReadState : public IUnknown { public: AsyncReadState(BYTE *pb, ULONG cb); + virtual ~AsyncReadState() = default; //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; - STDMETHODIMP_(ULONG) AddRef(void); + STDMETHODIMP_(ULONG) AddRef(void) override; - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP_(ULONG) Release(void) override; BYTE* pb() const; ULONG cb() const; @@ -152,7 +153,7 @@ private Q_SLOTS: void handleReadyRead(); protected: - void customEvent(QEvent *event); + void customEvent(QEvent *event) override; IMFAsyncResult *m_currentReadResult; }; diff --git a/src/multimedia/platform/windows/player/mfactivate_p.h b/src/multimedia/platform/windows/player/mfactivate_p.h index 86ef1c438..d3d5cf212 100644 --- a/src/multimedia/platform/windows/player/mfactivate_p.h +++ b/src/multimedia/platform/windows/player/mfactivate_p.h @@ -60,157 +60,157 @@ public: virtual ~MFAbstractActivate(); //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); - STDMETHODIMP_(ULONG) AddRef(void); - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; + STDMETHODIMP_(ULONG) AddRef(void) override; + STDMETHODIMP_(ULONG) Release(void) override; //from IMFAttributes - STDMETHODIMP GetItem(REFGUID guidKey, PROPVARIANT *pValue) + STDMETHODIMP GetItem(REFGUID guidKey, PROPVARIANT *pValue) override { return m_attributes->GetItem(guidKey, pValue); } - STDMETHODIMP GetItemType(REFGUID guidKey, MF_ATTRIBUTE_TYPE *pType) + STDMETHODIMP GetItemType(REFGUID guidKey, MF_ATTRIBUTE_TYPE *pType) override { return m_attributes->GetItemType(guidKey, pType); } - STDMETHODIMP CompareItem(REFGUID guidKey, REFPROPVARIANT Value, BOOL *pbResult) + STDMETHODIMP CompareItem(REFGUID guidKey, REFPROPVARIANT Value, BOOL *pbResult) override { return m_attributes->CompareItem(guidKey, Value, pbResult); } - STDMETHODIMP Compare(IMFAttributes *pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, BOOL *pbResult) + STDMETHODIMP Compare(IMFAttributes *pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, BOOL *pbResult) override { return m_attributes->Compare(pTheirs, MatchType, pbResult); } - STDMETHODIMP GetUINT32(REFGUID guidKey, UINT32 *punValue) + STDMETHODIMP GetUINT32(REFGUID guidKey, UINT32 *punValue) override { return m_attributes->GetUINT32(guidKey, punValue); } - STDMETHODIMP GetUINT64(REFGUID guidKey, UINT64 *punValue) + STDMETHODIMP GetUINT64(REFGUID guidKey, UINT64 *punValue) override { return m_attributes->GetUINT64(guidKey, punValue); } - STDMETHODIMP GetDouble(REFGUID guidKey, double *pfValue) + STDMETHODIMP GetDouble(REFGUID guidKey, double *pfValue) override { return m_attributes->GetDouble(guidKey, pfValue); } - STDMETHODIMP GetGUID(REFGUID guidKey, GUID *pguidValue) + STDMETHODIMP GetGUID(REFGUID guidKey, GUID *pguidValue) override { return m_attributes->GetGUID(guidKey, pguidValue); } - STDMETHODIMP GetStringLength(REFGUID guidKey, UINT32 *pcchLength) + STDMETHODIMP GetStringLength(REFGUID guidKey, UINT32 *pcchLength) override { return m_attributes->GetStringLength(guidKey, pcchLength); } - STDMETHODIMP GetString(REFGUID guidKey, LPWSTR pwszValue, UINT32 cchBufSize, UINT32 *pcchLength) + STDMETHODIMP GetString(REFGUID guidKey, LPWSTR pwszValue, UINT32 cchBufSize, UINT32 *pcchLength) override { return m_attributes->GetString(guidKey, pwszValue, cchBufSize, pcchLength); } - STDMETHODIMP GetAllocatedString(REFGUID guidKey, LPWSTR *ppwszValue, UINT32 *pcchLength) + STDMETHODIMP GetAllocatedString(REFGUID guidKey, LPWSTR *ppwszValue, UINT32 *pcchLength) override { return m_attributes->GetAllocatedString(guidKey, ppwszValue, pcchLength); } - STDMETHODIMP GetBlobSize(REFGUID guidKey, UINT32 *pcbBlobSize) + STDMETHODIMP GetBlobSize(REFGUID guidKey, UINT32 *pcbBlobSize) override { return m_attributes->GetBlobSize(guidKey, pcbBlobSize); } - STDMETHODIMP GetBlob(REFGUID guidKey, UINT8 *pBuf, UINT32 cbBufSize, UINT32 *pcbBlobSize) + STDMETHODIMP GetBlob(REFGUID guidKey, UINT8 *pBuf, UINT32 cbBufSize, UINT32 *pcbBlobSize) override { return m_attributes->GetBlob(guidKey, pBuf, cbBufSize, pcbBlobSize); } - STDMETHODIMP GetAllocatedBlob(REFGUID guidKey, UINT8 **ppBuf, UINT32 *pcbSize) + STDMETHODIMP GetAllocatedBlob(REFGUID guidKey, UINT8 **ppBuf, UINT32 *pcbSize) override { return m_attributes->GetAllocatedBlob(guidKey, ppBuf, pcbSize); } - STDMETHODIMP GetUnknown(REFGUID guidKey, REFIID riid, LPVOID *ppv) + STDMETHODIMP GetUnknown(REFGUID guidKey, REFIID riid, LPVOID *ppv) override { return m_attributes->GetUnknown(guidKey, riid, ppv); } - STDMETHODIMP SetItem(REFGUID guidKey, REFPROPVARIANT Value) + STDMETHODIMP SetItem(REFGUID guidKey, REFPROPVARIANT Value) override { return m_attributes->SetItem(guidKey, Value); } - STDMETHODIMP DeleteItem(REFGUID guidKey) + STDMETHODIMP DeleteItem(REFGUID guidKey) override { return m_attributes->DeleteItem(guidKey); } - STDMETHODIMP DeleteAllItems() + STDMETHODIMP DeleteAllItems() override { return m_attributes->DeleteAllItems(); } - STDMETHODIMP SetUINT32(REFGUID guidKey, UINT32 unValue) + STDMETHODIMP SetUINT32(REFGUID guidKey, UINT32 unValue) override { return m_attributes->SetUINT32(guidKey, unValue); } - STDMETHODIMP SetUINT64(REFGUID guidKey, UINT64 unValue) + STDMETHODIMP SetUINT64(REFGUID guidKey, UINT64 unValue) override { return m_attributes->SetUINT64(guidKey, unValue); } - STDMETHODIMP SetDouble(REFGUID guidKey, double fValue) + STDMETHODIMP SetDouble(REFGUID guidKey, double fValue) override { return m_attributes->SetDouble(guidKey, fValue); } - STDMETHODIMP SetGUID(REFGUID guidKey, REFGUID guidValue) + STDMETHODIMP SetGUID(REFGUID guidKey, REFGUID guidValue) override { return m_attributes->SetGUID(guidKey, guidValue); } - STDMETHODIMP SetString(REFGUID guidKey, LPCWSTR wszValue) + STDMETHODIMP SetString(REFGUID guidKey, LPCWSTR wszValue) override { return m_attributes->SetString(guidKey, wszValue); } - STDMETHODIMP SetBlob(REFGUID guidKey, const UINT8 *pBuf, UINT32 cbBufSize) + STDMETHODIMP SetBlob(REFGUID guidKey, const UINT8 *pBuf, UINT32 cbBufSize) override { return m_attributes->SetBlob(guidKey, pBuf, cbBufSize); } - STDMETHODIMP SetUnknown(REFGUID guidKey, IUnknown *pUnknown) + STDMETHODIMP SetUnknown(REFGUID guidKey, IUnknown *pUnknown) override { return m_attributes->SetUnknown(guidKey, pUnknown); } - STDMETHODIMP LockStore() + STDMETHODIMP LockStore() override { return m_attributes->LockStore(); } - STDMETHODIMP UnlockStore() + STDMETHODIMP UnlockStore() override { return m_attributes->UnlockStore(); } - STDMETHODIMP GetCount(UINT32 *pcItems) + STDMETHODIMP GetCount(UINT32 *pcItems) override { return m_attributes->GetCount(pcItems); } - STDMETHODIMP GetItemByIndex(UINT32 unIndex, GUID *pguidKey, PROPVARIANT *pValue) + STDMETHODIMP GetItemByIndex(UINT32 unIndex, GUID *pguidKey, PROPVARIANT *pValue) override { return m_attributes->GetItemByIndex(unIndex, pguidKey, pValue); } - STDMETHODIMP CopyAllItems(IMFAttributes *pDest) + STDMETHODIMP CopyAllItems(IMFAttributes *pDest) override { return m_attributes->CopyAllItems(pDest); } diff --git a/src/multimedia/platform/windows/player/mfplayercontrol.cpp b/src/multimedia/platform/windows/player/mfplayercontrol.cpp index 47e74ab38..d78768546 100644 --- a/src/multimedia/platform/windows/player/mfplayercontrol.cpp +++ b/src/multimedia/platform/windows/player/mfplayercontrol.cpp @@ -170,6 +170,8 @@ void MFPlayerControl::handleStatusChanged() if (m_state == QMediaPlayer::PlayingState) m_session->start(); break; + default: + break; } emit mediaStatusChanged(m_session->status()); refreshState(); diff --git a/src/multimedia/platform/windows/player/mfplayersession.cpp b/src/multimedia/platform/windows/player/mfplayersession.cpp index aeeb7c792..b814283c8 100644 --- a/src/multimedia/platform/windows/player/mfplayersession.cpp +++ b/src/multimedia/platform/windows/player/mfplayersession.cpp @@ -54,6 +54,7 @@ #include "mfevrvideowindowcontrol_p.h" #include "mfvideorenderercontrol_p.h" #include <private/mfmetadata_p.h> +#include <private/qwindowsmfdefs_p.h> #include "mfplayersession_p.h" #include <mferror.h> @@ -69,6 +70,7 @@ //#define DEBUG_MEDIAFOUNDATION + MFPlayerSession::MFPlayerSession(MFPlayerControl *playerControl) : m_cRef(1) , m_playerControl(playerControl) @@ -270,16 +272,16 @@ bool MFPlayerSession::getStreamInfo(IMFStreamDescriptor *stream, if (SUCCEEDED(stream->GetMediaTypeHandler(&typeHandler))) { UINT32 len = 0; - if (SUCCEEDED(stream->GetStringLength(MF_SD_STREAM_NAME, &len)) && len > 0) { + if (SUCCEEDED(stream->GetStringLength(QMM_MF_SD_STREAM_NAME, &len)) && len > 0) { WCHAR *wstr = new WCHAR[len+1]; - if (SUCCEEDED(stream->GetString(MF_SD_STREAM_NAME, wstr, len+1, &len))) { + if (SUCCEEDED(stream->GetString(QMM_MF_SD_STREAM_NAME, wstr, len+1, &len))) { *name = QString::fromUtf16(reinterpret_cast<const char16_t *>(wstr)); } delete []wstr; } - if (SUCCEEDED(stream->GetStringLength(MF_SD_LANGUAGE, &len)) && len > 0) { + if (SUCCEEDED(stream->GetStringLength(QMM_MF_SD_LANGUAGE, &len)) && len > 0) { WCHAR *wstr = new WCHAR[len+1]; - if (SUCCEEDED(stream->GetString(MF_SD_LANGUAGE, wstr, len+1, &len))) { + if (SUCCEEDED(stream->GetString(QMM_MF_SD_LANGUAGE, wstr, len+1, &len))) { *language = QString::fromUtf16(reinterpret_cast<const char16_t *>(wstr)); } delete []wstr; @@ -378,6 +380,8 @@ void MFPlayerSession::setupPlaybackTopology(IMFMediaSource *source, IMFPresentat case Video: emit videoAvailable(); break; + default: + break; } } outputNode->Release(); @@ -398,7 +402,7 @@ void MFPlayerSession::setupPlaybackTopology(IMFMediaSource *source, IMFPresentat changeStatus(QMediaPlayer::InvalidMedia); emit error(QMediaPlayer::ResourceError, tr("Unable to play."), true); } else { - if (m_trackInfo[QPlatformMediaPlayer::VideoStream].outputNodeId != -1) + if (m_trackInfo[QPlatformMediaPlayer::VideoStream].outputNodeId != TOPOID(-1)) topology = insertMFT(topology, m_trackInfo[QPlatformMediaPlayer::VideoStream].outputNodeId); hr = m_session->SetTopology(MFSESSION_SETTOPOLOGY_IMMEDIATE, topology); @@ -1804,6 +1808,8 @@ void MFPlayerSession::updatePendingCommands(Command command) start(); setPositionInternal(m_request.start, m_request.command); break; + default: + break; } m_request.setCommand(CmdNone); } @@ -1833,8 +1839,8 @@ void MFPlayerSession::clear() m_trackInfo[i].metaData.clear(); m_trackInfo[i].nativeIndexes.clear(); m_trackInfo[i].currentIndex = -1; - m_trackInfo[i].sourceNodeId = -1; - m_trackInfo[i].outputNodeId = -1; + m_trackInfo[i].sourceNodeId = TOPOID(-1); + m_trackInfo[i].outputNodeId = TOPOID(-1); } if (!m_metaData.isEmpty()) { @@ -1915,27 +1921,27 @@ void MFPlayerSession::setActiveTrack(QPlatformMediaPlayer::TrackType type, int i IMFTopology *topology = nullptr; - if (SUCCEEDED(m_session->GetFullTopology(MFSESSION_GETFULLTOPOLOGY_CURRENT, 0, &topology))) { + if (SUCCEEDED(m_session->GetFullTopology(QMM_MFSESSION_GETFULLTOPOLOGY_CURRENT, 0, &topology))) { m_restorePosition = position() * 10000; if (m_state.command == CmdStart) stop(); - if (m_trackInfo[type].outputNodeId != -1) { + if (m_trackInfo[type].outputNodeId != TOPOID(-1)) { IMFTopologyNode *node = nullptr; if (SUCCEEDED(topology->GetNodeByID(m_trackInfo[type].outputNodeId, &node))) { topology->RemoveNode(node); node->Release(); - m_trackInfo[type].outputNodeId = -1; + m_trackInfo[type].outputNodeId = TOPOID(-1); } } - if (m_trackInfo[type].sourceNodeId != -1) { + if (m_trackInfo[type].sourceNodeId != TOPOID(-1)) { IMFTopologyNode *node = nullptr; if (SUCCEEDED(topology->GetNodeByID(m_trackInfo[type].sourceNodeId, &node))) { topology->RemoveNode(node); node->Release(); - m_trackInfo[type].sourceNodeId = -1; + m_trackInfo[type].sourceNodeId = TOPOID(-1); } } diff --git a/src/multimedia/platform/windows/player/mfplayersession_p.h b/src/multimedia/platform/windows/player/mfplayersession_p.h index 3aafedb86..1a46f6944 100644 --- a/src/multimedia/platform/windows/player/mfplayersession_p.h +++ b/src/multimedia/platform/windows/player/mfplayersession_p.h @@ -88,15 +88,15 @@ public: MFPlayerSession(MFPlayerControl *playerControl = 0); ~MFPlayerSession(); - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; - STDMETHODIMP_(ULONG) AddRef(void); + STDMETHODIMP_(ULONG) AddRef(void) override; - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP_(ULONG) Release(void) override; - STDMETHODIMP Invoke(IMFAsyncResult *pResult); + STDMETHODIMP Invoke(IMFAsyncResult *pResult) override; - STDMETHODIMP GetParameters(DWORD *pdwFlags, DWORD *pdwQueue) + STDMETHODIMP GetParameters(DWORD *pdwFlags, DWORD *pdwQueue) override { Q_UNUSED(pdwFlags); Q_UNUSED(pdwQueue); diff --git a/src/multimedia/platform/windows/player/mftvideo.cpp b/src/multimedia/platform/windows/player/mftvideo.cpp index 5028bd053..fcc8d17c5 100644 --- a/src/multimedia/platform/windows/player/mftvideo.cpp +++ b/src/multimedia/platform/windows/player/mftvideo.cpp @@ -481,6 +481,9 @@ STDMETHODIMP MFTransform::ProcessMessage(MFT_MESSAGE_TYPE eMessage, ULONG_PTR ul case MFT_MESSAGE_NOTIFY_END_OF_STREAM: case MFT_MESSAGE_NOTIFY_START_OF_STREAM: break; + + default: + break; } return hr; diff --git a/src/multimedia/platform/windows/player/mftvideo_p.h b/src/multimedia/platform/windows/player/mftvideo_p.h index a8a0337cc..6c0c2e6e7 100644 --- a/src/multimedia/platform/windows/player/mftvideo_p.h +++ b/src/multimedia/platform/windows/player/mftvideo_p.h @@ -69,7 +69,7 @@ class MFTransform: public IMFTransform { public: MFTransform(); - ~MFTransform(); + virtual ~MFTransform(); void addProbe(MFVideoProbeControl* probe); void removeProbe(MFVideoProbeControl* probe); @@ -77,34 +77,34 @@ public: void setVideoSink(IUnknown *videoSink); // IUnknown methods - STDMETHODIMP QueryInterface(REFIID iid, void** ppv); - STDMETHODIMP_(ULONG) AddRef(); - STDMETHODIMP_(ULONG) Release(); + STDMETHODIMP QueryInterface(REFIID iid, void** ppv) override; + STDMETHODIMP_(ULONG) AddRef() override; + STDMETHODIMP_(ULONG) Release() override; // IMFTransform methods - STDMETHODIMP GetStreamLimits(DWORD *pdwInputMinimum, DWORD *pdwInputMaximum, DWORD *pdwOutputMinimum, DWORD *pdwOutputMaximum); - STDMETHODIMP GetStreamCount(DWORD *pcInputStreams, DWORD *pcOutputStreams); - STDMETHODIMP GetStreamIDs(DWORD dwInputIDArraySize, DWORD *pdwInputIDs, DWORD dwOutputIDArraySize, DWORD *pdwOutputIDs); - STDMETHODIMP GetInputStreamInfo(DWORD dwInputStreamID, MFT_INPUT_STREAM_INFO *pStreamInfo); - STDMETHODIMP GetOutputStreamInfo(DWORD dwOutputStreamID, MFT_OUTPUT_STREAM_INFO *pStreamInfo); - STDMETHODIMP GetAttributes(IMFAttributes **pAttributes); - STDMETHODIMP GetInputStreamAttributes(DWORD dwInputStreamID, IMFAttributes **pAttributes); - STDMETHODIMP GetOutputStreamAttributes(DWORD dwOutputStreamID, IMFAttributes **pAttributes); - STDMETHODIMP DeleteInputStream(DWORD dwStreamID); - STDMETHODIMP AddInputStreams(DWORD cStreams, DWORD *adwStreamIDs); - STDMETHODIMP GetInputAvailableType(DWORD dwInputStreamID, DWORD dwTypeIndex, IMFMediaType **ppType); - STDMETHODIMP GetOutputAvailableType(DWORD dwOutputStreamID,DWORD dwTypeIndex, IMFMediaType **ppType); - STDMETHODIMP SetInputType(DWORD dwInputStreamID, IMFMediaType *pType, DWORD dwFlags); - STDMETHODIMP SetOutputType(DWORD dwOutputStreamID, IMFMediaType *pType, DWORD dwFlags); - STDMETHODIMP GetInputCurrentType(DWORD dwInputStreamID, IMFMediaType **ppType); - STDMETHODIMP GetOutputCurrentType(DWORD dwOutputStreamID, IMFMediaType **ppType); - STDMETHODIMP GetInputStatus(DWORD dwInputStreamID, DWORD *pdwFlags); - STDMETHODIMP GetOutputStatus(DWORD *pdwFlags); - STDMETHODIMP SetOutputBounds(LONGLONG hnsLowerBound, LONGLONG hnsUpperBound); - STDMETHODIMP ProcessEvent(DWORD dwInputStreamID, IMFMediaEvent *pEvent); - STDMETHODIMP ProcessMessage(MFT_MESSAGE_TYPE eMessage, ULONG_PTR ulParam); - STDMETHODIMP ProcessInput(DWORD dwInputStreamID, IMFSample *pSample, DWORD dwFlags); - STDMETHODIMP ProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount, MFT_OUTPUT_DATA_BUFFER *pOutputSamples, DWORD *pdwStatus); + STDMETHODIMP GetStreamLimits(DWORD *pdwInputMinimum, DWORD *pdwInputMaximum, DWORD *pdwOutputMinimum, DWORD *pdwOutputMaximum) override; + STDMETHODIMP GetStreamCount(DWORD *pcInputStreams, DWORD *pcOutputStreams) override; + STDMETHODIMP GetStreamIDs(DWORD dwInputIDArraySize, DWORD *pdwInputIDs, DWORD dwOutputIDArraySize, DWORD *pdwOutputIDs) override; + STDMETHODIMP GetInputStreamInfo(DWORD dwInputStreamID, MFT_INPUT_STREAM_INFO *pStreamInfo) override; + STDMETHODIMP GetOutputStreamInfo(DWORD dwOutputStreamID, MFT_OUTPUT_STREAM_INFO *pStreamInfo) override; + STDMETHODIMP GetAttributes(IMFAttributes **pAttributes) override; + STDMETHODIMP GetInputStreamAttributes(DWORD dwInputStreamID, IMFAttributes **pAttributes) override; + STDMETHODIMP GetOutputStreamAttributes(DWORD dwOutputStreamID, IMFAttributes **pAttributes) override; + STDMETHODIMP DeleteInputStream(DWORD dwStreamID) override; + STDMETHODIMP AddInputStreams(DWORD cStreams, DWORD *adwStreamIDs) override; + STDMETHODIMP GetInputAvailableType(DWORD dwInputStreamID, DWORD dwTypeIndex, IMFMediaType **ppType) override; + STDMETHODIMP GetOutputAvailableType(DWORD dwOutputStreamID,DWORD dwTypeIndex, IMFMediaType **ppType) override; + STDMETHODIMP SetInputType(DWORD dwInputStreamID, IMFMediaType *pType, DWORD dwFlags) override; + STDMETHODIMP SetOutputType(DWORD dwOutputStreamID, IMFMediaType *pType, DWORD dwFlags) override; + STDMETHODIMP GetInputCurrentType(DWORD dwInputStreamID, IMFMediaType **ppType) override; + STDMETHODIMP GetOutputCurrentType(DWORD dwOutputStreamID, IMFMediaType **ppType) override; + STDMETHODIMP GetInputStatus(DWORD dwInputStreamID, DWORD *pdwFlags) override; + STDMETHODIMP GetOutputStatus(DWORD *pdwFlags) override; + STDMETHODIMP SetOutputBounds(LONGLONG hnsLowerBound, LONGLONG hnsUpperBound) override; + STDMETHODIMP ProcessEvent(DWORD dwInputStreamID, IMFMediaEvent *pEvent) override; + STDMETHODIMP ProcessMessage(MFT_MESSAGE_TYPE eMessage, ULONG_PTR ulParam) override; + STDMETHODIMP ProcessInput(DWORD dwInputStreamID, IMFSample *pSample, DWORD dwFlags) override; + STDMETHODIMP ProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount, MFT_OUTPUT_DATA_BUFFER *pOutputSamples, DWORD *pdwStatus) override; private: HRESULT OnFlush(); diff --git a/src/multimedia/platform/windows/player/mfvideorenderercontrol.cpp b/src/multimedia/platform/windows/player/mfvideorenderercontrol.cpp index a2a83d1cb..3124391d4 100644 --- a/src/multimedia/platform/windows/player/mfvideorenderercontrol.cpp +++ b/src/multimedia/platform/windows/player/mfvideorenderercontrol.cpp @@ -44,6 +44,7 @@ #include <private/qplatformvideosink_p.h> #include <private/qabstractvideobuffer_p.h> +#include <private/qwindowsmfdefs_p.h> #include <qvideosink.h> #include <qvideoframeformat.h> #include <qtcore/qtimer.h> @@ -116,6 +117,7 @@ namespace }; // Custom interface for handling IMFStreamSink::PlaceMarker calls asynchronously. + static const GUID IID_IMarker = {0xa3ff32de, 0x1031, 0x438a, {0x8b, 0x47, 0x82, 0xf8, 0xac, 0xda, 0x59, 0xb7}}; MIDL_INTERFACE("a3ff32de-1031-438a-8b47-82f8acda59b7") IMarker : public IUnknown { @@ -160,13 +162,13 @@ namespace } // IUnknown methods. - STDMETHODIMP QueryInterface(REFIID iid, void** ppv) + STDMETHODIMP QueryInterface(REFIID iid, void** ppv) override { if (!ppv) return E_POINTER; if (iid == IID_IUnknown) { *ppv = static_cast<IUnknown*>(this); - } else if (iid == __uuidof(IMarker)) { + } else if (iid == IID_IMarker) { *ppv = static_cast<IMarker*>(this); } else { *ppv = NULL; @@ -176,12 +178,12 @@ namespace return S_OK; } - STDMETHODIMP_(ULONG) AddRef() + STDMETHODIMP_(ULONG) AddRef() override { return InterlockedIncrement(&m_cRef); } - STDMETHODIMP_(ULONG) Release() + STDMETHODIMP_(ULONG) Release() override { LONG cRef = InterlockedDecrement(&m_cRef); if (cRef == 0) @@ -190,7 +192,7 @@ namespace return cRef; } - STDMETHODIMP GetMarkerType(MFSTREAMSINK_MARKER_TYPE *pType) + STDMETHODIMP GetMarkerType(MFSTREAMSINK_MARKER_TYPE *pType) override { if (pType == NULL) return E_POINTER; @@ -198,14 +200,14 @@ namespace return S_OK; } - STDMETHODIMP GetMarkerValue(PROPVARIANT *pvar) + STDMETHODIMP GetMarkerValue(PROPVARIANT *pvar) override { if (pvar == NULL) return E_POINTER; return PropVariantCopy(pvar, &m_varMarkerValue); } - STDMETHODIMP GetContext(PROPVARIANT *pvar) + STDMETHODIMP GetContext(PROPVARIANT *pvar) override { if (pvar == NULL) return E_POINTER; @@ -218,9 +220,9 @@ namespace PROPVARIANT m_varContextValue; private: - long m_cRef; + long m_cRef = 1; - Marker(MFSTREAMSINK_MARKER_TYPE eMarkerType) : m_cRef(1), m_eMarkerType(eMarkerType) + Marker(MFSTREAMSINK_MARKER_TYPE eMarkerType) : m_eMarkerType(eMarkerType) { PropVariantInit(&m_varMarkerValue); PropVariantInit(&m_varContextValue); @@ -241,27 +243,8 @@ namespace static const DWORD DEFAULT_MEDIA_STREAM_ID = 0x0; MediaStream(IMFMediaSink *parent, MFVideoRendererControl *rendererControl) - : m_cRef(1) - , m_eventQueue(0) - , m_shutdown(false) - , m_videoSink(0) - , m_state(State_TypeNotSet) - , m_currentFormatIndex(-1) - , m_bytesPerLine(0) - , m_workQueueId(0) - , m_workQueueCB(this, &MediaStream::onDispatchWorkItem) - , m_finalizeResult(0) - , m_scheduledBuffer(0) - , m_bufferStartTime(-1) - , m_bufferDuration(-1) - , m_presentationClock(0) - , m_sampleRequested(false) - , m_currentMediaType(0) - , m_prerolling(false) - , m_prerollTargetTime(0) - , m_startTime(0) + : m_workQueueCB(this, &MediaStream::onDispatchWorkItem) , m_rendererControl(rendererControl) - , m_rate(1.f) { m_sink = parent; @@ -277,7 +260,7 @@ namespace } //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject) + STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject) override { if (!ppvObject) return E_POINTER; @@ -297,12 +280,12 @@ namespace return S_OK; } - STDMETHODIMP_(ULONG) AddRef(void) + STDMETHODIMP_(ULONG) AddRef(void) override { return InterlockedIncrement(&m_cRef); } - STDMETHODIMP_(ULONG) Release(void) + STDMETHODIMP_(ULONG) Release(void) override { LONG cRef = InterlockedDecrement(&m_cRef); if (cRef == 0) @@ -314,7 +297,7 @@ namespace //from IMFMediaEventGenerator STDMETHODIMP GetEvent( DWORD dwFlags, - IMFMediaEvent **ppEvent) + IMFMediaEvent **ppEvent) override { // GetEvent can block indefinitely, so we don't hold the lock. // This requires some juggling with the event queue pointer. @@ -341,7 +324,7 @@ namespace STDMETHODIMP BeginGetEvent( IMFAsyncCallback *pCallback, - IUnknown *punkState) + IUnknown *punkState) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -351,7 +334,7 @@ namespace STDMETHODIMP EndGetEvent( IMFAsyncResult *pResult, - IMFMediaEvent **ppEvent) + IMFMediaEvent **ppEvent) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -363,7 +346,7 @@ namespace MediaEventType met, REFGUID guidExtendedType, HRESULT hrStatus, - const PROPVARIANT *pvValue) + const PROPVARIANT *pvValue) override { #ifdef DEBUG_MEDIAFOUNDATION qDebug() << "MediaStream::QueueEvent" << met; @@ -376,7 +359,7 @@ namespace //from IMFStreamSink STDMETHODIMP GetMediaSink( - IMFMediaSink **ppMediaSink) + IMFMediaSink **ppMediaSink) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -390,14 +373,14 @@ namespace } STDMETHODIMP GetIdentifier( - DWORD *pdwIdentifier) + DWORD *pdwIdentifier) override { *pdwIdentifier = MediaStream::DEFAULT_MEDIA_STREAM_ID; return S_OK; } STDMETHODIMP GetMediaTypeHandler( - IMFMediaTypeHandler **ppHandler) + IMFMediaTypeHandler **ppHandler) override { LPVOID handler = NULL; HRESULT hr = QueryInterface(IID_IMFMediaTypeHandler, &handler); @@ -406,7 +389,7 @@ namespace } STDMETHODIMP ProcessSample( - IMFSample *pSample) + IMFSample *pSample) override { if (pSample == NULL) return E_INVALIDARG; @@ -434,7 +417,7 @@ namespace STDMETHODIMP PlaceMarker( MFSTREAMSINK_MARKER_TYPE eMarkerType, const PROPVARIANT *pvarMarkerValue, - const PROPVARIANT *pvarContextValue) + const PROPVARIANT *pvarContextValue) override { HRESULT hr = S_OK; QMutexLocker locker(&m_mutex); @@ -459,7 +442,7 @@ namespace return hr; } - STDMETHODIMP Flush( void) + STDMETHODIMP Flush(void) override { #ifdef DEBUG_MEDIAFOUNDATION qDebug() << "MediaStream::Flush"; @@ -476,7 +459,7 @@ namespace //from IMFMediaTypeHandler STDMETHODIMP IsMediaTypeSupported( IMFMediaType *pMediaType, - IMFMediaType **ppMediaType) + IMFMediaType **ppMediaType) override { if (ppMediaType) *ppMediaType = NULL; @@ -509,7 +492,7 @@ namespace } STDMETHODIMP GetMediaTypeCount( - DWORD *pdwTypeCount) + DWORD *pdwTypeCount) override { if (pdwTypeCount == NULL) return E_INVALIDARG; @@ -520,7 +503,7 @@ namespace STDMETHODIMP GetMediaTypeByIndex( DWORD dwIndex, - IMFMediaType **ppType) + IMFMediaType **ppType) override { if (ppType == NULL) return E_INVALIDARG; @@ -542,7 +525,7 @@ namespace } STDMETHODIMP SetCurrentMediaType( - IMFMediaType *pMediaType) + IMFMediaType *pMediaType) override { HRESULT hr = S_OK; QMutexLocker locker(&m_mutex); @@ -600,7 +583,7 @@ namespace } STDMETHODIMP GetCurrentMediaType( - IMFMediaType **ppMediaType) + IMFMediaType **ppMediaType) override { if (ppMediaType == NULL) return E_INVALIDARG; @@ -615,7 +598,7 @@ namespace } STDMETHODIMP GetMajorType( - GUID *pguidMajorType) + GUID *pguidMajorType) override { if (pguidMajorType == NULL) return E_INVALIDARG; @@ -720,7 +703,7 @@ namespace if (SUCCEEDED(hr)) { MFTIME sysTime; - if (start != PRESENTATION_CURRENT_POSITION) + if (start != QMM_PRESENTATION_CURRENT_POSITION) m_startTime = start; // Cache the start time. else m_presentationClock->GetCorrelatedTime(0, &m_startTime, &sysTime); @@ -938,14 +921,14 @@ namespace { public: AsyncOperation(StreamOperation op) - :m_cRef(1), m_op(op) + :m_op(op) { } StreamOperation m_op; // The operation to perform. //from IUnknown - STDMETHODIMP QueryInterface(REFIID iid, void** ppv) + STDMETHODIMP QueryInterface(REFIID iid, void** ppv) override { if (!ppv) return E_POINTER; @@ -958,11 +941,11 @@ namespace AddRef(); return S_OK; } - STDMETHODIMP_(ULONG) AddRef() + STDMETHODIMP_(ULONG) AddRef() override { return InterlockedIncrement(&m_cRef); } - STDMETHODIMP_(ULONG) Release() + STDMETHODIMP_(ULONG) Release() override { ULONG uCount = InterlockedDecrement(&m_cRef); if (uCount == 0) @@ -972,7 +955,7 @@ namespace } private: - long m_cRef; + long m_cRef = 1; virtual ~AsyncOperation() { Q_ASSERT(m_cRef == 0); @@ -983,27 +966,27 @@ namespace // are valid from which states. static BOOL ValidStateMatrix[State_Count][Op_Count]; - long m_cRef; + long m_cRef = 1; QMutex m_mutex; - IMFMediaType *m_currentMediaType; - State m_state; - IMFMediaSink *m_sink; - IMFMediaEventQueue *m_eventQueue; - DWORD m_workQueueId; + IMFMediaType *m_currentMediaType = nullptr; + State m_state = State_TypeNotSet; + IMFMediaSink *m_sink = nullptr; + IMFMediaEventQueue *m_eventQueue = nullptr; + DWORD m_workQueueId = 0; AsyncCallback<MediaStream> m_workQueueCB; QList<IUnknown*> m_sampleQueue; - IMFAsyncResult *m_finalizeResult; // Result object for Finalize operation. - MFTIME m_startTime; // Presentation time when the clock started. + IMFAsyncResult *m_finalizeResult = nullptr; // Result object for Finalize operation. + MFTIME m_startTime = 0; // Presentation time when the clock started. - bool m_shutdown; + bool m_shutdown = false; QList<IMFMediaType*> m_mediaTypes; QList<QVideoFrameFormat::PixelFormat> m_pixelFormats; - int m_currentFormatIndex; - int m_bytesPerLine; + int m_currentFormatIndex = -1; + int m_bytesPerLine = 0; QVideoFrameFormat m_surfaceFormat; - QVideoSink *m_videoSink; - MFVideoRendererControl *m_rendererControl; + QVideoSink *m_videoSink = nullptr; + MFVideoRendererControl *m_rendererControl = nullptr; void clearMediaTypes() { @@ -1079,6 +1062,7 @@ namespace case OpStart: endPreroll(S_FALSE); schedulePresentation(true); + // fallthrough case OpRestart: endPreroll(S_FALSE); if (SUCCEEDED(hr)) { @@ -1115,6 +1099,8 @@ namespace endPreroll(S_FALSE); hr = dispatchFinalize(pOp); break; + default: + break; } } @@ -1171,7 +1157,7 @@ namespace pUnk = *pos; // Figure out if this is a marker or a sample. if (SUCCEEDED(hr)) { - hr = pUnk->QueryInterface(__uuidof(IMarker), (void**)&pMarker); + hr = pUnk->QueryInterface(IID_IMarker, (void**)&pMarker); if (hr == E_NOINTERFACE) hr = pUnk->QueryInterface(IID_IMFSample, (void**)&pSample); } @@ -1218,8 +1204,8 @@ namespace m_prerolling = false; queueEvent(MEStreamSinkPrerolled, GUID_NULL, hrStatus, NULL); } - MFTIME m_prerollTargetTime; - bool m_prerolling; + MFTIME m_prerollTargetTime = 0; + bool m_prerolling = false; void clearSampleQueue() { for (IUnknown* sample : qAsConst(m_sampleQueue)) @@ -1374,12 +1360,12 @@ namespace queueEvent(MEStreamSinkRequestSample, GUID_NULL, S_OK, NULL); } } - IMFMediaBuffer *m_scheduledBuffer; - MFTIME m_bufferStartTime; - MFTIME m_bufferDuration; - IMFPresentationClock *m_presentationClock; - bool m_sampleRequested; - float m_rate; + IMFMediaBuffer *m_scheduledBuffer = nullptr; + MFTIME m_bufferStartTime = -1; + MFTIME m_bufferDuration = -1; + IMFPresentationClock *m_presentationClock = nullptr; + bool m_sampleRequested = false; + float m_rate = 1.f; }; BOOL MediaStream::ValidStateMatrix[MediaStream::State_Count][MediaStream::Op_Count] = @@ -1415,15 +1401,11 @@ namespace { public: MediaSink(MFVideoRendererControl *rendererControl) - : m_cRef(1) - , m_shutdown(false) - , m_presentationClock(0) - , m_playRate(1) { m_stream = new MediaStream(this, rendererControl); } - ~MediaSink() + virtual ~MediaSink() { Q_ASSERT(m_shutdown); } @@ -1469,7 +1451,7 @@ namespace } //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject) + STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject) override { if (!ppvObject) return E_POINTER; @@ -1493,12 +1475,12 @@ namespace return S_OK; } - STDMETHODIMP_(ULONG) AddRef(void) + STDMETHODIMP_(ULONG) AddRef(void) override { return InterlockedIncrement(&m_cRef); } - STDMETHODIMP_(ULONG) Release(void) + STDMETHODIMP_(ULONG) Release(void) override { LONG cRef = InterlockedDecrement(&m_cRef); if (cRef == 0) @@ -1510,7 +1492,7 @@ namespace // IMFGetService methods STDMETHODIMP GetService(const GUID &guidService, const IID &riid, - LPVOID *ppvObject) + LPVOID *ppvObject) override { if (!ppvObject) return E_POINTER; @@ -1522,7 +1504,7 @@ namespace } //IMFMediaSinkPreroll - STDMETHODIMP NotifyPreroll(MFTIME hnsUpcomingStartTime) + STDMETHODIMP NotifyPreroll(MFTIME hnsUpcomingStartTime) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1531,7 +1513,7 @@ namespace } //from IMFFinalizableMediaSink - STDMETHODIMP BeginFinalize(IMFAsyncCallback *pCallback, IUnknown *punkState) + STDMETHODIMP BeginFinalize(IMFAsyncCallback *pCallback, IUnknown *punkState) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1539,7 +1521,7 @@ namespace return m_stream->finalize(pCallback, punkState); } - STDMETHODIMP EndFinalize(IMFAsyncResult *pResult) + STDMETHODIMP EndFinalize(IMFAsyncResult *pResult) override { HRESULT hr = S_OK; // Return the status code from the async result. @@ -1552,7 +1534,7 @@ namespace //from IMFMediaSink STDMETHODIMP GetCharacteristics( - DWORD *pdwCharacteristics) + DWORD *pdwCharacteristics) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1564,21 +1546,21 @@ namespace STDMETHODIMP AddStreamSink( DWORD, IMFMediaType *, - IMFStreamSink **) + IMFStreamSink **) override { QMutexLocker locker(&m_mutex); return m_shutdown ? MF_E_SHUTDOWN : MF_E_STREAMSINKS_FIXED; } STDMETHODIMP RemoveStreamSink( - DWORD) + DWORD) override { QMutexLocker locker(&m_mutex); return m_shutdown ? MF_E_SHUTDOWN : MF_E_STREAMSINKS_FIXED; } STDMETHODIMP GetStreamSinkCount( - DWORD *pcStreamSinkCount) + DWORD *pcStreamSinkCount) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1589,7 +1571,7 @@ namespace STDMETHODIMP GetStreamSinkByIndex( DWORD dwIndex, - IMFStreamSink **ppStreamSink) + IMFStreamSink **ppStreamSink) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1605,7 +1587,7 @@ namespace STDMETHODIMP GetStreamSinkById( DWORD dwStreamSinkIdentifier, - IMFStreamSink **ppStreamSink) + IMFStreamSink **ppStreamSink) override { if (ppStreamSink == NULL) return E_INVALIDARG; @@ -1622,7 +1604,7 @@ namespace } STDMETHODIMP SetPresentationClock( - IMFPresentationClock *pPresentationClock) + IMFPresentationClock *pPresentationClock) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1642,7 +1624,7 @@ namespace } STDMETHODIMP GetPresentationClock( - IMFPresentationClock **ppPresentationClock) + IMFPresentationClock **ppPresentationClock) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1655,7 +1637,7 @@ namespace return MF_E_NO_CLOCK; } - STDMETHODIMP Shutdown(void) + STDMETHODIMP Shutdown(void) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1673,7 +1655,7 @@ namespace } // IMFClockStateSink methods - STDMETHODIMP OnClockStart(MFTIME, LONGLONG llClockStartOffset) + STDMETHODIMP OnClockStart(MFTIME, LONGLONG llClockStartOffset) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1681,7 +1663,7 @@ namespace return m_stream->start(llClockStartOffset); } - STDMETHODIMP OnClockStop(MFTIME) + STDMETHODIMP OnClockStop(MFTIME) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1689,7 +1671,7 @@ namespace return m_stream->stop(); } - STDMETHODIMP OnClockPause(MFTIME) + STDMETHODIMP OnClockPause(MFTIME) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1697,7 +1679,7 @@ namespace return m_stream->pause(); } - STDMETHODIMP OnClockRestart(MFTIME) + STDMETHODIMP OnClockRestart(MFTIME) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1705,7 +1687,7 @@ namespace return m_stream->restart(); } - STDMETHODIMP OnClockSetRate(MFTIME, float flRate) + STDMETHODIMP OnClockSetRate(MFTIME, float flRate) override { QMutexLocker locker(&m_mutex); if (m_shutdown) @@ -1717,7 +1699,7 @@ namespace // IMFRateSupport methods STDMETHODIMP GetFastestRate(MFRATE_DIRECTION eDirection, BOOL fThin, - float *pflRate) + float *pflRate) override { if (!pflRate) return E_POINTER; @@ -1729,7 +1711,7 @@ namespace STDMETHODIMP GetSlowestRate(MFRATE_DIRECTION eDirection, BOOL fThin, - float *pflRate) + float *pflRate) override { Q_UNUSED(eDirection); Q_UNUSED(fThin); @@ -1745,7 +1727,7 @@ namespace STDMETHODIMP IsRateSupported(BOOL fThin, float flRate, - float *pflNearestSupportedRate) + float *pflNearestSupportedRate) override { HRESULT hr = S_OK; @@ -1777,12 +1759,12 @@ namespace } private: - long m_cRef; + long m_cRef = 1; QMutex m_mutex; - bool m_shutdown; - IMFPresentationClock *m_presentationClock; - MediaStream *m_stream; - float m_playRate; + bool m_shutdown = false; + IMFPresentationClock *m_presentationClock = nullptr; + MediaStream *m_stream = nullptr; + float m_playRate = 1; }; class VideoRendererActivate : public IMFActivate @@ -1799,13 +1781,13 @@ namespace m_sink = new MediaSink(rendererControl); } - ~VideoRendererActivate() + virtual ~VideoRendererActivate() { m_attributes->Release(); } //from IUnknown - STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject) + STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject) override { if (!ppvObject) return E_POINTER; @@ -1823,12 +1805,12 @@ namespace return S_OK; } - STDMETHODIMP_(ULONG) AddRef(void) + STDMETHODIMP_(ULONG) AddRef(void) override { return InterlockedIncrement(&m_cRef); } - STDMETHODIMP_(ULONG) Release(void) + STDMETHODIMP_(ULONG) Release(void) override { LONG cRef = InterlockedDecrement(&m_cRef); if (cRef == 0) @@ -1838,7 +1820,7 @@ namespace } //from IMFActivate - STDMETHODIMP ActivateObject(REFIID riid, void **ppv) + STDMETHODIMP ActivateObject(REFIID riid, void **ppv) override { if (!ppv) return E_INVALIDARG; @@ -1851,7 +1833,7 @@ namespace return m_sink->QueryInterface(riid, ppv); } - STDMETHODIMP ShutdownObject(void) + STDMETHODIMP ShutdownObject(void) override { QMutexLocker locker(&m_mutex); HRESULT hr = S_OK; @@ -1863,7 +1845,7 @@ namespace return hr; } - STDMETHODIMP DetachObject(void) + STDMETHODIMP DetachObject(void) override { QMutexLocker locker(&m_mutex); if (m_sink) { @@ -1876,14 +1858,14 @@ namespace //from IMFAttributes STDMETHODIMP GetItem( REFGUID guidKey, - PROPVARIANT *pValue) + PROPVARIANT *pValue) override { return m_attributes->GetItem(guidKey, pValue); } STDMETHODIMP GetItemType( REFGUID guidKey, - MF_ATTRIBUTE_TYPE *pType) + MF_ATTRIBUTE_TYPE *pType) override { return m_attributes->GetItemType(guidKey, pType); } @@ -1891,7 +1873,7 @@ namespace STDMETHODIMP CompareItem( REFGUID guidKey, REFPROPVARIANT Value, - BOOL *pbResult) + BOOL *pbResult) override { return m_attributes->CompareItem(guidKey, Value, pbResult); } @@ -1899,42 +1881,42 @@ namespace STDMETHODIMP Compare( IMFAttributes *pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, - BOOL *pbResult) + BOOL *pbResult) override { return m_attributes->Compare(pTheirs, MatchType, pbResult); } STDMETHODIMP GetUINT32( REFGUID guidKey, - UINT32 *punValue) + UINT32 *punValue) override { return m_attributes->GetUINT32(guidKey, punValue); } STDMETHODIMP GetUINT64( REFGUID guidKey, - UINT64 *punValue) + UINT64 *punValue) override { return m_attributes->GetUINT64(guidKey, punValue); } STDMETHODIMP GetDouble( REFGUID guidKey, - double *pfValue) + double *pfValue) override { return m_attributes->GetDouble(guidKey, pfValue); } STDMETHODIMP GetGUID( REFGUID guidKey, - GUID *pguidValue) + GUID *pguidValue) override { return m_attributes->GetGUID(guidKey, pguidValue); } STDMETHODIMP GetStringLength( REFGUID guidKey, - UINT32 *pcchLength) + UINT32 *pcchLength) override { return m_attributes->GetStringLength(guidKey, pcchLength); } @@ -1943,7 +1925,7 @@ namespace REFGUID guidKey, LPWSTR pwszValue, UINT32 cchBufSize, - UINT32 *pcchLength) + UINT32 *pcchLength) override { return m_attributes->GetString(guidKey, pwszValue, cchBufSize, pcchLength); } @@ -1951,14 +1933,14 @@ namespace STDMETHODIMP GetAllocatedString( REFGUID guidKey, LPWSTR *ppwszValue, - UINT32 *pcchLength) + UINT32 *pcchLength) override { return m_attributes->GetAllocatedString(guidKey, ppwszValue, pcchLength); } STDMETHODIMP GetBlobSize( REFGUID guidKey, - UINT32 *pcbBlobSize) + UINT32 *pcbBlobSize) override { return m_attributes->GetBlobSize(guidKey, pcbBlobSize); } @@ -1967,7 +1949,7 @@ namespace REFGUID guidKey, UINT8 *pBuf, UINT32 cbBufSize, - UINT32 *pcbBlobSize) + UINT32 *pcbBlobSize) override { return m_attributes->GetBlob(guidKey, pBuf, cbBufSize, pcbBlobSize); } @@ -1975,7 +1957,7 @@ namespace STDMETHODIMP GetAllocatedBlob( REFGUID guidKey, UINT8 **ppBuf, - UINT32 *pcbSize) + UINT32 *pcbSize) override { return m_attributes->GetAllocatedBlob(guidKey, ppBuf, pcbSize); } @@ -1983,60 +1965,60 @@ namespace STDMETHODIMP GetUnknown( REFGUID guidKey, REFIID riid, - LPVOID *ppv) + LPVOID *ppv) override { return m_attributes->GetUnknown(guidKey, riid, ppv); } STDMETHODIMP SetItem( REFGUID guidKey, - REFPROPVARIANT Value) + REFPROPVARIANT Value) override { return m_attributes->SetItem(guidKey, Value); } STDMETHODIMP DeleteItem( - REFGUID guidKey) + REFGUID guidKey) override { return m_attributes->DeleteItem(guidKey); } - STDMETHODIMP DeleteAllItems(void) + STDMETHODIMP DeleteAllItems(void) override { return m_attributes->DeleteAllItems(); } STDMETHODIMP SetUINT32( REFGUID guidKey, - UINT32 unValue) + UINT32 unValue) override { return m_attributes->SetUINT32(guidKey, unValue); } STDMETHODIMP SetUINT64( REFGUID guidKey, - UINT64 unValue) + UINT64 unValue) override { return m_attributes->SetUINT64(guidKey, unValue); } STDMETHODIMP SetDouble( REFGUID guidKey, - double fValue) + double fValue) override { return m_attributes->SetDouble(guidKey, fValue); } STDMETHODIMP SetGUID( REFGUID guidKey, - REFGUID guidValue) + REFGUID guidValue) override { return m_attributes->SetGUID(guidKey, guidValue); } STDMETHODIMP SetString( REFGUID guidKey, - LPCWSTR wszValue) + LPCWSTR wszValue) override { return m_attributes->SetString(guidKey, wszValue); } @@ -2044,30 +2026,30 @@ namespace STDMETHODIMP SetBlob( REFGUID guidKey, const UINT8 *pBuf, - UINT32 cbBufSize) + UINT32 cbBufSize) override { return m_attributes->SetBlob(guidKey, pBuf, cbBufSize); } STDMETHODIMP SetUnknown( REFGUID guidKey, - IUnknown *pUnknown) + IUnknown *pUnknown) override { return m_attributes->SetUnknown(guidKey, pUnknown); } - STDMETHODIMP LockStore(void) + STDMETHODIMP LockStore(void) override { return m_attributes->LockStore(); } - STDMETHODIMP UnlockStore(void) + STDMETHODIMP UnlockStore(void) override { return m_attributes->UnlockStore(); } STDMETHODIMP GetCount( - UINT32 *pcItems) + UINT32 *pcItems) override { return m_attributes->GetCount(pcItems); } @@ -2075,13 +2057,13 @@ namespace STDMETHODIMP GetItemByIndex( UINT32 unIndex, GUID *pguidKey, - PROPVARIANT *pValue) + PROPVARIANT *pValue) override { return m_attributes->GetItemByIndex(unIndex, pguidKey, pValue); } STDMETHODIMP CopyAllItems( - IMFAttributes *pDest) + IMFAttributes *pDest) override { return m_attributes->CopyAllItems(pDest); } @@ -2149,9 +2131,9 @@ public: ~EVRCustomPresenterActivate() { } - STDMETHODIMP ActivateObject(REFIID riid, void **ppv); - STDMETHODIMP ShutdownObject(); - STDMETHODIMP DetachObject(); + STDMETHODIMP ActivateObject(REFIID riid, void **ppv) override; + STDMETHODIMP ShutdownObject() override; + STDMETHODIMP DetachObject() override; void setSink(QVideoSink *sink); @@ -2218,7 +2200,7 @@ void MFVideoRendererControl::customEvent(QEvent *event) if (!m_currentActivate) return; - if (event->type() == MediaStream::PresentSurface) { + if (event->type() == QEvent::Type(MediaStream::PresentSurface)) { MFTIME targetTime = static_cast<MediaStream::PresentEvent*>(event)->targetTime(); MFTIME currentTime = static_cast<VideoRendererActivate*>(m_currentActivate)->getTime(); float playRate = static_cast<VideoRendererActivate*>(m_currentActivate)->getPlayRate(); diff --git a/src/multimedia/platform/windows/player/mfvideorenderercontrol_p.h b/src/multimedia/platform/windows/player/mfvideorenderercontrol_p.h index b4bb2d92d..9b48803d9 100644 --- a/src/multimedia/platform/windows/player/mfvideorenderercontrol_p.h +++ b/src/multimedia/platform/windows/player/mfvideorenderercontrol_p.h @@ -77,7 +77,7 @@ public: void releaseActivate(); protected: - void customEvent(QEvent *event); + void customEvent(QEvent *event) override; private Q_SLOTS: void present(); diff --git a/src/multimedia/platform/windows/player/samplegrabber.cpp b/src/multimedia/platform/windows/player/samplegrabber.cpp index ef039a902..93bec4ad6 100644 --- a/src/multimedia/platform/windows/player/samplegrabber.cpp +++ b/src/multimedia/platform/windows/player/samplegrabber.cpp @@ -147,6 +147,8 @@ STDMETHODIMP AudioSampleGrabberCallback::OnProcessSample(REFGUID guidMajorMediaT Q_UNUSED(dwSampleFlags); Q_UNUSED(llSampleTime); Q_UNUSED(llSampleDuration); + Q_UNUSED(pSampleBuffer); + Q_UNUSED(dwSampleSize); if (guidMajorMediaType != GUID_NULL && guidMajorMediaType != MFMediaType_Audio) return S_OK; diff --git a/src/multimedia/platform/windows/player/samplegrabber_p.h b/src/multimedia/platform/windows/player/samplegrabber_p.h index 31e00987c..ad522ade8 100644 --- a/src/multimedia/platform/windows/player/samplegrabber_p.h +++ b/src/multimedia/platform/windows/player/samplegrabber_p.h @@ -61,20 +61,20 @@ class SampleGrabberCallback : public IMFSampleGrabberSinkCallback { public: // IUnknown methods - STDMETHODIMP QueryInterface(REFIID iid, void** ppv); - STDMETHODIMP_(ULONG) AddRef(); - STDMETHODIMP_(ULONG) Release(); + STDMETHODIMP QueryInterface(REFIID iid, void** ppv) override; + STDMETHODIMP_(ULONG) AddRef() override; + STDMETHODIMP_(ULONG) Release() override; // IMFClockStateSink methods - STDMETHODIMP OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset); - STDMETHODIMP OnClockStop(MFTIME hnsSystemTime); - STDMETHODIMP OnClockPause(MFTIME hnsSystemTime); - STDMETHODIMP OnClockRestart(MFTIME hnsSystemTime); - STDMETHODIMP OnClockSetRate(MFTIME hnsSystemTime, float flRate); + STDMETHODIMP OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset) override; + STDMETHODIMP OnClockStop(MFTIME hnsSystemTime) override; + STDMETHODIMP OnClockPause(MFTIME hnsSystemTime) override; + STDMETHODIMP OnClockRestart(MFTIME hnsSystemTime) override; + STDMETHODIMP OnClockSetRate(MFTIME hnsSystemTime, float flRate) override; // IMFSampleGrabberSinkCallback methods - STDMETHODIMP OnSetPresentationClock(IMFPresentationClock* pClock); - STDMETHODIMP OnShutdown(); + STDMETHODIMP OnSetPresentationClock(IMFPresentationClock* pClock) override; + STDMETHODIMP OnShutdown() override; protected: SampleGrabberCallback() : m_cRef(1) {} @@ -92,7 +92,7 @@ public: STDMETHODIMP OnProcessSample(REFGUID guidMajorMediaType, DWORD dwSampleFlags, LONGLONG llSampleTime, LONGLONG llSampleDuration, const BYTE * pSampleBuffer, - DWORD dwSampleSize); + DWORD dwSampleSize) override; private: // QList<MFAudioProbeControl*> m_audioProbes; diff --git a/src/multimedia/platform/windows/qwindowsmediadevices.cpp b/src/multimedia/platform/windows/qwindowsmediadevices.cpp index 2b1a74a44..067c2bb2e 100644 --- a/src/multimedia/platform/windows/qwindowsmediadevices.cpp +++ b/src/multimedia/platform/windows/qwindowsmediadevices.cpp @@ -61,7 +61,8 @@ #include <Mferror.h> #include <mmdeviceapi.h> #include <Functiondiscoverykeys_devpkey.h> -#include "private/qwindowsaudioutils_p.h" +#include <private/qwindowsaudioutils_p.h> +#include <private/qwindowsmfdefs_p.h> QT_BEGIN_NAMESPACE @@ -85,12 +86,12 @@ public: virtual ~CMMNotificationClient() {} // IUnknown methods -- AddRef, Release, and QueryInterface - ULONG STDMETHODCALLTYPE AddRef() + ULONG STDMETHODCALLTYPE AddRef() override { return InterlockedIncrement(&m_cRef); } - ULONG STDMETHODCALLTYPE Release() + ULONG STDMETHODCALLTYPE Release() override { ULONG ulRef = InterlockedDecrement(&m_cRef); if (0 == ulRef) { @@ -99,7 +100,7 @@ public: return ulRef; } - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, VOID **ppvInterface) + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, VOID **ppvInterface) override { if (IID_IUnknown == riid) { AddRef(); @@ -114,7 +115,7 @@ public: return S_OK; } - HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR) + HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR) override { if (role == ERole::eMultimedia) emitAudioDevicesChanged(flow); @@ -122,7 +123,7 @@ public: return S_OK; } - HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR deviceID) + HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR deviceID) override { auto it = m_deviceState.find(QString::fromWCharArray(deviceID)); if (it == std::end(m_deviceState)) { @@ -133,7 +134,7 @@ public: return S_OK; }; - HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR deviceID) + HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR deviceID) override { auto key = QString::fromWCharArray(deviceID); auto it = m_deviceState.find(key); @@ -146,7 +147,7 @@ public: return S_OK; } - HRESULT STDMETHODCALLTYPE OnDeviceStateChanged(LPCWSTR deviceID, DWORD newState) + HRESULT STDMETHODCALLTYPE OnDeviceStateChanged(LPCWSTR deviceID, DWORD newState) override { if (auto it = m_deviceState.find(QString::fromWCharArray(deviceID)); it != std::end(m_deviceState)) { // If either the old state or the new state is active emit device change @@ -159,7 +160,7 @@ public: return S_OK; } - HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(LPCWSTR, const PROPERTYKEY) + HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(LPCWSTR, const PROPERTYKEY) override { return S_OK; } @@ -279,10 +280,10 @@ QWindowsMediaDevices::QWindowsMediaDevices() if (m_videoDeviceMsgWindow) { SetWindowLongPtr(m_videoDeviceMsgWindow, GWLP_USERDATA, (LONG_PTR)this); - DEV_BROADCAST_DEVICEINTERFACE di = { 0 }; + DEV_BROADCAST_DEVICEINTERFACE di = {}; di.dbcc_size = sizeof(di); di.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; - di.dbcc_classguid = KSCATEGORY_VIDEO_CAMERA; + di.dbcc_classguid = QMM_KSCATEGORY_VIDEO_CAMERA; m_videoDeviceNotification = RegisterDeviceNotification(m_videoDeviceMsgWindow, &di, DEVICE_NOTIFY_WINDOW_HANDLE); @@ -367,7 +368,7 @@ QList<QAudioDevice> QWindowsMediaDevices::availableDevices(QAudioDevice::Mode mo PROPVARIANT varName; PropVariantInit(&varName); - if (SUCCEEDED(props->GetValue(PKEY_Device_FriendlyName, &varName))) { + if (SUCCEEDED(props->GetValue(QMM_PKEY_Device_FriendlyName, &varName))) { auto description = QString::fromWCharArray(varName.pwszVal); auto strID = QString::fromWCharArray(id.data()).toUtf8(); @@ -453,7 +454,6 @@ QList<QCameraDevice> QWindowsMediaDevices::videoInputs() const UINT32 frameRateMin = 0u; UINT32 frameRateMax = 0u; UINT32 denominator = 0u; - DWORD index = 0u; UINT32 width = 0u; UINT32 height = 0u; diff --git a/src/multimedia/platform/windows/sourceresolver_p.h b/src/multimedia/platform/windows/sourceresolver_p.h index 07da1d8bd..0aab4cc19 100644 --- a/src/multimedia/platform/windows/sourceresolver_p.h +++ b/src/multimedia/platform/windows/sourceresolver_p.h @@ -62,13 +62,13 @@ public: ~SourceResolver(); - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); - STDMETHODIMP_(ULONG) AddRef(void); - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; + STDMETHODIMP_(ULONG) AddRef(void) override; + STDMETHODIMP_(ULONG) Release(void) override; - HRESULT STDMETHODCALLTYPE Invoke(IMFAsyncResult *pAsyncResult); + HRESULT STDMETHODCALLTYPE Invoke(IMFAsyncResult *pAsyncResult) override; - HRESULT STDMETHODCALLTYPE GetParameters(DWORD*, DWORD*); + HRESULT STDMETHODCALLTYPE GetParameters(DWORD*, DWORD*) override; void load(const QUrl &url, QIODevice* stream); @@ -87,13 +87,13 @@ private: { public: State(IMFSourceResolver *sourceResolver, bool fromStream); - ~State(); + virtual ~State(); - STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject); + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject) override; - STDMETHODIMP_(ULONG) AddRef(void); + STDMETHODIMP_(ULONG) AddRef(void) override; - STDMETHODIMP_(ULONG) Release(void); + STDMETHODIMP_(ULONG) Release(void) override; IMFSourceResolver* sourceResolver() const; bool fromStream() const; |