summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/codecs.conf18
-rw-r--r--loader/module.c33
2 files changed, 51 insertions, 0 deletions
diff --git a/etc/codecs.conf b/etc/codecs.conf
index d94c88b2ca..9600f38a83 100644
--- a/etc/codecs.conf
+++ b/etc/codecs.conf
@@ -1147,6 +1147,24 @@ videocodec vp4
out YUY2
out BGR32,BGR24
+videocodec vp5
+ info "On2 VP5 Personal Codec"
+ status working
+ fourcc VP50
+ driver vfwex
+ dll "vp5vfw.dll"
+ out YUY2
+ out BGR32,BGR24
+
+videocodec vp6
+ info "On2 VP6 Personal Codec"
+ status working
+ fourcc VP60,VP61,VP62
+ driver vfwex
+ dll "vp6vfw.dll"
+ out YUY2
+ out BGR32,BGR24
+
videocodec mwv1
info "Motion Wavelets"
status working
diff --git a/loader/module.c b/loader/module.c
index 29d31ad1bd..da6e1edbb9 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -422,6 +422,39 @@ HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags)
if (!wm)
printf("Win32 LoadLibrary failed to load: %s\n", checked);
+ // remove a few divs in the VP codecs that make trouble
+ if (strstr(libname,"vp5vfw.dll") && wm)
+ {
+ int i;
+ if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10003930) {
+ for (i=0;i<3;i++) ((char*)0x10004e86)[i]=0x90;
+ for (i=0;i<3;i++) ((char*)0x10005a23)[i]=0x90;
+ for (i=0;i<3;i++) ((char*)0x10005bff)[i]=0x90;
+ } else {
+ fprintf(stderr, "Unsupported VP5 version\n");
+ return 0;
+ }
+ }
+
+ if (strstr(libname,"vp6vfw.dll") && wm)
+ {
+ int i;
+ if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10003ef0) {
+ // looks like VP 6.1.0.2
+ for (i=0;i<6;i++) ((char*)0x10007268)[i]=0x90;
+ for (i=0;i<6;i++) ((char*)0x10007e83)[i]=0x90;
+ for (i=0;i<6;i++) ((char*)0x1000806a)[i]=0x90;
+ } else if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10004120) {
+ // looks like VP 6.2.0.10
+ for (i=0;i<6;i++) ((char*)0x10007688)[i]=0x90;
+ for (i=0;i<6;i++) ((char*)0x100082c3)[i]=0x90;
+ for (i=0;i<6;i++) ((char*)0x100084aa)[i]=0x90;
+ } else {
+ fprintf(stderr, "Unsupported VP6 version\n");
+ return 0;
+ }
+ }
+
if (strstr(libname,"QuickTime.qts") && wm)
{
void** ptr;