summaryrefslogtreecommitdiff
path: root/src/libw32dll/DirectShow/iunk.h
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2001-11-11 23:32:25 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2001-11-11 23:32:25 +0000
commit675ca3309d98e4257a606e9daed11f7bad8cdca0 (patch)
treefd6cb641e235a3514cfba1d938e46b84ac708d9f /src/libw32dll/DirectShow/iunk.h
parent2407730277bb538b84405d7fde13756de95b9286 (diff)
downloadxine-lib-675ca3309d98e4257a606e9daed11f7bad8cdca0.tar.gz
xine-lib-675ca3309d98e4257a606e9daed11f7bad8cdca0.tar.bz2
initial import of DirectShow support files. Most of hard work was done
(converting all c++ files to c) and DS_Audio codecs are already producing some (weird) sound from my local tree. I hope to commit it soon... CVS patchset: 1022 CVS date: 2001/11/11 23:32:25
Diffstat (limited to 'src/libw32dll/DirectShow/iunk.h')
-rw-r--r--src/libw32dll/DirectShow/iunk.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/libw32dll/DirectShow/iunk.h b/src/libw32dll/DirectShow/iunk.h
new file mode 100644
index 000000000..2c672b374
--- /dev/null
+++ b/src/libw32dll/DirectShow/iunk.h
@@ -0,0 +1,59 @@
+#ifndef DS_IUNK_H
+#define DS_IUNK_H
+
+#include "guids.h"
+
+#define DECLARE_IUNKNOWN(CLASSNAME) \
+ long STDCALL (*QueryInterface)(IUnknown * This, GUID* riid, void **ppvObject); \
+ long STDCALL (*AddRef) (IUnknown * This); \
+ long STDCALL (*Release) (IUnknown * This); \
+ int refcount;
+
+#define INHERIT_IUNKNOWN() \
+ long STDCALL (*QueryInterface)(IUnknown * This, GUID* riid, void **ppvObject); \
+ long STDCALL (*AddRef) (IUnknown * This); \
+ long STDCALL (*Release) (IUnknown * This);
+
+#define IMPLEMENT_IUNKNOWN(CLASSNAME) \
+long STDCALL CLASSNAME ## _QueryInterface(IUnknown * This, GUID* riid, void **ppvObject); \
+long STDCALL CLASSNAME ## _AddRef ( \
+ IUnknown * This); \
+long STDCALL CLASSNAME ## _Release ( \
+ IUnknown * This); \
+long STDCALL CLASSNAME ## _QueryInterface(IUnknown * This, GUID* riid, void **ppvObject) \
+{ \
+ CLASSNAME * me = (CLASSNAME *)This; \
+ GUID* r; unsigned int i = 0; \
+ Debug printf(#CLASSNAME "_QueryInterface() called\n");\
+ if (!ppvObject) return 0x80004003; \
+ for(r=me->interfaces; i<sizeof(me->interfaces)/sizeof(me->interfaces[0]); r++, i++) \
+ if(!memcmp(r, riid, 16)) \
+ { \
+ me->vt->AddRef((IUnknown*)This); \
+ *ppvObject=This; \
+ return 0; \
+ } \
+ Debug printf("Failed\n"); \
+ return E_NOINTERFACE; \
+} \
+ \
+long STDCALL CLASSNAME ## _AddRef ( \
+ IUnknown * This) \
+{ \
+ CLASSNAME * me=( CLASSNAME *)This; \
+ Debug printf(#CLASSNAME "_AddRef() called\n"); \
+ return ++(me->refcount); \
+} \
+ \
+long STDCALL CLASSNAME ## _Release ( \
+ IUnknown * This) \
+{ \
+ CLASSNAME* me=( CLASSNAME *)This; \
+ Debug printf(#CLASSNAME "_Release() called\n"); \
+ if(--(me->refcount) ==0) \
+ CLASSNAME ## _Destroy(me); \
+ return 0; \
+}
+
+
+#endif /* DS_IUNK_H */