diff -r 000000000000 -r 1918ee327afb src/3rdparty/phonon/ds9/backendnode.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/3rdparty/phonon/ds9/backendnode.cpp Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,117 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see . +*/ + +#include "backendnode.h" +#include "mediaobject.h" + +#include // ISpecifyPropertyPages +#include // OleCreatePropertyFrame + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ + namespace DS9 + { + // Displays a property dialog for a filter (experimental but should be put into main + /*static void showPropertyDialog(const Filter &filter) + { + ComPointer prop(filter, IID_ISpecifyPropertyPages); + if (prop != 0) { + IUnknown *iunk[] = {filter}; + // Show the page. + CAUUID caGUID; + prop->GetPages(&caGUID); + OleCreatePropertyFrame( + 0, // Parent window + 0, 0, // (Reserved) + 0, // Caption for the dialog box + 1, // Number of objects (just the filter) + iunk, // Array of object pointers. + caGUID.cElems, // Number of property pages + caGUID.pElems, // Array of property page CLSIDs + 0, // Locale identifier + 0, 0 // Reserved + ); + } + }*/ + + //for now we have 2 graphs that do the same + BackendNode::BackendNode(QObject *parent) : QObject(parent), m_mediaObject(0) + { + } + + BackendNode::~BackendNode() + { + //this will remove the filter from the graph + mediaObjectDestroyed(); + } + + void BackendNode::setMediaObject(MediaObject *mo) + { + if (m_mediaObject) { + disconnect(m_mediaObject, SIGNAL(destroyed()), this, SLOT(mediaObjectDestroyed())); + } + m_mediaObject = mo; + connect(mo, SIGNAL(destroyed()), SLOT(mediaObjectDestroyed())); + } + + void BackendNode::mediaObjectDestroyed() + { + //remove the filter from its graph + 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); + Q_ASSERT(SUCCEEDED(hr)); + Q_UNUSED(hr); + info.pGraph->Release(); + } + } + m_mediaObject = 0; + } + + QList BackendNode::pins(const Filter &filter, PIN_DIRECTION wantedDirection) + { + QList ret; + if (filter) { + ComPointer enumPin; + HRESULT hr = filter->EnumPins(enumPin.pparam()); + Q_UNUSED(hr); + Q_ASSERT( SUCCEEDED(hr)); + InputPin pin; + while (enumPin->Next(1, pin.pparam(), 0) == S_OK) { + PIN_DIRECTION dir; + hr = pin->QueryDirection(&dir); + Q_ASSERT( SUCCEEDED(hr)); + if (dir == wantedDirection) { + ret.append(pin); + } + } + } + return ret; + } + } +} + +QT_END_NAMESPACE + +#include "moc_backendnode.cpp"