summaryrefslogtreecommitdiff
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.cpp38
1 files changed, 31 insertions, 7 deletions
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 656cd5a7c..0b1c97a74 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -59,12 +59,12 @@ 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;
@@ -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()