diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | config_help.txt | 1 | ||||
-rw-r--r-- | src/imports/audioengine/audioengine.cpp | 9 | ||||
-rw-r--r-- | src/imports/multimedia/multimedia.cpp | 9 | ||||
-rw-r--r-- | src/multimedia/configure.json | 1 | ||||
-rw-r--r-- | src/plugins/directshow/player/directshowplayerservice.cpp | 14 | ||||
-rw-r--r-- | src/plugins/directshow/player/directshowvideorenderercontrol.cpp | 16 | ||||
-rw-r--r-- | src/plugins/directshow/player/player.pri | 2 | ||||
-rw-r--r-- | src/plugins/windowsaudio/qwindowsaudiooutput.cpp | 16 | ||||
-rw-r--r-- | src/plugins/windowsaudio/qwindowsaudiooutput.h | 1 |
10 files changed, 38 insertions, 33 deletions
diff --git a/.qmake.conf b/.qmake.conf index 76c202ab9..097d8b948 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.11.2 +MODULE_VERSION = 5.12.0 diff --git a/config_help.txt b/config_help.txt index 7dd6b772f..341f53506 100644 --- a/config_help.txt +++ b/config_help.txt @@ -7,3 +7,4 @@ Multimedia options: With no parameter, 1.0 is tried first, then 0.10. -mediaplayer-backend <name> ... Select media player backend (Windows only) Supported backends: directshow (default), wmf + -evr ................. Enables EVR in DirectShow and WMF [auto] diff --git a/src/imports/audioengine/audioengine.cpp b/src/imports/audioengine/audioengine.cpp index f97928f9d..1d3379b91 100644 --- a/src/imports/audioengine/audioengine.cpp +++ b/src/imports/audioengine/audioengine.cpp @@ -51,13 +51,6 @@ #include "qdeclarative_audiosample_p.h" #include "qdeclarative_attenuationmodel_p.h" -static void initResources() -{ -#ifdef QT_STATIC - Q_INIT_RESOURCE(qmake_QtAudioEngine); -#endif -} - QT_BEGIN_NAMESPACE class QAudioEngineDeclarativeModule : public QQmlExtensionPlugin @@ -66,7 +59,7 @@ class QAudioEngineDeclarativeModule : public QQmlExtensionPlugin Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) public: - QAudioEngineDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { initResources(); } + QAudioEngineDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { } void registerTypes(const char *uri) override { Q_ASSERT(QLatin1String(uri) == QLatin1String("QtAudioEngine")); diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp index 6d9292221..113e67bfa 100644 --- a/src/imports/multimedia/multimedia.cpp +++ b/src/imports/multimedia/multimedia.cpp @@ -63,13 +63,6 @@ QML_DECLARE_TYPE(QSoundEffect) -static void initResources() -{ -#ifdef QT_STATIC - Q_INIT_RESOURCE(qmake_QtMultimedia); -#endif -} - QT_BEGIN_NAMESPACE static QObject *multimedia_global_object(QQmlEngine *qmlEngine, QJSEngine *jsEngine) @@ -84,7 +77,7 @@ class QMultimediaDeclarativeModule : public QQmlExtensionPlugin Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) public: - QMultimediaDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { initResources(); } + QMultimediaDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { } void registerTypes(const char *uri) override { Q_ASSERT(QLatin1String(uri) == QLatin1String("QtMultimedia")); diff --git a/src/multimedia/configure.json b/src/multimedia/configure.json index e250f2b9a..9980b0664 100644 --- a/src/multimedia/configure.json +++ b/src/multimedia/configure.json @@ -8,6 +8,7 @@ "commandline": { "options": { "alsa": "boolean", + "evr": { "type": "boolean" }, "gstreamer": { "type": "optionalString", "values": [ "no", "yes", "0.10", "1.0" ] }, "pulseaudio": "boolean", "mediaplayer-backend": { "type": "string", "values": [ "directshow", "wmf" ] }, diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index b975677a6..63635b059 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -61,6 +61,8 @@ #if QT_CONFIG(evr) #include "directshowevrvideowindowcontrol.h" +#else +#include <mmreg.h> #endif #include "qmediacontent.h" @@ -217,11 +219,13 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name) IBaseFilter *filter; #if QT_CONFIG(evr) - DirectShowEvrVideoWindowControl *evrControl = new DirectShowEvrVideoWindowControl; - if ((filter = evrControl->filter())) - m_videoWindowControl = evrControl; - else - delete evrControl; + if (!qgetenv("QT_DIRECTSHOW_NO_EVR").toInt()) { + DirectShowEvrVideoWindowControl *evrControl = new DirectShowEvrVideoWindowControl; + if ((filter = evrControl->filter())) + m_videoWindowControl = evrControl; + else + delete evrControl; + } #endif // Fall back to the VMR9 if the EVR is not available if (!m_videoWindowControl) { diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp index ee7f5ec9e..88b5a51eb 100644 --- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp +++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp @@ -98,13 +98,15 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface) if (m_surface) { #if QT_CONFIG(evr) - m_filter = com_new<IBaseFilter>(clsid_EnhancedVideoRenderer); - m_evrPresenter = new EVRCustomPresenter(m_surface); - if (!m_evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, m_evrPresenter)) { - m_filter->Release(); - m_filter = 0; - m_evrPresenter->Release(); - m_evrPresenter = 0; + if (!qgetenv("QT_DIRECTSHOW_NO_EVR").toInt()) { + m_filter = com_new<IBaseFilter>(clsid_EnhancedVideoRenderer); + m_evrPresenter = new EVRCustomPresenter(m_surface); + if (!m_evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, m_evrPresenter)) { + m_filter->Release(); + m_filter = 0; + m_evrPresenter->Release(); + m_evrPresenter = 0; + } } if (!m_filter) diff --git a/src/plugins/directshow/player/player.pri b/src/plugins/directshow/player/player.pri index 9111cc545..ec1066db7 100644 --- a/src/plugins/directshow/player/player.pri +++ b/src/plugins/directshow/player/player.pri @@ -37,6 +37,8 @@ qtConfig(evr) { SOURCES += \ $$PWD/directshowevrvideowindowcontrol.cpp +} else { + LIBS += -lwinmm } qtConfig(wshellitem): \ diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp index d1c0b475f..26eecb768 100644 --- a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp +++ b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp @@ -295,11 +295,22 @@ bool QWindowsAudioOutput::open() return true; } +void QWindowsAudioOutput::pauseAndSleep() +{ + waveOutPause(hWaveOut); + int bitrate = settings.sampleRate() * settings.channelCount() * settings.sampleSize() / 8; + // Time of written data. + int delay = (buffer_size - bytesFree()) * 1000 / bitrate; + Sleep(delay + 10); +} + void QWindowsAudioOutput::close() { if(deviceState == QAudio::StoppedState) return; + // Pause playback before reset to avoid uneeded crackling at the end. + pauseAndSleep(); deviceState = QAudio::StoppedState; errorState = QAudio::NoError; waveOutReset(hWaveOut); @@ -455,10 +466,7 @@ void QWindowsAudioOutput::resume() void QWindowsAudioOutput::suspend() { if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState) { - int delay = (buffer_size-bytesFree())*1000/(settings.sampleRate() - *settings.channelCount()*(settings.sampleSize()/8)); - waveOutPause(hWaveOut); - Sleep(delay+10); + pauseAndSleep(); deviceState = QAudio::SuspendedState; errorState = QAudio::NoError; emit stateChanged(deviceState); diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.h b/src/plugins/windowsaudio/qwindowsaudiooutput.h index f25475b02..b71f00e98 100644 --- a/src/plugins/windowsaudio/qwindowsaudiooutput.h +++ b/src/plugins/windowsaudio/qwindowsaudiooutput.h @@ -115,6 +115,7 @@ private slots: bool deviceReady(); private: + void pauseAndSleep(); QByteArray m_device; int bytesAvailable; QTime timeStamp; |