changeset 34115:3d7ee643b110

Port to Wine. This makes MPlayer and the GUI compile and run as a Wine executable, which is mainly to allow Windows code checking in a Linux environment. In Makefile: Generalize the windres call by specifying option "-o" for the output file. In gui/win32/interface.c: Use the same function to create a thread as Cygwin, and convert Windows style file names so that they are accessible in the Linux environment. In osdep/priority.c: Include windows.h. In configure: Add system "Wine" which shall be considered (mostly) a win32 system. Since winegcc by default compiles all files with the "-fpic" flag, remove it, and remove all MinGW compatibility WIN32 defines, because we're not compiling for real Windows. Define to not use Windows sockets (Wine uses different ones) and replace Windows' stricmp by strcasecmp. Ensure that yasm's object format isn't win32 and that HAVE_LINUX_DVD_STRUCT will be defined. In stream/tvi_dshow.c: Define MP_DEFINE_LOCAL_GUID, because Wine's DEFINE_GUID macro isn't compatible using "static" with it. In loader/com.h: Rename the IIDs to become local ones, because Wine's unknwn.h not only declares but defines them. In mplayer.c: Don't define a SIGSEGV signal handler, or the Wine executable will crash.
author ib
date Sat, 15 Oct 2011 13:20:52 +0000
parents 113156bc1137
children 5f7c090e5ae8
files Changelog DOCS/tech/crosscompile.txt DOCS/tech/mingw-crosscompile.txt Makefile configure gui/win32/interface.c loader/com.h mplayer.c osdep/priority.c stream/tvi_dshow.c
diffstat 10 files changed, 161 insertions(+), 76 deletions(-) [+]
line wrap: on
line diff
--- a/Changelog	Sat Oct 15 11:07:29 2011 +0000
+++ b/Changelog	Sat Oct 15 13:20:52 2011 +0000
@@ -19,6 +19,9 @@
     * experimental af_cmdline slave command to change e.g. audio equalizer options at runtime.
     * vo x11: don't hide or show cursor any more if attached to an existing window (-wid)
 
+    Ports:
+    * Wine (see DOCS/tech/crosscompile.txt)
+
     MEncoder:
     * -force-key-frames option to set explicit seek points.
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DOCS/tech/crosscompile.txt	Sat Oct 15 13:20:52 2011 +0000
@@ -0,0 +1,53 @@
+Due to a lack of Windows developers, it is a good idea to allow Linux
+developers to do at least some basic check of their code.
+This HOWTO explains how to set up cross-compilation.
+
+
+MinGW under Debian
+==================
+
+First, you need to install the "mingw32" package and get a MPlayer SVN
+checkout.
+
+Next, you need quite a lot of dependencies. Since this is for testing and
+not actually use, the easiest way is to use this package:
+http://natsuki.mplayerhq.hu/~reimar/mpl_mingw32.tar.bz2
+NOTE that this is likely to be quite out-dated and might include packages
+with security issues, so do not use it to build binaries for real use.
+
+After extracting this package into the MPlayer source-tree,
+you only need to run the included linux-mingw.sh to configure (it just runs
+./configure --host-cc=cc --target=i686-mingw32msvc --cc=i586-mingw32msvc-cc
+--windres=i586-mingw32msvc-windres --ranlib=i586-mingw32msvc-ranlib
+--extra-cflags="-I$PWD/osdep/mingw32"
+--extra-ldflags="-L$PWD/osdep/mingw32"
+--with-freetype-config="$PWD/osdep/mingw32/ftconf") and then run make.
+
+You should be able to run the generated binary with Wine, if you want to.
+
+The steps as command-lines:
+
+sudo apt-get install mingw32
+svn co svn://svn.mplayerhq.hu/mplayer/trunk MPlayer-mingw
+cd MPlayer-mingw
+wget http://natsuki.mplayerhq.hu/~reimar/mpl_mingw32.tar.bz2
+tar -xjf mpl_mingw32.tar.bz2
+sh linux-mingw.sh
+make
+
+
+Wine
+====
+
+First, you need to install the "Wine" package and get a MPlayer SVN
+checkout.
+
+You don't need any dependencies other than those you already have for
+your Linux build, because the Wine and Linux build will use them together.
+
+Configure with
+
+  ./configure --target=$(uname -m)-wine --cc=winegcc --windres=wrc
+
+and add any options you normally use for your Linux build (such as
+--enable-gui), then run make.
--- a/DOCS/tech/mingw-crosscompile.txt	Sat Oct 15 11:07:29 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-Due to a lack of Windows developers, it is a good idea to allow Linux
-developers to do at least some basic check of their code.
-This HOWTO explains how to set up MinGW cross-compilation under Debian.
-
-First, you need to install the "mingw32" package and get a MPlayer SVN
-checkout.
-
-Next, you need quite a lot of dependencies. Since this is for testing and
-not actually use, the easiest way is to use this package:
-http://natsuki.mplayerhq.hu/~reimar/mpl_mingw32.tar.bz2
-NOTE that this is likely to be quite out-dated and might include packages
-with security issues, so do not use it to build binaries for real use.
-
-After extracting this package into the MPlayer source-tree,
-you only need to run the included linux-mingw.sh to configure (it just runs
-./configure --host-cc=cc --target=i686-mingw32msvc --cc=i586-mingw32msvc-cc
---windres=i586-mingw32msvc-windres --ranlib=i586-mingw32msvc-ranlib
---extra-cflags="-I$PWD/osdep/mingw32"
---extra-ldflags="-L$PWD/osdep/mingw32"
---with-freetype-config="$PWD/osdep/mingw32/ftconf") and then run make.
-
-You should be able to run the generated binary with Wine, if you want to.
-
-The steps as command-lines:
-
-sudo apt-get install mingw32
-svn co svn://svn.mplayerhq.hu/mplayer/trunk MPlayer-mingw
-cd MPlayer-mingw
-wget http://natsuki.mplayerhq.hu/~reimar/mpl_mingw32.tar.bz2
-tar -xjf mpl_mingw32.tar.bz2
-sh linux-mingw.sh
-make
--- a/Makefile	Sat Oct 15 11:07:29 2011 +0000
+++ b/Makefile	Sat Oct 15 13:20:52 2011 +0000
@@ -779,7 +779,7 @@
 	$(CC) $(CC_DEPFLAGS) $(CFLAGS) -c -o $@ $<
 
 %-rc.o: %.rc
-	$(WINDRES) -I. $< $@
+	$(WINDRES) -I. $< -o $@
 
 $(FFMPEGLIBS): $(FFMPEGFILES) config.h
 	$(MAKE) -C ffmpeg $(@:ffmpeg/%=%)
--- a/configure	Sat Oct 15 11:07:29 2011 +0000
+++ b/configure	Sat Oct 15 13:20:52 2011 +0000
@@ -240,7 +240,8 @@
 os2()       { issystem "OS/2"; }
 qnx()       { issystem "QNX"; }
 sunos()     { issystem "SunOS"; }
-win32()     { cygwin || mingw32; }
+wine()      { issystem "Wine"; }
+win32()     { cygwin || mingw32 || wine; }
 
 # arch test boolean functions
 # x86/x86pc is used by QNX
@@ -1522,6 +1523,7 @@
     morphos) system_name=MorphOS ;;
     amigaos) system_name=AmigaOS ;;
     mingw32*) system_name=MINGW32 ;;
+    wine) system_name=Wine ;;
   esac
   # We need to convert underscores so that values like k6-2 and pentium-mmx can be passed
   host_arch=$(echo $_target | cut -d '-' -f 1)
@@ -1591,6 +1593,10 @@
   def_priority="#define CONFIG_PRIORITY 1"
 fi
 
+if wine ; then
+  extra_cflags="-fno-pic -UWIN32 -U_WIN32 -U__WIN32 -U__WIN32__ -DWINE_NOWINSOCK -Dstricmp=strcasecmp $extra_cflags"
+fi
+
 for tmpdir in "$TMPDIR" "$TEMPDIR" "/tmp" ; do
   test "$tmpdir" && break
 done
@@ -2720,7 +2726,7 @@
 if test -z "$YASMFLAGS" ; then
   if darwin ; then
     x86_64 && objformat="macho64" || objformat="macho"
-  elif win32 ; then
+  elif win32 && ! wine ; then
     objformat="win32"
   elif os2 ; then
     _yasm=nasm
@@ -5760,7 +5766,7 @@
   hpux && test "$_hpux_scsi_h" = no && _libdvdcss_internal=no
 fi
 if test "$_libdvdcss_internal" = yes ; then
-  if linux || netbsd || openbsd || bsdos ; then
+  if linux || netbsd || openbsd || bsdos || wine ; then
     def_dvd_linux='#define HAVE_LINUX_DVD_STRUCT 1'
     openbsd && def_dvd_openbsd='#define HAVE_OPENBSD_DVD_STRUCT 1'
   elif freebsd || dragonfly ; then
--- a/gui/win32/interface.c	Sat Oct 15 11:07:29 2011 +0000
+++ b/gui/win32/interface.c	Sat Oct 15 13:20:52 2011 +0000
@@ -23,7 +23,7 @@
 
 #include <windows.h>
 
-#if defined(__CYGWIN__)
+#if defined(__CYGWIN__) || defined(__WINE__)
 #define _beginthreadex CreateThread
 #else
 #include <process.h>
@@ -332,6 +332,44 @@
     mygui->startplay(mygui);
 }
 
+#ifdef __WINE__
+/**
+ * @brief Convert a Windows style file name into an Unix style one.
+ *
+ * @param filename pointer to the file name to be converted
+ *
+ * @return pointer to the converted file name
+ */
+static char *unix_name (char *filename)
+{
+    static char *unix_filename;
+    LPSTR (*CDECL wine_get_unix_file_name_ptr)(LPCWSTR);
+    int wchar_conv;
+
+    if (*filename && (filename[1] == ':'))
+    {
+        wine_get_unix_file_name_ptr = (void *) GetProcAddress(GetModuleHandleA("KERNEL32"), "wine_get_unix_file_name");
+        wchar_conv = MultiByteToWideChar(CP_UNIXCP, 0, filename, -1, NULL, 0);
+
+        if (wine_get_unix_file_name_ptr && wchar_conv)
+        {
+            WCHAR *ntpath;
+            char *unix_name;
+
+            ntpath = HeapAlloc(GetProcessHeap(), 0, sizeof(*ntpath) * (wchar_conv + 1));
+            MultiByteToWideChar(CP_UNIXCP, 0, filename, -1, ntpath, wchar_conv);
+            unix_name = wine_get_unix_file_name_ptr(ntpath);
+            setdup(&unix_filename, unix_name);
+            filename = unix_filename;
+            HeapFree(GetProcessHeap(), 0, unix_name);
+            HeapFree(GetProcessHeap(), 0, ntpath);
+        }
+    }
+
+    return filename;
+}
+#endif
+
 void uiSetFileName(char *dir, char *name, int type)
 {
     if(!name) return;
@@ -341,6 +379,9 @@
         setddup(&guiInfo.Filename, dir, name);
 
     filename = guiInfo.Filename;
+#ifdef __WINE__
+    filename = unix_name(filename);
+#endif
     guiInfo.StreamType = type;
 
     nfree(guiInfo.AudioFilename);
--- a/loader/com.h	Sat Oct 15 11:07:29 2011 +0000
+++ b/loader/com.h	Sat Oct 15 13:20:52 2011 +0000
@@ -29,6 +29,9 @@
 } GUID;
 #endif
 
+// hack: use copies of the IIDs
+#define IID_IUnknown MP_IID_IUnknown
+#define IID_IClassFactory MP_IID_IClassFactory
 extern const GUID IID_IUnknown;
 extern const GUID IID_IClassFactory;
 
--- a/mplayer.c	Sat Oct 15 11:07:29 2011 +0000
+++ b/mplayer.c	Sat Oct 15 13:20:52 2011 +0000
@@ -3002,7 +3002,9 @@
 #ifdef CONFIG_SIGHANDLER
     // fatal errors:
     signal(SIGBUS, exit_sighandler); // bus error
+#ifndef __WINE__
     signal(SIGSEGV, exit_sighandler); // segfault
+#endif
     signal(SIGILL, exit_sighandler); // illegal instruction
     signal(SIGFPE, exit_sighandler); // floating point exc.
     signal(SIGABRT, exit_sighandler); // abort()
--- a/osdep/priority.c	Sat Oct 15 11:07:29 2011 +0000
+++ b/osdep/priority.c	Sat Oct 15 13:20:52 2011 +0000
@@ -22,7 +22,7 @@
 
 #include "osdep.h"
 
-#if defined(__MINGW32__) || defined(__CYGWIN__)
+#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__WINE__)
 #include <windows.h>
 #endif
 
--- a/stream/tvi_dshow.c	Sat Oct 15 11:07:29 2011 +0000
+++ b/stream/tvi_dshow.c	Sat Oct 15 13:20:52 2011 +0000
@@ -87,6 +87,15 @@
 #include "frequencies.h"
 
 
+#define MP_DEFINE_LOCAL_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        static const GUID name = {l, w1, w2, {b1, b2, b3, b4, b5, b6, b7, b8}}
+
+#ifdef __WINE__
+// take care of unions which are normally declared
+// named by Wine but nameless (anonymous) by Windows
+#define _FORCENAMELESSUNION
+#endif
+
 #include "tvi_dshow.h"
 
 #ifndef STDCALL
@@ -379,122 +388,122 @@
 #define DECLSPEC_SELECTANY
 /// CLSID definitions (used for CoCreateInstance call)
 #define CLSID_SampleGrabber MP_CLSID_SampleGrabber
-static DEFINE_GUID(CLSID_SampleGrabber, 0xC1F400A0, 0x3F08, 0x11d3, 0x9F, 0x0B,
+MP_DEFINE_LOCAL_GUID(CLSID_SampleGrabber, 0xC1F400A0, 0x3F08, 0x11d3, 0x9F, 0x0B,
 	    0x00, 0x60, 0x08, 0x03, 0x9E, 0x37);
 #define CLSID_NullRenderer MP_CLSID_NullRenderer
-static DEFINE_GUID(CLSID_NullRenderer, 0xC1F400A4, 0x3F08, 0x11d3, 0x9F, 0x0B,
+MP_DEFINE_LOCAL_GUID(CLSID_NullRenderer, 0xC1F400A4, 0x3F08, 0x11d3, 0x9F, 0x0B,
 	    0x00, 0x60, 0x08, 0x03, 0x9E, 0x37);
 #define CLSID_SystemDeviceEnum MP_CLSID_SystemDeviceEnum
-static DEFINE_GUID(CLSID_SystemDeviceEnum, 0x62BE5D10, 0x60EB, 0x11d0, 0xBD, 0x3B,
+MP_DEFINE_LOCAL_GUID(CLSID_SystemDeviceEnum, 0x62BE5D10, 0x60EB, 0x11d0, 0xBD, 0x3B,
 	    0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86);
 #define CLSID_CaptureGraphBuilder2 MP_CLSID_CaptureGraphBuilder2
-static DEFINE_GUID(CLSID_CaptureGraphBuilder2, 0xBF87B6E1, 0x8C27, 0x11d0, 0xB3,
+MP_DEFINE_LOCAL_GUID(CLSID_CaptureGraphBuilder2, 0xBF87B6E1, 0x8C27, 0x11d0, 0xB3,
 	    0xF0, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5);
 #define CLSID_VideoInputDeviceCategory MP_CLSID_VideoInputDeviceCategory
-static DEFINE_GUID(CLSID_VideoInputDeviceCategory, 0x860BB310, 0x5D01, 0x11d0,
+MP_DEFINE_LOCAL_GUID(CLSID_VideoInputDeviceCategory, 0x860BB310, 0x5D01, 0x11d0,
 	    0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86);
 #define CLSID_AudioInputDeviceCategory MP_CLSID_AudioInputDeviceCategory
-static DEFINE_GUID(CLSID_AudioInputDeviceCategory, 0x33d9a762, 0x90c8, 0x11d0,
+MP_DEFINE_LOCAL_GUID(CLSID_AudioInputDeviceCategory, 0x33d9a762, 0x90c8, 0x11d0,
 	    0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86);
 #define CLSID_FilterGraph MP_CLSID_FilterGraph
-static DEFINE_GUID(CLSID_FilterGraph, 0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53,
+MP_DEFINE_LOCAL_GUID(CLSID_FilterGraph, 0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53,
 	    0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
 #define CLSID_SystemClock MP_CLSID_SystemClock
-static DEFINE_GUID(CLSID_SystemClock, 0xe436ebb1, 0x524f, 0x11ce, 0x9f, 0x53,
+MP_DEFINE_LOCAL_GUID(CLSID_SystemClock, 0xe436ebb1, 0x524f, 0x11ce, 0x9f, 0x53,
 	    0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
 #ifdef NOT_USED
 #define CLSID_CaptureGraphBuilder MP_CLSID_CaptureGraphBuilder
-static DEFINE_GUID(CLSID_CaptureGraphBuilder, 0xBF87B6E0, 0x8C27, 0x11d0, 0xB3,
+MP_DEFINE_LOCAL_GUID(CLSID_CaptureGraphBuilder, 0xBF87B6E0, 0x8C27, 0x11d0, 0xB3,
 	    0xF0, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5);
 #define CLSID_VideoPortManager MP_CLSID_VideoPortManager
-static DEFINE_GUID(CLSID_VideoPortManager, 0x6f26a6cd, 0x967b, 0x47fd, 0x87, 0x4a,
+MP_DEFINE_LOCAL_GUID(CLSID_VideoPortManager, 0x6f26a6cd, 0x967b, 0x47fd, 0x87, 0x4a,
 	    0x7a, 0xed, 0x2c, 0x9d, 0x25, 0xa2);
 #define IID_IPin MP_IID_IPin
-static DEFINE_GUID(IID_IPin, 0x56a86891, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20,
+MP_DEFINE_LOCAL_GUID(IID_IPin, 0x56a86891, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20,
 	    0xaf, 0x0b, 0xa7, 0x70);
 #define IID_ICaptureGraphBuilder MP_IID_ICaptureGraphBuilder
-static DEFINE_GUID(IID_ICaptureGraphBuilder, 0xbf87b6e0, 0x8c27, 0x11d0, 0xb3,
+MP_DEFINE_LOCAL_GUID(IID_ICaptureGraphBuilder, 0xbf87b6e0, 0x8c27, 0x11d0, 0xb3,
 	    0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5);
 #define IID_IFilterGraph MP_IID_IFilterGraph
-static DEFINE_GUID(IID_IFilterGraph, 0x56a8689f, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00,
+MP_DEFINE_LOCAL_GUID(IID_IFilterGraph, 0x56a8689f, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00,
 	    0x20, 0xaf, 0x0b, 0xa7, 0x70);
 #define PIN_CATEGORY_PREVIEW MP_PIN_CATEGORY_PREVIEW
-static DEFINE_GUID(PIN_CATEGORY_PREVIEW, 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f,
+MP_DEFINE_LOCAL_GUID(PIN_CATEGORY_PREVIEW, 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f,
 	    0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);
 #endif
 
 /// IID definitions (used for QueryInterface call)
 #define IID_IReferenceClock MP_IID_IReferenceClock
-static DEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a,
+MP_DEFINE_LOCAL_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a,
 	    0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
 #define IID_IAMBufferNegotiation MP_IID_IAMBufferNegotiation
-static DEFINE_GUID(IID_IAMBufferNegotiation, 0x56ED71A0, 0xAF5F, 0x11D0, 0xB3, 0xF0,
+MP_DEFINE_LOCAL_GUID(IID_IAMBufferNegotiation, 0x56ED71A0, 0xAF5F, 0x11D0, 0xB3, 0xF0,
             0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5);
 #define IID_IKsPropertySet MP_IID_IKsPropertySet
-static DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa,
+MP_DEFINE_LOCAL_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa,
 	    0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93);
 #define IID_ISampleGrabber MP_IID_ISampleGrabber
-static DEFINE_GUID(IID_ISampleGrabber, 0x6B652FFF, 0x11FE, 0x4fce, 0x92, 0xAD,
+MP_DEFINE_LOCAL_GUID(IID_ISampleGrabber, 0x6B652FFF, 0x11FE, 0x4fce, 0x92, 0xAD,
 	    0x02, 0x66, 0xB5, 0xD7, 0xC7, 0x8F);
 #define IID_ISampleGrabberCB MP_IID_ISampleGrabberCB
-static DEFINE_GUID(IID_ISampleGrabberCB, 0x0579154A, 0x2B53, 0x4994, 0xB0, 0xD0,
+MP_DEFINE_LOCAL_GUID(IID_ISampleGrabberCB, 0x0579154A, 0x2B53, 0x4994, 0xB0, 0xD0,
 	    0xE7, 0x73, 0x14, 0x8E, 0xFF, 0x85);
 #define IID_ICaptureGraphBuilder2 MP_IID_ICaptureGraphBuilder2
-static DEFINE_GUID(IID_ICaptureGraphBuilder2, 0x93e5a4e0, 0x2d50, 0x11d2, 0xab,
+MP_DEFINE_LOCAL_GUID(IID_ICaptureGraphBuilder2, 0x93e5a4e0, 0x2d50, 0x11d2, 0xab,
 	    0xfa, 0x00, 0xa0, 0xc9, 0xc6, 0xe3, 0x8d);
 #define IID_ICreateDevEnum MP_IID_ICreateDevEnum
-static DEFINE_GUID(IID_ICreateDevEnum, 0x29840822, 0x5b84, 0x11d0, 0xbd, 0x3b,
+MP_DEFINE_LOCAL_GUID(IID_ICreateDevEnum, 0x29840822, 0x5b84, 0x11d0, 0xbd, 0x3b,
 	    0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86);
 #define IID_IGraphBuilder MP_IID_IGraphBuilder
-static DEFINE_GUID(IID_IGraphBuilder, 0x56a868a9, 0x0ad4, 0x11ce, 0xb0, 0x3a,
+MP_DEFINE_LOCAL_GUID(IID_IGraphBuilder, 0x56a868a9, 0x0ad4, 0x11ce, 0xb0, 0x3a,
 	    0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
 #define IID_IAMVideoProcAmp MP_IID_IAMVideoProcAmp
-static DEFINE_GUID(IID_IAMVideoProcAmp, 0xC6E13360, 0x30AC, 0x11d0, 0xA1, 0x8C,
+MP_DEFINE_LOCAL_GUID(IID_IAMVideoProcAmp, 0xC6E13360, 0x30AC, 0x11d0, 0xA1, 0x8C,
 	    0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56);
 #define IID_IVideoWindow MP_IID_IVideoWindow
-static DEFINE_GUID(IID_IVideoWindow, 0x56a868b4, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00,
+MP_DEFINE_LOCAL_GUID(IID_IVideoWindow, 0x56a868b4, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00,
 	    0x20, 0xaf, 0x0b, 0xa7, 0x70);
 #define IID_IMediaControl MP_IID_IMediaControl
-static DEFINE_GUID(IID_IMediaControl, 0x56a868b1, 0x0ad4, 0x11ce, 0xb0, 0x3a,
+MP_DEFINE_LOCAL_GUID(IID_IMediaControl, 0x56a868b1, 0x0ad4, 0x11ce, 0xb0, 0x3a,
 	    0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
 #define IID_IAMTVTuner MP_IID_IAMTVTuner
-static DEFINE_GUID(IID_IAMTVTuner, 0x211A8766, 0x03AC, 0x11d1, 0x8D, 0x13, 0x00,
+MP_DEFINE_LOCAL_GUID(IID_IAMTVTuner, 0x211A8766, 0x03AC, 0x11d1, 0x8D, 0x13, 0x00,
 	    0xAA, 0x00, 0xBD, 0x83, 0x39);
 #define IID_IAMCrossbar MP_IID_IAMCrossbar
-static DEFINE_GUID(IID_IAMCrossbar, 0xc6e13380, 0x30ac, 0x11d0, 0xa1, 0x8c, 0x00,
+MP_DEFINE_LOCAL_GUID(IID_IAMCrossbar, 0xc6e13380, 0x30ac, 0x11d0, 0xa1, 0x8c, 0x00,
 	    0xa0, 0xc9, 0x11, 0x89, 0x56);
 #define IID_IAMStreamConfig MP_IID_IAMStreamConfig
-static DEFINE_GUID(IID_IAMStreamConfig, 0xc6e13340, 0x30ac, 0x11d0, 0xa1, 0x8c,
+MP_DEFINE_LOCAL_GUID(IID_IAMStreamConfig, 0xc6e13340, 0x30ac, 0x11d0, 0xa1, 0x8c,
 	    0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56);
 #define IID_IAMAudioInputMixer MP_IID_IAMAudioInputMixer
-static DEFINE_GUID(IID_IAMAudioInputMixer, 0x54C39221, 0x8380, 0x11d0, 0xB3, 0xF0,
+MP_DEFINE_LOCAL_GUID(IID_IAMAudioInputMixer, 0x54C39221, 0x8380, 0x11d0, 0xB3, 0xF0,
 	    0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5);
 #define IID_IAMTVAudio MP_IID_IAMTVAudio
-static DEFINE_GUID(IID_IAMTVAudio, 0x83EC1C30, 0x23D1, 0x11d1, 0x99, 0xE6, 0x00,
+MP_DEFINE_LOCAL_GUID(IID_IAMTVAudio, 0x83EC1C30, 0x23D1, 0x11d1, 0x99, 0xE6, 0x00,
 	    0xA0, 0xC9, 0x56, 0x02, 0x66);
 #define IID_IAMAnalogVideoDecoder MP_IID_IAMAnalogVideoDecoder
-static DEFINE_GUID(IID_IAMAnalogVideoDecoder, 0xC6E13350, 0x30AC, 0x11d0, 0xA1,
+MP_DEFINE_LOCAL_GUID(IID_IAMAnalogVideoDecoder, 0xC6E13350, 0x30AC, 0x11d0, 0xA1,
 	    0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56);
 #define IID_IPropertyBag MP_IID_IPropertyBag
-static DEFINE_GUID(IID_IPropertyBag, 0x55272a00, 0x42cb, 0x11ce, 0x81, 0x35, 0x00,
+MP_DEFINE_LOCAL_GUID(IID_IPropertyBag, 0x55272a00, 0x42cb, 0x11ce, 0x81, 0x35, 0x00,
 	    0xaa, 0x00, 0x4b, 0xb8, 0x51);
 #define PIN_CATEGORY_CAPTURE MP_PIN_CATEGORY_CAPTURE
-static DEFINE_GUID(PIN_CATEGORY_CAPTURE, 0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f,
+MP_DEFINE_LOCAL_GUID(PIN_CATEGORY_CAPTURE, 0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f,
 	    0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);
 #define PIN_CATEGORY_VIDEOPORT MP_PIN_CATEGORY_VIDEOPORT
-static DEFINE_GUID(PIN_CATEGORY_VIDEOPORT, 0xfb6c4285, 0x0353, 0x11d1, 0x90, 0x5f,
+MP_DEFINE_LOCAL_GUID(PIN_CATEGORY_VIDEOPORT, 0xfb6c4285, 0x0353, 0x11d1, 0x90, 0x5f,
 	    0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);
 #define PIN_CATEGORY_PREVIEW MP_PIN_CATEGORY_PREVIEW
-static DEFINE_GUID(PIN_CATEGORY_PREVIEW, 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f,
+MP_DEFINE_LOCAL_GUID(PIN_CATEGORY_PREVIEW, 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f,
             0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);
 #define PIN_CATEGORY_VBI MP_PIN_CATEGORY_VBI
-static DEFINE_GUID(PIN_CATEGORY_VBI, 0xfb6c4284, 0x0353, 0x11d1, 0x90, 0x5f,
+MP_DEFINE_LOCAL_GUID(PIN_CATEGORY_VBI, 0xfb6c4284, 0x0353, 0x11d1, 0x90, 0x5f,
             0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);
 #define PROPSETID_TUNER MP_PROPSETID_TUNER
-static DEFINE_GUID(PROPSETID_TUNER, 0x6a2e0605, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00,
+MP_DEFINE_LOCAL_GUID(PROPSETID_TUNER, 0x6a2e0605, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00,
 	    0xa0, 0xc9, 0x11, 0x89, 0x56);
 #define MEDIATYPE_VBI MP_MEDIATYPE_VBI
-static DEFINE_GUID(MEDIATYPE_VBI,   0xf72a76e1, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00,
+MP_DEFINE_LOCAL_GUID(MEDIATYPE_VBI,   0xf72a76e1, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00,
             0x00, 0xc0, 0xcc, 0x16, 0xba);
 
 #define INSTANCEDATA_OF_PROPERTY_PTR(x) (((KSPROPERTY*)(x)) + 1)