/* 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 . */ #ifndef PHONON_QPIN_H #define PHONON_QPIN_H #include "phononds9_namespace.h" #include #include #include #include QT_BEGIN_NAMESPACE namespace Phonon { namespace DS9 { class QBaseFilter; //this is the base class for our self-implemented Pins class QPin : public IPin { public: QPin(QBaseFilter *parent, PIN_DIRECTION dir, const QVector &mt); virtual ~QPin(); //reimplementation from IUnknown STDMETHODIMP QueryInterface(REFIID iid, void** out); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); //reimplementation from IPin STDMETHODIMP Connect(IPin *,const AM_MEDIA_TYPE *); STDMETHODIMP ReceiveConnection(IPin *,const AM_MEDIA_TYPE *); STDMETHODIMP Disconnect(); STDMETHODIMP ConnectedTo(IPin **); STDMETHODIMP ConnectionMediaType(AM_MEDIA_TYPE *); STDMETHODIMP QueryPinInfo(PIN_INFO *); STDMETHODIMP QueryDirection(PIN_DIRECTION *); STDMETHODIMP QueryId(LPWSTR*); STDMETHODIMP QueryAccept(const AM_MEDIA_TYPE*); STDMETHODIMP EnumMediaTypes(IEnumMediaTypes **); STDMETHODIMP QueryInternalConnections(IPin **, ULONG*); STDMETHODIMP EndOfStream(); STDMETHODIMP BeginFlush(); STDMETHODIMP EndFlush(); STDMETHODIMP NewSegment(REFERENCE_TIME, REFERENCE_TIME, double); QVector mediaTypes() const; HRESULT setAcceptedMediaType(const AM_MEDIA_TYPE &); bool isFlushing() const; void setConnectedType(const AM_MEDIA_TYPE &type); const AM_MEDIA_TYPE &connectedType() const; void setConnected(IPin *pin); IPin *connected(bool = false) const; void setMemoryAllocator(IMemAllocator *alloc); IMemAllocator *memoryAllocator(bool = false) const; void createDefaultMemoryAllocator(ALLOCATOR_PROPERTIES * = 0); PIN_DIRECTION direction() const; FILTER_STATE filterState() const; static AM_MEDIA_TYPE copyMediaType(const AM_MEDIA_TYPE &type); static void freeMediaType(AM_MEDIA_TYPE *type); static void freeMediaType(const AM_MEDIA_TYPE &type); protected: //this can be used by sub-classes mutable QMutex m_mutex; QBaseFilter * const m_parent; bool m_flushing; private: HRESULT checkOutputMediaTypesConnection(IPin *pin); HRESULT checkOwnMediaTypesConnection(IPin *pin); LONG m_refCount; IPin *m_connected; const PIN_DIRECTION m_direction; QVector m_mediaTypes; //accepted media types AM_MEDIA_TYPE m_connectedType; IMemAllocator *m_memAlloc; }; //utility function class QAMMediaType : public AM_MEDIA_TYPE { public: ~QAMMediaType() { QPin::freeMediaType(*this); } }; } } QT_END_NAMESPACE #endif //PHONON_QPIN_H