# HG changeset patch # User diego # Date 1212921810 0 # Node ID 0b21ffa03b9cd359f0f94507d9ea9e9c3d0ac5fa # Parent 29bfddf7af0ae0dbcf86d280a5b112fa967c7a39 Rename loader/driver.[ch] to loader/drv.[ch], otherwise loader/driver.h can conflict with the header by the same name in loader/wine/driver.h. diff -r 29bfddf7af0a -r 0b21ffa03b9c Makefile --- a/Makefile Sun Jun 08 10:41:09 2008 +0000 +++ b/Makefile Sun Jun 08 10:43:30 2008 +0000 @@ -464,7 +464,7 @@ libmpcodecs/vd_vfwex.c \ libmpdemux/demux_avs.c \ loader/afl.c \ - loader/driver.c \ + loader/drv.c \ loader/vfl.c \ loader/dshow/DS_AudioDecoder.c \ loader/dshow/DS_Filter.c \ diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/afl.c --- a/loader/afl.c Sun Jun 08 10:41:09 2008 +0000 +++ b/loader/afl.c Sun Jun 08 10:43:30 2008 +0000 @@ -37,7 +37,7 @@ #ifndef __MINGW32__ #include "ext.h" #endif -#include "driver.h" +#include "drv.h" #include #include diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/dmo/dmo.c --- a/loader/dmo/dmo.c Sun Jun 08 10:41:09 2008 +0000 +++ b/loader/dmo/dmo.c Sun Jun 08 10:43:30 2008 +0000 @@ -5,7 +5,7 @@ #include "config.h" #include "DMO_Filter.h" -#include "driver.h" +#include "drv.h" #include "com.h" #include #include diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/driver.c --- a/loader/driver.c Sun Jun 08 10:41:09 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/* - * Modified for use with MPlayer, detailed changelog at - * http://svn.mplayerhq.hu/mplayer/trunk/ - */ - -#include "config.h" -#include "debug.h" - -#include -#ifdef HAVE_MALLOC_H -#include -#endif -#include -#ifdef __FreeBSD__ -#include -#endif - -#include "win32.h" -#include "wine/driver.h" -#include "wine/pe_image.h" -#include "wine/winreg.h" -#include "wine/vfw.h" -#include "registry.h" -#ifdef WIN32_LOADER -#include "ldt_keeper.h" -#endif -#include "driver.h" -#ifndef __MINGW32__ -#include "ext.h" -#endif - -#ifndef WIN32_LOADER -char* def_path=WIN32_PATH; -#else -extern char* def_path; -#endif - -#if 1 - -/* - * STORE_ALL/REST_ALL seems like an attempt to workaround problems due to - * WINAPI/no-WINAPI bustage. - * - * There should be no need for the STORE_ALL/REST_ALL hack once all - * function definitions agree with their prototypes (WINAPI-wise) and - * we make sure, that we do not call these functions without a proper - * prototype in scope. - */ - -#define STORE_ALL -#define REST_ALL -#else -// this asm code is no longer needed -#define STORE_ALL \ - __asm__ __volatile__ ( \ - "push %%ebx\n\t" \ - "push %%ecx\n\t" \ - "push %%edx\n\t" \ - "push %%esi\n\t" \ - "push %%edi\n\t"::) - -#define REST_ALL \ - __asm__ __volatile__ ( \ - "pop %%edi\n\t" \ - "pop %%esi\n\t" \ - "pop %%edx\n\t" \ - "pop %%ecx\n\t" \ - "pop %%ebx\n\t"::) -#endif - -static int needs_free=0; -void SetCodecPath(const char* path) -{ - if(needs_free)free(def_path); - if(path==0) - { - def_path=WIN32_PATH; - needs_free=0; - return; - } - def_path = (char*) malloc(strlen(path)+1); - strcpy(def_path, path); - needs_free=1; -} - -static DWORD dwDrvID = 0; - -LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message, - LPARAM lParam1, LPARAM lParam2) -{ - DRVR* module=(DRVR*)hDriver; - int result; -#ifndef __svr4__ - char qw[300]; -#endif -#ifdef DETAILED_OUT - printf("SendDriverMessage: driver %X, message %X, arg1 %X, arg2 %X\n", hDriver, message, lParam1, lParam2); -#endif - if (!module || !module->hDriverModule || !module->DriverProc) return -1; -#ifndef __svr4__ - __asm__ __volatile__ ("fsave (%0)\n\t": :"r"(&qw)); -#endif - -#ifdef WIN32_LOADER - Setup_FS_Segment(); -#endif - - STORE_ALL; - result=module->DriverProc(module->dwDriverID, hDriver, message, lParam1, lParam2); - REST_ALL; - -#ifndef __svr4__ - __asm__ __volatile__ ("frstor (%0)\n\t": :"r"(&qw)); -#endif - -#ifdef DETAILED_OUT - printf("\t\tResult: %X\n", result); -#endif - return result; -} - -void DrvClose(HDRVR hDriver) -{ - if (hDriver) - { - DRVR* d = (DRVR*)hDriver; - if (d->hDriverModule) - { -#ifdef WIN32_LOADER - Setup_FS_Segment(); -#endif - if (d->DriverProc) - { - SendDriverMessage(hDriver, DRV_CLOSE, 0, 0); - d->dwDriverID = 0; - SendDriverMessage(hDriver, DRV_FREE, 0, 0); - } - FreeLibrary(d->hDriverModule); - } - free(d); - } -#ifdef WIN32_LOADER - CodecRelease(); -#endif -} - -//DrvOpen(LPCSTR lpszDriverName, LPCSTR lpszSectionName, LPARAM lParam2) -HDRVR DrvOpen(LPARAM lParam2) -{ - NPDRVR hDriver; - char unknown[0x124]; - const char* filename = (const char*) ((ICOPEN*) lParam2)->pV1Reserved; - -#ifdef WIN32_LOADER - Setup_LDT_Keeper(); -#endif - printf("Loading codec DLL: '%s'\n",filename); - - hDriver = (NPDRVR) malloc(sizeof(DRVR)); - if (!hDriver) - return (HDRVR) 0; - memset((void*)hDriver, 0, sizeof(DRVR)); - -#ifdef WIN32_LOADER - CodecAlloc(); - Setup_FS_Segment(); -#endif - - hDriver->hDriverModule = LoadLibraryA(filename); - if (!hDriver->hDriverModule) - { - printf("Can't open library %s\n", filename); - DrvClose((HDRVR)hDriver); - return (HDRVR) 0; - } - - hDriver->DriverProc = (DRIVERPROC) GetProcAddress(hDriver->hDriverModule, - "DriverProc"); - if (!hDriver->DriverProc) - { - printf("Library %s is not a valid VfW/ACM codec\n", filename); - DrvClose((HDRVR)hDriver); - return (HDRVR) 0; - } - - TRACE("DriverProc == %X\n", hDriver->DriverProc); - SendDriverMessage((HDRVR)hDriver, DRV_LOAD, 0, 0); - TRACE("DRV_LOAD Ok!\n"); - SendDriverMessage((HDRVR)hDriver, DRV_ENABLE, 0, 0); - TRACE("DRV_ENABLE Ok!\n"); - hDriver->dwDriverID = ++dwDrvID; // generate new id - - // open driver and remmeber proper DriverID - hDriver->dwDriverID = SendDriverMessage((HDRVR)hDriver, DRV_OPEN, (LPARAM) unknown, lParam2); - TRACE("DRV_OPEN Ok!(%X)\n", hDriver->dwDriverID); - - printf("Loaded DLL driver %s at %x\n", filename, hDriver->hDriverModule); - return (HDRVR)hDriver; -} diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/driver.h --- a/loader/driver.h Sun Jun 08 10:41:09 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* - * Modified for use with MPlayer, detailed changelog at - * http://svn.mplayerhq.hu/mplayer/trunk/ - */ - -#ifndef MPLAYER_DRIVER_H -#define MPLAYER_DRIVER_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "wine/windef.h" -#include "wine/driver.h" - -void SetCodecPath(const char* path); -void CodecAlloc(void); -void CodecRelease(void); - -HDRVR DrvOpen(LPARAM lParam2); -void DrvClose(HDRVR hdrvr); - -#ifdef __cplusplus -} -#endif - -#endif /* MPLAYER_DRIVER_H */ diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/drv.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loader/drv.c Sun Jun 08 10:43:30 2008 +0000 @@ -0,0 +1,199 @@ +/* + * Modified for use with MPlayer, detailed changelog at + * http://svn.mplayerhq.hu/mplayer/trunk/ + */ + +#include "config.h" +#include "debug.h" + +#include +#ifdef HAVE_MALLOC_H +#include +#endif +#include +#ifdef __FreeBSD__ +#include +#endif + +#include "win32.h" +#include "wine/driver.h" +#include "wine/pe_image.h" +#include "wine/winreg.h" +#include "wine/vfw.h" +#include "registry.h" +#ifdef WIN32_LOADER +#include "ldt_keeper.h" +#endif +#include "drv.h" +#ifndef __MINGW32__ +#include "ext.h" +#endif + +#ifndef WIN32_LOADER +char* def_path=WIN32_PATH; +#else +extern char* def_path; +#endif + +#if 1 + +/* + * STORE_ALL/REST_ALL seems like an attempt to workaround problems due to + * WINAPI/no-WINAPI bustage. + * + * There should be no need for the STORE_ALL/REST_ALL hack once all + * function definitions agree with their prototypes (WINAPI-wise) and + * we make sure, that we do not call these functions without a proper + * prototype in scope. + */ + +#define STORE_ALL +#define REST_ALL +#else +// this asm code is no longer needed +#define STORE_ALL \ + __asm__ __volatile__ ( \ + "push %%ebx\n\t" \ + "push %%ecx\n\t" \ + "push %%edx\n\t" \ + "push %%esi\n\t" \ + "push %%edi\n\t"::) + +#define REST_ALL \ + __asm__ __volatile__ ( \ + "pop %%edi\n\t" \ + "pop %%esi\n\t" \ + "pop %%edx\n\t" \ + "pop %%ecx\n\t" \ + "pop %%ebx\n\t"::) +#endif + +static int needs_free=0; +void SetCodecPath(const char* path) +{ + if(needs_free)free(def_path); + if(path==0) + { + def_path=WIN32_PATH; + needs_free=0; + return; + } + def_path = (char*) malloc(strlen(path)+1); + strcpy(def_path, path); + needs_free=1; +} + +static DWORD dwDrvID = 0; + +LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message, + LPARAM lParam1, LPARAM lParam2) +{ + DRVR* module=(DRVR*)hDriver; + int result; +#ifndef __svr4__ + char qw[300]; +#endif +#ifdef DETAILED_OUT + printf("SendDriverMessage: driver %X, message %X, arg1 %X, arg2 %X\n", hDriver, message, lParam1, lParam2); +#endif + if (!module || !module->hDriverModule || !module->DriverProc) return -1; +#ifndef __svr4__ + __asm__ __volatile__ ("fsave (%0)\n\t": :"r"(&qw)); +#endif + +#ifdef WIN32_LOADER + Setup_FS_Segment(); +#endif + + STORE_ALL; + result=module->DriverProc(module->dwDriverID, hDriver, message, lParam1, lParam2); + REST_ALL; + +#ifndef __svr4__ + __asm__ __volatile__ ("frstor (%0)\n\t": :"r"(&qw)); +#endif + +#ifdef DETAILED_OUT + printf("\t\tResult: %X\n", result); +#endif + return result; +} + +void DrvClose(HDRVR hDriver) +{ + if (hDriver) + { + DRVR* d = (DRVR*)hDriver; + if (d->hDriverModule) + { +#ifdef WIN32_LOADER + Setup_FS_Segment(); +#endif + if (d->DriverProc) + { + SendDriverMessage(hDriver, DRV_CLOSE, 0, 0); + d->dwDriverID = 0; + SendDriverMessage(hDriver, DRV_FREE, 0, 0); + } + FreeLibrary(d->hDriverModule); + } + free(d); + } +#ifdef WIN32_LOADER + CodecRelease(); +#endif +} + +//DrvOpen(LPCSTR lpszDriverName, LPCSTR lpszSectionName, LPARAM lParam2) +HDRVR DrvOpen(LPARAM lParam2) +{ + NPDRVR hDriver; + char unknown[0x124]; + const char* filename = (const char*) ((ICOPEN*) lParam2)->pV1Reserved; + +#ifdef WIN32_LOADER + Setup_LDT_Keeper(); +#endif + printf("Loading codec DLL: '%s'\n",filename); + + hDriver = (NPDRVR) malloc(sizeof(DRVR)); + if (!hDriver) + return (HDRVR) 0; + memset((void*)hDriver, 0, sizeof(DRVR)); + +#ifdef WIN32_LOADER + CodecAlloc(); + Setup_FS_Segment(); +#endif + + hDriver->hDriverModule = LoadLibraryA(filename); + if (!hDriver->hDriverModule) + { + printf("Can't open library %s\n", filename); + DrvClose((HDRVR)hDriver); + return (HDRVR) 0; + } + + hDriver->DriverProc = (DRIVERPROC) GetProcAddress(hDriver->hDriverModule, + "DriverProc"); + if (!hDriver->DriverProc) + { + printf("Library %s is not a valid VfW/ACM codec\n", filename); + DrvClose((HDRVR)hDriver); + return (HDRVR) 0; + } + + TRACE("DriverProc == %X\n", hDriver->DriverProc); + SendDriverMessage((HDRVR)hDriver, DRV_LOAD, 0, 0); + TRACE("DRV_LOAD Ok!\n"); + SendDriverMessage((HDRVR)hDriver, DRV_ENABLE, 0, 0); + TRACE("DRV_ENABLE Ok!\n"); + hDriver->dwDriverID = ++dwDrvID; // generate new id + + // open driver and remmeber proper DriverID + hDriver->dwDriverID = SendDriverMessage((HDRVR)hDriver, DRV_OPEN, (LPARAM) unknown, lParam2); + TRACE("DRV_OPEN Ok!(%X)\n", hDriver->dwDriverID); + + printf("Loaded DLL driver %s at %x\n", filename, hDriver->hDriverModule); + return (HDRVR)hDriver; +} diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/drv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loader/drv.h Sun Jun 08 10:43:30 2008 +0000 @@ -0,0 +1,27 @@ +/* + * Modified for use with MPlayer, detailed changelog at + * http://svn.mplayerhq.hu/mplayer/trunk/ + */ + +#ifndef MPLAYER_DRV_H +#define MPLAYER_DRV_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "wine/windef.h" +#include "wine/driver.h" + +void SetCodecPath(const char* path); +void CodecAlloc(void); +void CodecRelease(void); + +HDRVR DrvOpen(LPARAM lParam2); +void DrvClose(HDRVR hdrvr); + +#ifdef __cplusplus +} +#endif + +#endif /* MPLAYER_DRV_H */ diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/dshow/DS_Filter.c --- a/loader/dshow/DS_Filter.c Sun Jun 08 10:41:09 2008 +0000 +++ b/loader/dshow/DS_Filter.c Sun Jun 08 10:43:30 2008 +0000 @@ -5,7 +5,7 @@ #include "config.h" #include "DS_Filter.h" -#include "driver.h" +#include "drv.h" #include "com.h" #include #include diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/module.c --- a/loader/module.c Sun Jun 08 10:41:09 2008 +0000 +++ b/loader/module.c Sun Jun 08 10:43:30 2008 +0000 @@ -45,7 +45,7 @@ #include "wine/elfdll.h" #endif #include "win32.h" -#include "driver.h" +#include "drv.h" #ifdef EMU_QTX_API #include "wrapper.h" diff -r 29bfddf7af0a -r 0b21ffa03b9c loader/vfl.c --- a/loader/vfl.c Sun Jun 08 10:41:09 2008 +0000 +++ b/loader/vfl.c Sun Jun 08 10:43:30 2008 +0000 @@ -21,7 +21,7 @@ #include "wine/winestring.h" #include "wine/driver.h" #include "wine/avifmt.h" -#include "driver.h" +#include "drv.h" #define OpenDriverA DrvOpen #define CloseDriver DrvClose