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