summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--config_help.txt1
-rw-r--r--src/imports/audioengine/audioengine.cpp9
-rw-r--r--src/imports/multimedia/multimedia.cpp9
-rw-r--r--src/multimedia/configure.json1
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp14
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp16
-rw-r--r--src/plugins/directshow/player/player.pri2
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiooutput.cpp16
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiooutput.h1
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;