diff --git a/config.tests/directshow/directshow.pro b/config.tests/directshow/directshow.pro
index 6493e54ab3715363ac930af8a523196b106ada01..6dfc54a019af38c43f551a528f6276c662984080 100644
--- a/config.tests/directshow/directshow.pro
+++ b/config.tests/directshow/directshow.pro
@@ -3,4 +3,4 @@ CONFIG += console
 
 SOURCES += main.cpp
 
-LIBS += -lstrmiids -ldmoguids -luuid -lmsdmo -lole32 -loleaut32
+!wince: LIBS += -lstrmiids -ldmoguids -luuid -lmsdmo -lole32 -loleaut32
diff --git a/config.tests/directshow/main.cpp b/config.tests/directshow/main.cpp
index d5e4db58910c60ca7149fbb3510e310704e3b55d..15ff3b9fc9b469413df0e55b07be9e4524e21d21 100644
--- a/config.tests/directshow/main.cpp
+++ b/config.tests/directshow/main.cpp
@@ -32,8 +32,10 @@
 ****************************************************************************/
 
 #include <dshow.h>
+#ifndef _WIN32_WCE
 #include <d3d9.h>
 #include <vmr9.h>
+#endif
 
 int main(int, char**)
 {
diff --git a/src/plugins/directshow/directshow.pro b/src/plugins/directshow/directshow.pro
index 280b52619b81f0ea5edb8c0fd79ec01d19650d3a..117b02adedd969a7e9e55c8154db953003627620 100644
--- a/src/plugins/directshow/directshow.pro
+++ b/src/plugins/directshow/directshow.pro
@@ -13,7 +13,7 @@ SOURCES += dsserviceplugin.cpp
 mingw: DEFINES += NO_DSHOW_STRSAFE
 
 !config_wmf: include(player/player.pri)
-include(camera/camera.pri)
+!wince: include(camera/camera.pri)
 
 OTHER_FILES += \
     directshow.json \
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp
index 4af38b1cc004df2dda1de4f1fdff5d4ea0933412..e889a651d1a5f2d3f093ec43b0b3c1ae857af9e8 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -31,14 +31,16 @@
 **
 ****************************************************************************/
 
+#include <dshow.h>
+
 #include <QtCore/qstring.h>
 #include <QtCore/qdebug.h>
 #include <QtCore/QFile>
 
 #include "dsserviceplugin.h"
-#include "dsvideodevicecontrol.h"
 
 #ifdef QMEDIA_DIRECTSHOW_CAMERA
+#include "dsvideodevicecontrol.h"
 #include <dshow.h>
 #include "dscameraservice.h"
 #endif
diff --git a/src/plugins/directshow/player/directshowglobal.h b/src/plugins/directshow/player/directshowglobal.h
index d8f1d1200b2bc15e544fb9ff709a63dad29c1271..a563ed361603ee4a848af8d2c3f47eb9bf91ba29 100644
--- a/src/plugins/directshow/player/directshowglobal.h
+++ b/src/plugins/directshow/player/directshowglobal.h
@@ -34,10 +34,10 @@
 #ifndef DIRECTSHOWGLOBAL_H
 #define DIRECTSHOWGLOBAL_H
 
-#include <QtCore/qglobal.h>
-
 #include <dshow.h>
 
+#include <QtCore/qglobal.h>
+
 template <typename T> T *com_cast(IUnknown *unknown, const IID &iid)
 {
     T *iface = 0;
@@ -112,6 +112,7 @@ DECLARE_INTERFACE_(IFileSourceFilter ,IUnknown)
 
 #ifndef __IAMOpenProgress_INTERFACE_DEFINED__
 #define __IAMOpenProgress_INTERFACE_DEFINED__
+#undef INTERFACE
 #define INTERFACE IAMOpenProgress
 DECLARE_INTERFACE_(IAMOpenProgress ,IUnknown)
 {
diff --git a/src/plugins/directshow/player/directshowioreader.h b/src/plugins/directshow/player/directshowioreader.h
index dd66b3a3cb441ba0bb1c90acb843035a8e8a40c6..203ca759a15e1dfd50ad3446f5f345a5db1469cd 100644
--- a/src/plugins/directshow/player/directshowioreader.h
+++ b/src/plugins/directshow/player/directshowioreader.h
@@ -34,12 +34,12 @@
 #ifndef DIRECTSHOWIOREADER_H
 #define DIRECTSHOWIOREADER_H
 
+#include <dshow.h>
+
 #include <QtCore/qmutex.h>
 #include <QtCore/qobject.h>
 #include <QtCore/qwaitcondition.h>
 
-#include <dshow.h>
-
 QT_BEGIN_NAMESPACE
 class QIODevice;
 QT_END_NAMESPACE
diff --git a/src/plugins/directshow/player/directshowmediatype.cpp b/src/plugins/directshow/player/directshowmediatype.cpp
index 1be641f41ec147996d2b3da32a1897825427facd..fcb254fe9400784c9f0788bbe8931f79b0d7bde5 100644
--- a/src/plugins/directshow/player/directshowmediatype.cpp
+++ b/src/plugins/directshow/player/directshowmediatype.cpp
@@ -192,9 +192,11 @@ QVideoSurfaceFormat::Direction DirectShowMediaType::scanLineDirection(QVideoFram
     case QVideoFrame::Format_BGR24:
     case QVideoFrame::Format_RGB565:
     case QVideoFrame::Format_RGB555:
+#ifndef Q_OS_WINCE
         return bmiHeader.biHeight < 0
             ? QVideoSurfaceFormat::TopToBottom
             : QVideoSurfaceFormat::BottomToTop;
+#endif
     default:
         return QVideoSurfaceFormat::TopToBottom;
     }
diff --git a/src/plugins/directshow/player/directshowmediatype.h b/src/plugins/directshow/player/directshowmediatype.h
index 8d5e74f1f8dddbad02bbd2b3db4d0d1ea4cbd336..5045ff60060258aa2a54bf9d7655dd83e3ee6a34 100644
--- a/src/plugins/directshow/player/directshowmediatype.h
+++ b/src/plugins/directshow/player/directshowmediatype.h
@@ -34,9 +34,10 @@
 #ifndef DIRECTSHOWMEDIATYPE_H
 #define DIRECTSHOWMEDIATYPE_H
 
+#include <dshow.h>
+
 #include <qvideosurfaceformat.h>
 
-#include <dshow.h>
 #include <dvdmedia.h>
 
 class DirectShowMediaType : public AM_MEDIA_TYPE
diff --git a/src/plugins/directshow/player/directshowmediatypelist.h b/src/plugins/directshow/player/directshowmediatypelist.h
index 008293a1fa83f308453b8ce87fe637400ea961dd..860334532e99c585a8d760931ad8e26f7b4fdaa4 100644
--- a/src/plugins/directshow/player/directshowmediatypelist.h
+++ b/src/plugins/directshow/player/directshowmediatypelist.h
@@ -34,10 +34,10 @@
 #ifndef DIRECTSHOWMEDIATYPELIST_H
 #define DIRECTSHOWMEDIATYPELIST_H
 
-#include <QtCore/qvector.h>
-
 #include <dshow.h>
 
+#include <QtCore/qvector.h>
+
 class DirectShowMediaTypeList : public IUnknown
 {
 public:
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
index 5400ac8d4e522a603d8d192bb4e358635198fd0e..c30320128035425957d50b2a40bff0d2c297e5ed 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
@@ -31,13 +31,20 @@
 **
 ****************************************************************************/
 
+#include <dshow.h>
+#ifdef min
+#undef min
+#endif
+#ifdef max
+#undef max
+#endif
+
 #include <QtMultimedia/qmediametadata.h>
 #include <QtCore/qcoreapplication.h>
 #include <QSize>
 #include <qdatetime.h>
 #include <qimage.h>
 
-#include <dshow.h>
 #include <initguid.h>
 #include <qnetwork.h>
 
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.h b/src/plugins/directshow/player/directshowmetadatacontrol.h
index 55504ba4b7ba290020b7d1fc000dc115814034f3..fee305c1fd99adc706a9f54fa875295ad767bdc2 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.h
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.h
@@ -34,6 +34,8 @@
 #ifndef DIRECTSHOWMETADATACONTROL_H
 #define DIRECTSHOWMETADATACONTROL_H
 
+#include <dshow.h>
+
 #include <qmetadatareadercontrol.h>
 
 #include "directshowglobal.h"
diff --git a/src/plugins/directshow/player/directshowpinenum.h b/src/plugins/directshow/player/directshowpinenum.h
index 3cc62e2264d1de36b1a5c278cee6191b77cc76fc..e3c5a4a6773eb300d33e71ba73d073b7b40ffd97 100644
--- a/src/plugins/directshow/player/directshowpinenum.h
+++ b/src/plugins/directshow/player/directshowpinenum.h
@@ -34,9 +34,10 @@
 #ifndef DIRECTSHOWPINENUM_H
 #define DIRECTSHOWPINENUM_H
 
+#include <dshow.h>
+
 #include <QtCore/qlist.h>
 
-#include <dshow.h>
 
 class DirectShowPinEnum : public IEnumPins
 {
diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp
index 3449c9270666e2344be6aaddc2fd22b25d1bb486..ff3c9af521fa38713e797db7a120917e3183806f 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.cpp
+++ b/src/plugins/directshow/player/directshowplayercontrol.cpp
@@ -31,6 +31,8 @@
 **
 ****************************************************************************/
 
+#include <dshow.h>
+
 #include "directshowplayercontrol.h"
 
 #include "directshowplayerservice.h"
diff --git a/src/plugins/directshow/player/directshowplayercontrol.h b/src/plugins/directshow/player/directshowplayercontrol.h
index f67c4108ba0d1be4f885bfa1b55a742a846ba135..f1f387c51fe15e15bd252720e3e26045583eebfe 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.h
+++ b/src/plugins/directshow/player/directshowplayercontrol.h
@@ -34,6 +34,8 @@
 #ifndef DIRECTSHOWPLAYERCONTROL_H
 #define DIRECTSHOWPLAYERCONTROL_H
 
+#include <dshow.h>
+
 #include "qmediacontent.h"
 #include "qmediaplayercontrol.h"
 
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index 8e9e50cbfea2f457b8166583ec64dd05582268ef..73279accb848b5b0e8ad0d7b38cbe664432dbb7c 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -31,14 +31,25 @@
 **
 ****************************************************************************/
 
+#include <dshow.h>
+#ifdef min
+#undef min
+#endif
+#ifdef max
+#undef max
+#endif
+
 #include "directshowplayerservice.h"
 
+#ifndef Q_OS_WINCE
 #include "directshowaudioendpointcontrol.h"
-#include "directshowiosource.h"
 #include "directshowmetadatacontrol.h"
+#include "vmr9videowindowcontrol.h"
+#endif
+#include "directshowiosource.h"
 #include "directshowplayercontrol.h"
 #include "directshowvideorenderercontrol.h"
-#include "vmr9videowindowcontrol.h"
+
 
 #ifdef HAVE_EVR
 #include "directshowevrvideowindowcontrol.h"
@@ -79,10 +90,14 @@ private:
 DirectShowPlayerService::DirectShowPlayerService(QObject *parent)
     : QMediaService(parent)
     , m_playerControl(0)
+#ifndef Q_OS_WINCE
     , m_metaDataControl(0)
+#endif
     , m_videoRendererControl(0)
+#ifndef Q_OS_WINCE
     , m_videoWindowControl(0)
     , m_audioEndpointControl(0)
+#endif
     , m_taskThread(0)
     , m_loop(qt_directShowEventLoop())
     , m_pendingTasks(0)
@@ -106,8 +121,10 @@ DirectShowPlayerService::DirectShowPlayerService(QObject *parent)
     , m_dontCacheNextSeekResult(false)
 {
     m_playerControl = new DirectShowPlayerControl(this);
+#ifndef Q_OS_WINCE
     m_metaDataControl = new DirectShowMetaDataControl(this);
     m_audioEndpointControl = new DirectShowAudioEndpointControl(this);
+#endif
 
     m_taskThread = new DirectShowPlayerServiceThread(this);
     m_taskThread->start();
@@ -138,10 +155,14 @@ DirectShowPlayerService::~DirectShowPlayerService()
     }
 
     delete m_playerControl;
+#ifndef Q_OS_WINCE
     delete m_audioEndpointControl;
     delete m_metaDataControl;
+#endif
     delete m_videoRendererControl;
+#ifndef Q_OS_WINCE
     delete m_videoWindowControl;
+#endif
 
     ::CloseHandle(m_taskHandle);
 }
@@ -150,12 +171,18 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
 {
     if (qstrcmp(name, QMediaPlayerControl_iid) == 0) {
         return m_playerControl;
+#ifndef Q_OS_WINCE
     } else if (qstrcmp(name, QAudioOutputSelectorControl_iid) == 0) {
         return m_audioEndpointControl;
     } else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) {
         return m_metaDataControl;
+#endif
     } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
-        if (!m_videoRendererControl && !m_videoWindowControl) {
+        if (!m_videoRendererControl
+#ifndef Q_OS_WINCE
+            && !m_videoWindowControl
+#endif
+            ){
             m_videoRendererControl = new DirectShowVideoRendererControl(m_loop);
 
             connect(m_videoRendererControl, SIGNAL(filterChanged()),
@@ -163,6 +190,7 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
 
             return m_videoRendererControl;
         }
+#ifndef Q_OS_WINCE
     } else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
         if (!m_videoRendererControl && !m_videoWindowControl) {
             IBaseFilter *filter;
@@ -185,6 +213,7 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
 
             return m_videoWindowControl;
         }
+#endif
     }
     return 0;
 }
@@ -200,12 +229,14 @@ void DirectShowPlayerService::releaseControl(QMediaControl *control)
         delete m_videoRendererControl;
 
         m_videoRendererControl = 0;
+#ifndef Q_OS_WINCE
     } else if (control == m_videoWindowControl) {
         setVideoOutput(0);
 
         delete m_videoWindowControl;
 
         m_videoWindowControl = 0;
+#endif
     }
 }
 
@@ -231,7 +262,9 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
     m_seekable = false;
     m_atEnd = false;
     m_dontCacheNextSeekResult = false;
+#ifndef Q_OS_WINCE
     m_metaDataControl->reset();
+#endif
 
     if (m_resources.isEmpty() && !stream) {
         m_pendingTasks = 0;
@@ -1135,7 +1168,9 @@ void DirectShowPlayerService::customEvent(QEvent *event)
         QMutexLocker locker(&m_mutex);
 
         m_playerControl->updateMediaInfo(m_duration, m_streamTypes, m_seekable);
+#ifndef Q_OS_WINCE
         m_metaDataControl->updateMetadata(m_graph, m_source, m_url.toString());
+#endif
 
         updateStatus();
     } else if (event->type() == QEvent::Type(Error)) {
diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h
index 4d3762f7440c01e529105a1d9189be74ffbe2ac2..f02f2039fc1cb8ed0ef5bafea639aab7ace26f04 100644
--- a/src/plugins/directshow/player/directshowplayerservice.h
+++ b/src/plugins/directshow/player/directshowplayerservice.h
@@ -34,6 +34,8 @@
 #ifndef DIRECTSHOWPLAYERSERVICE_H
 #define DIRECTSHOWPLAYERSERVICE_H
 
+#include <dshow.h>
+
 #include "qmediaplayer.h"
 #include "qmediaresource.h"
 #include "qmediaservice.h"
@@ -168,10 +170,14 @@ private:
     };
 
     DirectShowPlayerControl *m_playerControl;
+#ifndef Q_OS_WINCE
     DirectShowMetaDataControl *m_metaDataControl;
+#endif
     DirectShowVideoRendererControl *m_videoRendererControl;
+#ifndef Q_OS_WINCE
     QVideoWindowControl *m_videoWindowControl;
     DirectShowAudioEndpointControl *m_audioEndpointControl;
+#endif
 
     QThread *m_taskThread;
     DirectShowEventLoop *m_loop;
diff --git a/src/plugins/directshow/player/directshowsamplescheduler.h b/src/plugins/directshow/player/directshowsamplescheduler.h
index f9ef372ec38d3aa0855baa219984a1f8f7cf9bb9..ad2df794c3c9baf8926bce28832442f9399dcd56 100644
--- a/src/plugins/directshow/player/directshowsamplescheduler.h
+++ b/src/plugins/directshow/player/directshowsamplescheduler.h
@@ -34,12 +34,12 @@
 #ifndef DIRECTSHOWSAMPLESCHEDULER_H
 #define DIRECTSHOWSAMPLESCHEDULER_H
 
+#include <dshow.h>
+
 #include <QtCore/qmutex.h>
 #include <QtCore/qobject.h>
 #include <QtCore/qsemaphore.h>
 
-#include <dshow.h>
-
 class DirectShowTimedSample;
 
 class DirectShowSampleScheduler : public QObject, public IMemInputPin
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.h b/src/plugins/directshow/player/directshowvideorenderercontrol.h
index 484fda2630848d801fa172d2cf3fcca43366f0ae..d08d124ca170c92bcf0b0803563ef43a8eae9268 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.h
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.h
@@ -34,10 +34,10 @@
 #ifndef DIRECTSHOWVIDEORENDERERCONTROL_H
 #define DIRECTSHOWVIDEORENDERERCONTROL_H
 
-#include "qvideorenderercontrol.h"
-
 #include <dshow.h>
 
+#include "qvideorenderercontrol.h"
+
 class DirectShowEventLoop;
 
 QT_USE_NAMESPACE
diff --git a/src/plugins/directshow/player/mediasamplevideobuffer.h b/src/plugins/directshow/player/mediasamplevideobuffer.h
index e385185719559740c8d4e027db9ad26784966b79..60c4cb8b05e2bd52e523b25e47e87581b69fe051 100644
--- a/src/plugins/directshow/player/mediasamplevideobuffer.h
+++ b/src/plugins/directshow/player/mediasamplevideobuffer.h
@@ -34,10 +34,10 @@
 #ifndef MEDIASAMPLEVIDEOBUFFER_H
 #define MEDIASAMPLEVIDEOBUFFER_H
 
-#include <qabstractvideobuffer.h>
-
 #include <dshow.h>
 
+#include <qabstractvideobuffer.h>
+
 class MediaSampleVideoBuffer : public QAbstractVideoBuffer
 {
 public:
diff --git a/src/plugins/directshow/player/player.pri b/src/plugins/directshow/player/player.pri
index 5ecb912b234beba60755813122b1498075a7748b..c5fb8442ab439303a444048833e3abc95cfbcdad 100644
--- a/src/plugins/directshow/player/player.pri
+++ b/src/plugins/directshow/player/player.pri
@@ -1,45 +1,53 @@
 INCLUDEPATH += $$PWD
 
-LIBS += -lstrmiids -ldmoguids -luuid -lmsdmo -lole32 -loleaut32 -lgdi32
+LIBS += -lstrmiids -ldmoguids -luuid -lole32 -loleaut32
+!wince: LIBS += -lmsdmo -lgdi32
+
 
 qtHaveModule(widgets): QT += widgets
 
 DEFINES += QMEDIA_DIRECTSHOW_PLAYER
 
 HEADERS += \
-        $$PWD/directshowaudioendpointcontrol.h \
         $$PWD/directshoweventloop.h \
         $$PWD/directshowglobal.h \
         $$PWD/directshowioreader.h \
         $$PWD/directshowiosource.h \
         $$PWD/directshowmediatype.h \
         $$PWD/directshowmediatypelist.h \
-        $$PWD/directshowmetadatacontrol.h \
         $$PWD/directshowpinenum.h \
         $$PWD/directshowplayercontrol.h \
         $$PWD/directshowplayerservice.h \
         $$PWD/directshowsamplescheduler.h \
         $$PWD/directshowvideorenderercontrol.h \
         $$PWD/mediasamplevideobuffer.h \
-        $$PWD/videosurfacefilter.h \
-        $$PWD/vmr9videowindowcontrol.h
+        $$PWD/videosurfacefilter.h
 
 SOURCES += \
-        $$PWD/directshowaudioendpointcontrol.cpp \
         $$PWD/directshoweventloop.cpp \
         $$PWD/directshowioreader.cpp \
         $$PWD/directshowiosource.cpp \
         $$PWD/directshowmediatype.cpp \
         $$PWD/directshowmediatypelist.cpp \
-        $$PWD/directshowmetadatacontrol.cpp \
         $$PWD/directshowpinenum.cpp \
         $$PWD/directshowplayercontrol.cpp \
         $$PWD/directshowplayerservice.cpp \
         $$PWD/directshowsamplescheduler.cpp \
         $$PWD/directshowvideorenderercontrol.cpp \
         $$PWD/mediasamplevideobuffer.cpp \
-        $$PWD/videosurfacefilter.cpp \
+        $$PWD/videosurfacefilter.cpp
+
+!wince {
+HEADERS += \
+        $$PWD/directshowaudioendpointcontrol.h \
+        $$PWD/directshowmetadatacontrol.h \
+        $$PWD/vmr9videowindowcontrol.h
+
+SOURCES += \
+        $$PWD/directshowaudioendpointcontrol.cpp \
+        $$PWD/directshowmetadatacontrol.cpp \
         $$PWD/vmr9videowindowcontrol.cpp
+}
 
 config_evr {
     DEFINES += HAVE_EVR