/**************************************************************************** ** ** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** $QT_END_LICENSE$ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ****************************************************************************/ #ifndef DIRECTSHOWIOSOURCE_H #define DIRECTSHOWIOSOURCE_H #include "directshowglobal.h" #include "directshowioreader.h" #include "directshowmediatype.h" #include QT_BEGIN_NAMESPACE class DirectShowIOSource : public IBaseFilter , public IAMFilterMiscFlags , public IPin { Q_DISABLE_COPY(DirectShowIOSource) public: DirectShowIOSource(DirectShowEventLoop *loop); virtual ~DirectShowIOSource(); void setDevice(QIODevice *device); void setAllocator(IMemAllocator *allocator); // IUnknown HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) override; ULONG STDMETHODCALLTYPE AddRef() override; ULONG STDMETHODCALLTYPE Release() override; // IPersist HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID) override; // IMediaFilter HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart) override; HRESULT STDMETHODCALLTYPE Pause() override; HRESULT STDMETHODCALLTYPE Stop() override; HRESULT STDMETHODCALLTYPE GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *pState) override; HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock) override; HRESULT STDMETHODCALLTYPE GetSyncSource(IReferenceClock **ppClock) override; // IBaseFilter HRESULT STDMETHODCALLTYPE EnumPins(IEnumPins **ppEnum) override; HRESULT STDMETHODCALLTYPE FindPin(LPCWSTR Id, IPin **ppPin) override; HRESULT STDMETHODCALLTYPE JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pName) override; HRESULT STDMETHODCALLTYPE QueryFilterInfo(FILTER_INFO *pInfo) override; HRESULT STDMETHODCALLTYPE QueryVendorInfo(LPWSTR *pVendorInfo) override; // IAMFilterMiscFlags ULONG STDMETHODCALLTYPE GetMiscFlags() override; // IPin HRESULT STDMETHODCALLTYPE Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) override; HRESULT STDMETHODCALLTYPE ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt) override; HRESULT STDMETHODCALLTYPE Disconnect() override; HRESULT STDMETHODCALLTYPE ConnectedTo(IPin **ppPin) override; HRESULT STDMETHODCALLTYPE ConnectionMediaType(AM_MEDIA_TYPE *pmt) override; HRESULT STDMETHODCALLTYPE QueryPinInfo(PIN_INFO *pInfo) override; HRESULT STDMETHODCALLTYPE QueryId(LPWSTR *Id) override; HRESULT STDMETHODCALLTYPE QueryAccept(const AM_MEDIA_TYPE *pmt) override; HRESULT STDMETHODCALLTYPE EnumMediaTypes(IEnumMediaTypes **ppEnum) override; HRESULT STDMETHODCALLTYPE QueryInternalConnections(IPin **apPin, ULONG *nPin) override; HRESULT STDMETHODCALLTYPE EndOfStream() override; HRESULT STDMETHODCALLTYPE BeginFlush() override; HRESULT STDMETHODCALLTYPE EndFlush() override; HRESULT STDMETHODCALLTYPE NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate) override; HRESULT STDMETHODCALLTYPE QueryDirection(PIN_DIRECTION *pPinDir) override; private: volatile LONG m_ref = 1; FILTER_STATE m_state = State_Stopped; DirectShowIOReader *m_reader = nullptr; DirectShowEventLoop *m_loop; IFilterGraph *m_graph = nullptr; IReferenceClock *m_clock = nullptr; IMemAllocator *m_allocator = nullptr; IPin *m_peerPin = nullptr; DirectShowMediaType m_connectionMediaType; QList m_supportedMediaTypes; QString m_filterName; const QString m_pinId = QLatin1String("Data"); bool m_queriedForAsyncReader = false; QMutex m_mutex; }; QT_END_NAMESPACE #endif