123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- #include <pjmedia-videodev/config.h>
- #if defined(PJMEDIA_VIDEO_DEV_HAS_DSHOW) && PJMEDIA_VIDEO_DEV_HAS_DSHOW != 0
- #include <streams.h>
- #pragma warning( disable : 4514 )
- LONG CBaseObject::m_cObjects = 0;
- CBaseObject::CBaseObject(__in_opt LPCTSTR pName)
- {
-
- InterlockedIncrement(&m_cObjects);
- #ifdef DEBUG
- #ifdef UNICODE
- m_dwCookie = DbgRegisterObjectCreation(0, pName);
- #else
- m_dwCookie = DbgRegisterObjectCreation(pName, 0);
- #endif
- #endif
- }
- #ifdef UNICODE
- CBaseObject::CBaseObject(const char *pName)
- {
-
- InterlockedIncrement(&m_cObjects);
- #ifdef DEBUG
- m_dwCookie = DbgRegisterObjectCreation(pName, 0);
- #endif
- }
- #endif
- HINSTANCE hlibOLEAut32;
- CBaseObject::~CBaseObject()
- {
-
- if (InterlockedDecrement(&m_cObjects) == 0) {
- if (hlibOLEAut32) {
- FreeLibrary(hlibOLEAut32);
- hlibOLEAut32 = 0;
- }
- };
- #ifdef DEBUG
- DbgRegisterObjectDestruction(m_dwCookie);
- #endif
- }
- static const TCHAR szOle32Aut[] = TEXT("OleAut32.dll");
- HINSTANCE LoadOLEAut32()
- {
- if (hlibOLEAut32 == 0) {
- hlibOLEAut32 = LoadLibrary(szOle32Aut);
- }
- return hlibOLEAut32;
- }
- #pragma warning( disable : 4355 4100 )
- CUnknown::CUnknown(__in_opt LPCTSTR pName, __in_opt LPUNKNOWN pUnk)
- : CBaseObject(pName)
- , m_cRef(0)
- , m_pUnknown( pUnk != 0 ? pUnk : reinterpret_cast<LPUNKNOWN>( static_cast<PNDUNKNOWN>(this) ) )
-
-
-
-
- {
-
- }
- CUnknown::CUnknown(__in_opt LPCTSTR pName, __in_opt LPUNKNOWN pUnk, __inout_opt HRESULT *phr) :
- CBaseObject(pName),
- m_cRef(0),
- m_pUnknown( pUnk != 0 ? pUnk : reinterpret_cast<LPUNKNOWN>( static_cast<PNDUNKNOWN>(this) ) )
- {
- }
- #ifdef UNICODE
- CUnknown::CUnknown(__in_opt LPCSTR pName, __in_opt LPUNKNOWN pUnk)
- : CBaseObject(pName), m_cRef(0),
- m_pUnknown( pUnk != 0 ? pUnk : reinterpret_cast<LPUNKNOWN>( static_cast<PNDUNKNOWN>(this) ) )
- { }
- CUnknown::CUnknown(__in_opt LPCSTR pName, __in_opt LPUNKNOWN pUnk, __inout_opt HRESULT *phr) :
- CBaseObject(pName), m_cRef(0),
- m_pUnknown( pUnk != 0 ? pUnk : reinterpret_cast<LPUNKNOWN>( static_cast<PNDUNKNOWN>(this) ) )
- { }
- #endif
- #pragma warning( default : 4355 4100 )
- STDMETHODIMP CUnknown::NonDelegatingQueryInterface(REFIID riid, __deref_out void ** ppv)
- {
- CheckPointer(ppv,E_POINTER);
- ValidateReadWritePtr(ppv,sizeof(PVOID));
-
- if (riid == IID_IUnknown) {
- GetInterface((LPUNKNOWN) (PNDUNKNOWN) this, ppv);
- return NOERROR;
- } else {
- *ppv = NULL;
- return E_NOINTERFACE;
- }
- }
- template<class T> inline static T ourmax( const T & a, const T & b )
- {
- return a > b ? a : b;
- }
- STDMETHODIMP_(ULONG) CUnknown::NonDelegatingAddRef()
- {
- LONG lRef = InterlockedIncrement( &m_cRef );
- ASSERT(lRef > 0);
- DbgLog((LOG_MEMORY,3,TEXT(" Obj %d ref++ = %d"),
- m_dwCookie, m_cRef));
- return ourmax(ULONG(m_cRef), 1ul);
- }
- STDMETHODIMP_(ULONG) CUnknown::NonDelegatingRelease()
- {
-
- LONG lRef = InterlockedDecrement( &m_cRef );
- ASSERT(lRef >= 0);
- DbgLog((LOG_MEMORY,3,TEXT(" Object %d ref-- = %d"),
- m_dwCookie, m_cRef));
- if (lRef == 0) {
-
-
-
-
-
-
-
-
-
-
-
- m_cRef++;
- delete this;
- return ULONG(0);
- } else {
-
-
- return ourmax(ULONG(lRef), 1ul);
- }
- }
- STDAPI GetInterface(LPUNKNOWN pUnk, __out void **ppv)
- {
- CheckPointer(ppv, E_POINTER);
- *ppv = pUnk;
- pUnk->AddRef();
- return NOERROR;
- }
- BOOL WINAPI IsEqualObject(IUnknown *pFirst, IUnknown *pSecond)
- {
-
- if (pFirst == pSecond) {
- return TRUE;
- }
-
- LPUNKNOWN pUnknown1;
- LPUNKNOWN pUnknown2;
- HRESULT hr;
- ASSERT(pFirst);
- ASSERT(pSecond);
-
- hr = pFirst->QueryInterface(IID_IUnknown,(void **) &pUnknown1);
- if (FAILED(hr)) {
- return FALSE;
- }
- ASSERT(pUnknown1);
-
- pUnknown1->Release();
- hr = pSecond->QueryInterface(IID_IUnknown,(void **) &pUnknown2);
- if (FAILED(hr)) {
- return FALSE;
- }
- ASSERT(pUnknown2);
-
- pUnknown2->Release();
- return (pUnknown1 == pUnknown2);
- }
- #endif
|