summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/common/directshowobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/directshow/common/directshowobject.h')
-rw-r--r--src/plugins/directshow/common/directshowobject.h46
1 files changed, 14 insertions, 32 deletions
diff --git a/src/plugins/directshow/common/directshowobject.h b/src/plugins/directshow/common/directshowobject.h
index cfac16f61..5a8c05a3e 100644
--- a/src/plugins/directshow/common/directshowobject.h
+++ b/src/plugins/directshow/common/directshowobject.h
@@ -44,38 +44,20 @@
QT_BEGIN_NAMESPACE
-class DirectShowObject
-{
-public:
- DirectShowObject();
- virtual ~DirectShowObject();
-
- virtual HRESULT getInterface(REFIID riid, void **ppvObject);
- ULONG ref();
- ULONG unref();
-
-private:
- Q_DISABLE_COPY(DirectShowObject)
-
- volatile LONG m_ref;
-};
-
-HRESULT GetInterface(IUnknown *pUnk, void **ppv);
-
-#define DIRECTSHOW_OBJECT \
-public: \
- STDMETHODIMP QueryInterface(REFIID riid, void **ppv) { \
- if (riid == IID_IUnknown) \
- return GetInterface(reinterpret_cast<IUnknown*>(this), ppv); \
- else \
- return getInterface(riid, ppv); \
- }; \
- STDMETHODIMP_(ULONG) AddRef() { \
- return ref(); \
- }; \
- STDMETHODIMP_(ULONG) Release() { \
- return unref(); \
- };
+#define COM_REF_MIXIN \
+ volatile ULONG m_ref = 1; \
+public: \
+ STDMETHODIMP_(ULONG) AddRef() override \
+ { \
+ return InterlockedIncrement(&m_ref); \
+ } \
+ STDMETHODIMP_(ULONG) Release() override \
+ { \
+ const ULONG ref = InterlockedDecrement(&m_ref); \
+ if (ref == 0) \
+ delete this; \
+ return ref; \
+ }
QT_END_NAMESPACE