summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/player/videosurfacefilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/directshow/player/videosurfacefilter.cpp')
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp56
1 files changed, 40 insertions, 16 deletions
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 656cd5a7c..c521a251b 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -59,28 +59,28 @@ DEFINE_GUID(CLSID_VideoSurfaceFilter,
class VideoSurfaceInputPin : public DirectShowInputPin
{
- DIRECTSHOW_OBJECT
-
+ COM_REF_MIXIN
public:
VideoSurfaceInputPin(VideoSurfaceFilter *filter);
- // DirectShowPin
+ STDMETHODIMP QueryInterface(REFIID riid, void **ppv) override;
+
bool isMediaTypeSupported(const AM_MEDIA_TYPE *type) override;
bool setMediaType(const AM_MEDIA_TYPE *type) override;
- HRESULT completeConnection(IPin *pin);
- HRESULT connectionEnded();
+ HRESULT completeConnection(IPin *pin) override;
+ HRESULT connectionEnded() override;
// IPin
- STDMETHODIMP ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt);
- STDMETHODIMP Disconnect();
- STDMETHODIMP EndOfStream();
- STDMETHODIMP BeginFlush();
- STDMETHODIMP EndFlush();
+ STDMETHODIMP ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt) override;
+ STDMETHODIMP Disconnect() override;
+ STDMETHODIMP EndOfStream() override;
+ STDMETHODIMP BeginFlush() override;
+ STDMETHODIMP EndFlush() override;
// IMemInputPin
- STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps);
- STDMETHODIMP Receive(IMediaSample *pMediaSample);
+ STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps) override;
+ STDMETHODIMP Receive(IMediaSample *pMediaSample) override;
private:
VideoSurfaceFilter *m_videoSurfaceFilter;
@@ -92,6 +92,22 @@ VideoSurfaceInputPin::VideoSurfaceInputPin(VideoSurfaceFilter *filter)
{
}
+HRESULT VideoSurfaceInputPin::QueryInterface(REFIID riid, void **ppv)
+{
+ if (ppv == nullptr)
+ return E_POINTER;
+ if (riid == IID_IUnknown)
+ *ppv = static_cast<IUnknown *>(static_cast<DirectShowPin *>(this));
+ else if (riid == IID_IPin)
+ *ppv = static_cast<IPin *>(this);
+ else if (riid == IID_IMemInputPin)
+ *ppv =static_cast<IMemInputPin*>(this);
+ else
+ return E_NOINTERFACE;
+ AddRef();
+ return S_OK;
+}
+
bool VideoSurfaceInputPin::isMediaTypeSupported(const AM_MEDIA_TYPE *type)
{
return m_videoSurfaceFilter->isMediaTypeSupported(type);
@@ -237,12 +253,20 @@ VideoSurfaceFilter::~VideoSurfaceFilter()
CloseHandle(m_renderEvent);
}
-HRESULT VideoSurfaceFilter::getInterface(const IID &riid, void **ppvObject)
+HRESULT VideoSurfaceFilter::QueryInterface(REFIID riid, void **ppv)
{
- if (riid == IID_IAMFilterMiscFlags)
- return GetInterface(static_cast<IAMFilterMiscFlags*>(this), ppvObject);
+ if (ppv == nullptr)
+ return E_POINTER;
+ if (riid == IID_IUnknown)
+ *ppv = static_cast<IUnknown *>(static_cast<DirectShowBaseFilter *>(this));
+ else if (riid == IID_IPersist || riid == IID_IMediaFilter || riid == IID_IBaseFilter)
+ *ppv = static_cast<IBaseFilter *>(this);
+ else if (riid == IID_IAMFilterMiscFlags)
+ *ppv = static_cast<IAMFilterMiscFlags *>(this);
else
- return DirectShowBaseFilter::getInterface(riid, ppvObject);
+ return E_NOINTERFACE;
+ AddRef();
+ return S_OK;
}
QList<DirectShowPin *> VideoSurfaceFilter::pins()