diff options
Diffstat (limited to 'src/3rdparty/phonon/ds9')
-rw-r--r-- | src/3rdparty/phonon/ds9/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/3rdparty/phonon/ds9/backend.cpp | 9 | ||||
-rw-r--r-- | src/3rdparty/phonon/ds9/backend.h | 2 | ||||
-rw-r--r-- | src/3rdparty/phonon/ds9/backendnode.cpp | 19 | ||||
-rw-r--r-- | src/3rdparty/phonon/ds9/ds9.desktop | 42 | ||||
-rw-r--r-- | src/3rdparty/phonon/ds9/iodevicereader.cpp | 11 | ||||
-rw-r--r-- | src/3rdparty/phonon/ds9/mediaobject.cpp | 2 | ||||
-rw-r--r-- | src/3rdparty/phonon/ds9/videorenderer_soft.cpp | 7 |
8 files changed, 83 insertions, 14 deletions
diff --git a/src/3rdparty/phonon/ds9/CMakeLists.txt b/src/3rdparty/phonon/ds9/CMakeLists.txt index 1bb6f6f79d..7378b53110 100644 --- a/src/3rdparty/phonon/ds9/CMakeLists.txt +++ b/src/3rdparty/phonon/ds9/CMakeLists.txt @@ -40,14 +40,15 @@ if (BUILD_PHONON_DS9) ) add_definitions(-DPHONON_MAKE_QT_ONLY_BACKEND -DUNICODE) - automoc4_add_library(phonon_ds9 SHARED ${phonon_ds9_SRCS}) + automoc4_add_library(phonon_ds9 MODULE ${phonon_ds9_SRCS}) set_target_properties(phonon_ds9 PROPERTIES PREFIX "") target_link_libraries(phonon_ds9 ${PHONON_LIBS} ${QT_QTOPENGL_LIBRARY} ${OPENGL_gl_LIBRARY} dxguid strmiids dmoguids msdmo ole32 oleaut32 uuid gdi32) + # 'MODULE' is treated as a LIBRARY install(TARGETS phonon_ds9 RUNTIME DESTINATION ${BIN_INSTALL_DIR}/phonon_backend - LIBRARY DESTINATION ${LIB_INSTALL_DIR} + LIBRARY DESTINATION ${BIN_INSTALL_DIR}/phonon_backend ARCHIVE DESTINATION ${LIB_INSTALL_DIR}) install(FILES ds9.desktop DESTINATION ${SERVICES_INSTALL_DIR}/phononbackends) endif (BUILD_PHONON_DS9) diff --git a/src/3rdparty/phonon/ds9/backend.cpp b/src/3rdparty/phonon/ds9/backend.cpp index 6ed01456c5..fbc4bdcf59 100644 --- a/src/3rdparty/phonon/ds9/backend.cpp +++ b/src/3rdparty/phonon/ds9/backend.cpp @@ -41,6 +41,8 @@ namespace Phonon { namespace DS9 { + QMutex *Backend::directShowMutex = 0; + bool Backend::AudioMoniker::operator==(const AudioMoniker &other) { return other->IsEqual(*this) == S_OK; @@ -50,6 +52,8 @@ namespace Phonon Backend::Backend(QObject *parent, const QVariantList &) : QObject(parent) { + directShowMutex = &m_directShowMutex; + ::CoInitialize(0); //registering meta types @@ -62,11 +66,8 @@ namespace Phonon m_audioOutputs.clear(); m_audioEffects.clear(); ::CoUninitialize(); - } - QMutex *Backend::directShowMutex() - { - return &qobject_cast<Backend*>(qt_plugin_instance())->m_directShowMutex; + directShowMutex = 0; } QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const QList<QVariant> &args) diff --git a/src/3rdparty/phonon/ds9/backend.h b/src/3rdparty/phonon/ds9/backend.h index 8b020c23d9..7c3c1093a9 100644 --- a/src/3rdparty/phonon/ds9/backend.h +++ b/src/3rdparty/phonon/ds9/backend.h @@ -64,7 +64,7 @@ namespace Phonon Filter getAudioOutputFilter(int index) const; - static QMutex *directShowMutex(); + static QMutex *directShowMutex; Q_SIGNALS: void objectDescriptionChanged(ObjectDescriptionType); diff --git a/src/3rdparty/phonon/ds9/backendnode.cpp b/src/3rdparty/phonon/ds9/backendnode.cpp index 855357a0f0..3afcafadfc 100644 --- a/src/3rdparty/phonon/ds9/backendnode.cpp +++ b/src/3rdparty/phonon/ds9/backendnode.cpp @@ -58,7 +58,24 @@ namespace Phonon BackendNode::~BackendNode() { //this will remove the filter from the graph - mediaObjectDestroyed(); + FILTER_INFO info; + for(int i = 0; i < FILTER_COUNT; ++i) { + const Filter &filter = m_filters[i]; + if (!filter) + continue; + filter->QueryFilterInfo(&info); + if (info.pGraph) { + HRESULT hr = info.pGraph->RemoveFilter(filter); + + if (hr == VFW_E_NOT_STOPPED && m_mediaObject) { + m_mediaObject->ensureStopped(); + + hr = info.pGraph->RemoveFilter(filter); + } + Q_ASSERT(SUCCEEDED(hr)); + info.pGraph->Release(); + } + } } void BackendNode::setMediaObject(MediaObject *mo) diff --git a/src/3rdparty/phonon/ds9/ds9.desktop b/src/3rdparty/phonon/ds9/ds9.desktop index ece3c9c784..764390ee55 100644 --- a/src/3rdparty/phonon/ds9/ds9.desktop +++ b/src/3rdparty/phonon/ds9/ds9.desktop @@ -9,28 +9,69 @@ X-KDE-PhononBackendInfo-Website=http://qt.nokia.com/ InitialPreference=15 Name=DirectShow9 +Name[bg]=DirectShow9 +Name[ca]=DirectShow9 +Name[cs]=DirectShow9 +Name[da]=DirectShow9 +Name[de]=DirectShow9 +Name[el]=DirectShow9 +Name[en_GB]=DirectShow9 +Name[es]=DirectShow9 +Name[et]=DirectShow9 +Name[eu]=DirectShow9 +Name[fr]=DirectShow9 +Name[ga]=DirectShow9 +Name[gl]=DirectShow9 +Name[hsb]=DirectShow9 +Name[hu]=DirectShow9 +Name[is]=DirectShow9 +Name[it]=DirectShow9 +Name[ja]=DirectShow9 +Name[ko]=DirectShow9 +Name[ku]=DirectShow9 +Name[lt]=DirectShow9 +Name[lv]=DirectShow9 +Name[nds]=DirectShow9 +Name[nl]=DirectShow9 +Name[nn]=DirectShow9 Name[pa]=ਡਾਇਰੈਕਸ਼ੋ9 +Name[pl]=DirectShow9 +Name[pt]=DirectShow9 +Name[pt_BR]=DirectShow9 +Name[se]=DirectShow9 Name[sk]=DirectShow 9 Name[sl]=DirectShow 9 Name[sr]=Директшоу‑9 Name[sr@latin]=DirectShow‑9 Name[sv]=Directshow 9 +Name[tr]=DirectShow9 +Name[uk]=DirectShow9 Name[x-test]=xxDirectShow9xx +Name[zh_CN]=DirectShow9 +Name[zh_TW]=DirectShow9 Comment=Phonon DirectShow9 backend Comment[bg]=Phonon DirectShow9 Comment[ca]=Dorsal DirectShow9 del Phonon +Comment[cs]=Phonon DirectShow9 backend Comment[da]=DirectShow9-backend til Phonon Comment[de]=Phonon-Treiber für DirectShow9 Comment[el]=Σύστημα υποστήριξης DirectShow9 του Phonon +Comment[en_GB]=Phonon DirectShow9 backend Comment[es]=Motor DirectShow9 para Phonon Comment[et]=Phononi DirectShow9 taustaprogramm +Comment[eu]=Phonon DirectShow9 backend Comment[fr]=Système de gestion DirectShow9 pour Phonon Comment[ga]=Inneall DirectShow9 le haghaidh Phonon Comment[gl]=Infraestrutura de DirectShow9 para Phonon +Comment[hsb]=Phonon DirectShow9 backend +Comment[hu]=Phonon DirectShow9 modul +Comment[is]=Phonon DirectShow9 bakendi Comment[it]=Motore DirectShow9 di Phonon Comment[ja]=Phonon DirectShow9 バックエンド Comment[ko]=Phonon DirectShow9 백엔드 +Comment[ku]=Binesaza Phonon DirectShow9 +Comment[lt]=Phonon DirectShow9 galinė sąsaja Comment[lv]=Phonon DirectShow9 aizmugure Comment[nds]=Phonon-Hülpprogrmm DirectShow9 Comment[nl]=DirectShow9-backend (Phonon) @@ -39,6 +80,7 @@ Comment[pa]=ਫੋਨੋਨ ਡਾਇਰੈਕਟਸ਼ੋ9 ਬੈਕਐਂਡ Comment[pl]=Obsługa DirectShow9 przez Phonon Comment[pt]=Infra-estrutura do DirectShow9 para o Phonon Comment[pt_BR]=Infraestrutura Phonon DirectShow9 +Comment[se]=Phonon DirectShow9 duogášmohtor Comment[sk]=Phonon DirectShow 9 podsystém Comment[sl]=Phononova Hrbtenica DirectShow 9 Comment[sr]=Директшоу‑9 као позадина Фонона diff --git a/src/3rdparty/phonon/ds9/iodevicereader.cpp b/src/3rdparty/phonon/ds9/iodevicereader.cpp index e0c505c7d9..695af59085 100644 --- a/src/3rdparty/phonon/ds9/iodevicereader.cpp +++ b/src/3rdparty/phonon/ds9/iodevicereader.cpp @@ -36,17 +36,20 @@ namespace Phonon //these mediatypes define a stream, its type will be autodetected by DirectShow static QVector<AM_MEDIA_TYPE> getMediaTypes() { - AM_MEDIA_TYPE mt = { MEDIATYPE_Stream, MEDIASUBTYPE_NULL, TRUE, FALSE, 1, GUID_NULL, 0, 0, 0}; + //the order here is important because otherwise, + //directshow might not be able to detect the stream type correctly + + AM_MEDIA_TYPE mt = { MEDIATYPE_Stream, MEDIASUBTYPE_Avi, TRUE, FALSE, 1, GUID_NULL, 0, 0, 0}; QVector<AM_MEDIA_TYPE> ret; - //normal auto-detect stream - ret << mt; //AVI stream - mt.subtype = MEDIASUBTYPE_Avi; ret << mt; //WAVE stream mt.subtype = MEDIASUBTYPE_WAVE; ret << mt; + //normal auto-detect stream (must be at the end!) + mt.subtype = MEDIASUBTYPE_NULL; + ret << mt; return ret; } diff --git a/src/3rdparty/phonon/ds9/mediaobject.cpp b/src/3rdparty/phonon/ds9/mediaobject.cpp index 250b94aedd..106a4c8ed6 100644 --- a/src/3rdparty/phonon/ds9/mediaobject.cpp +++ b/src/3rdparty/phonon/ds9/mediaobject.cpp @@ -177,7 +177,7 @@ namespace Phonon void WorkerThread::handleTask() { - QMutexLocker locker(Backend::directShowMutex()); + QMutexLocker locker(Backend::directShowMutex); { QMutexLocker locker(&m_mutex); if (m_finished || m_queue.isEmpty()) { diff --git a/src/3rdparty/phonon/ds9/videorenderer_soft.cpp b/src/3rdparty/phonon/ds9/videorenderer_soft.cpp index 82d62359a4..f7d42cf1fe 100644 --- a/src/3rdparty/phonon/ds9/videorenderer_soft.cpp +++ b/src/3rdparty/phonon/ds9/videorenderer_soft.cpp @@ -661,7 +661,10 @@ namespace Phonon #ifndef QT_NO_OPENGL - if (painter.paintEngine() && painter.paintEngine()->type() == QPaintEngine::OpenGL && checkGLPrograms()) { + if (painter.paintEngine() && + (painter.paintEngine()->type() == QPaintEngine::OpenGL || painter.paintEngine()->type() == QPaintEngine::OpenGL2) + && checkGLPrograms()) { + //for now we only support YUV (both YV12 and YUY2) updateTexture(); @@ -673,6 +676,7 @@ namespace Phonon } //let's draw the texture + painter.beginNativePainting(); //Let's pass the other arguments const Program prog = (m_inputPin->connectedType().subtype == MEDIASUBTYPE_YV12) ? YV12toRGB : YUY2toRGB; @@ -722,6 +726,7 @@ namespace Phonon glDisableClientState(GL_VERTEX_ARRAY); glDisable(GL_FRAGMENT_PROGRAM_ARB); + painter.endNativePainting(); return; } else #endif |