diff options
Diffstat (limited to 'src/plugins/directshow/common/directshowobject.h')
-rw-r--r-- | src/plugins/directshow/common/directshowobject.h | 46 |
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 |