From eb5b216ac42da2dfb2479ad0f1b140665e3268a3 Mon Sep 17 00:00:00 2001 From: Ling Hu Date: Thu, 28 Jun 2012 15:27:13 +1000 Subject: [PATCH] Refactoring wmf plugin make mf startup/shutdwon inside plugin instead of player component make sourceresolver a common component for a wmf related tasks. Change-Id: I49cdc4fa512a62398a68cd2be2f522f567d11c7c Reviewed-by: Michael Goddard --- src/plugins/wmf/{player => }/mfstream.cpp | 0 src/plugins/wmf/{player => }/mfstream.h | 0 src/plugins/wmf/player/mfplayerservice.cpp | 12 ---------- src/plugins/wmf/player/mfplayerservice.h | 1 - src/plugins/wmf/player/mfplayersession.cpp | 2 +- src/plugins/wmf/player/player.pri | 4 ---- src/plugins/wmf/{player => }/sourceresolver.cpp | 0 src/plugins/wmf/{player => }/sourceresolver.h | 0 src/plugins/wmf/wmf.pro | 14 +++++++++-- src/plugins/wmf/wmfserviceplugin.cpp | 31 +++++++++++++++++++++++-- 10 files changed, 42 insertions(+), 22 deletions(-) rename src/plugins/wmf/{player => }/mfstream.cpp (100%) rename src/plugins/wmf/{player => }/mfstream.h (100%) rename src/plugins/wmf/{player => }/sourceresolver.cpp (100%) rename src/plugins/wmf/{player => }/sourceresolver.h (100%) diff --git a/src/plugins/wmf/player/mfstream.cpp b/src/plugins/wmf/mfstream.cpp similarity index 100% rename from src/plugins/wmf/player/mfstream.cpp rename to src/plugins/wmf/mfstream.cpp diff --git a/src/plugins/wmf/player/mfstream.h b/src/plugins/wmf/mfstream.h similarity index 100% rename from src/plugins/wmf/player/mfstream.h rename to src/plugins/wmf/mfstream.h diff --git a/src/plugins/wmf/player/mfplayerservice.cpp b/src/plugins/wmf/player/mfplayerservice.cpp index 20e0561..3372055 100644 --- a/src/plugins/wmf/player/mfplayerservice.cpp +++ b/src/plugins/wmf/player/mfplayerservice.cpp @@ -52,7 +52,6 @@ #include "mfplayerservice.h" #include "mfplayersession.h" #include "mfmetadatacontrol.h" -int MFPlayerService::s_refCount = 0; MFPlayerService::MFPlayerService(QObject *parent) : QMediaService(parent) @@ -62,11 +61,6 @@ MFPlayerService::MFPlayerService(QObject *parent) #endif , m_videoRendererControl(0) { - s_refCount++; - if (s_refCount == 1) { - CoInitialize(NULL); - MFStartup(MF_VERSION); - } m_audioEndpointControl = new MFAudioEndpointControl(this); m_session = new MFPlayerSession(this); m_player = new MFPlayerControl(m_session); @@ -85,12 +79,6 @@ MFPlayerService::~MFPlayerService() m_session->close(); m_session->Release(); - - s_refCount--; - if (s_refCount == 0) { - MFShutdown(); - CoUninitialize(); - } } QMediaControl* MFPlayerService::requestControl(const char *name) diff --git a/src/plugins/wmf/player/mfplayerservice.h b/src/plugins/wmf/player/mfplayerservice.h index 65f3b34..587e592 100644 --- a/src/plugins/wmf/player/mfplayerservice.h +++ b/src/plugins/wmf/player/mfplayerservice.h @@ -91,7 +91,6 @@ private: #endif MFPlayerControl *m_player; MFMetaDataControl *m_metaDataControl; - static int s_refCount; }; #endif diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp index c8c99e2..ef359b5 100644 --- a/src/plugins/wmf/player/mfplayersession.cpp +++ b/src/plugins/wmf/player/mfplayersession.cpp @@ -62,7 +62,7 @@ #include "mfmetadatacontrol.h" #include #include -#include +#include "sourceresolver.h" //#define DEBUG_MEDIAFOUNDATION //#define TEST_STREAMING diff --git a/src/plugins/wmf/player/player.pri b/src/plugins/wmf/player/player.pri index 57cca77..733c790 100644 --- a/src/plugins/wmf/player/player.pri +++ b/src/plugins/wmf/player/player.pri @@ -7,8 +7,6 @@ DEFINES += QMEDIA_MEDIAFOUNDATION_PLAYER HEADERS += \ $$PWD/mfplayerservice.h \ $$PWD/mfplayersession.h \ - $$PWD/mfstream.h \ - $$PWD/sourceresolver.h \ $$PWD/mfplayercontrol.h \ $$PWD/mfvideorenderercontrol.h \ $$PWD/mfaudioendpointcontrol.h \ @@ -17,8 +15,6 @@ HEADERS += \ SOURCES += \ $$PWD/mfplayerservice.cpp \ $$PWD/mfplayersession.cpp \ - $$PWD/mfstream.cpp \ - $$PWD/sourceresolver.cpp \ $$PWD/mfplayercontrol.cpp \ $$PWD/mfvideorenderercontrol.cpp \ $$PWD/mfaudioendpointcontrol.cpp \ diff --git a/src/plugins/wmf/player/sourceresolver.cpp b/src/plugins/wmf/sourceresolver.cpp similarity index 100% rename from src/plugins/wmf/player/sourceresolver.cpp rename to src/plugins/wmf/sourceresolver.cpp diff --git a/src/plugins/wmf/player/sourceresolver.h b/src/plugins/wmf/sourceresolver.h similarity index 100% rename from src/plugins/wmf/player/sourceresolver.h rename to src/plugins/wmf/sourceresolver.h diff --git a/src/plugins/wmf/wmf.pro b/src/plugins/wmf/wmf.pro index 8daabf5..f7e1acf 100644 --- a/src/plugins/wmf/wmf.pro +++ b/src/plugins/wmf/wmf.pro @@ -12,8 +12,18 @@ load(qt_plugin) DESTDIR = $$QT.multimedia.plugins/$${PLUGIN_TYPE} -HEADERS += wmfserviceplugin.h -SOURCES += wmfserviceplugin.cpp +DEPENDPATH += . +INCLUDEPATH += . + +HEADERS += \ + wmfserviceplugin.h \ + mfstream.h \ + sourceresolver.h + +SOURCES += \ + wmfserviceplugin.cpp \ + mfstream.cpp \ + sourceresolver.cpp include (player/player.pri) diff --git a/src/plugins/wmf/wmfserviceplugin.cpp b/src/plugins/wmf/wmfserviceplugin.cpp index 34536ba..a796b81 100644 --- a/src/plugins/wmf/wmfserviceplugin.cpp +++ b/src/plugins/wmf/wmfserviceplugin.cpp @@ -48,19 +48,46 @@ #include "mfplayerservice.h" #endif +#include + +namespace +{ +static int g_refCount = 0; +void addRefCount() +{ + g_refCount++; + if (g_refCount == 1) { + CoInitialize(NULL); + MFStartup(MF_VERSION); + } +} + +void releaseRefCount() +{ + g_refCount--; + if (g_refCount == 0) { + MFShutdown(); + CoUninitialize(); + } +} + +} + QMediaService* WMFServicePlugin::create(QString const& key) { #ifdef QMEDIA_MEDIAFOUNDATION_PLAYER - if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) + if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) { + addRefCount(); return new MFPlayerService; + } #endif - //qDebug() << "unsupported key:" << key; return 0; } void WMFServicePlugin::release(QMediaService *service) { + releaseRefCount(); delete service; } -- 2.7.4