changeset 12042:ebea9d9163b0

Support for vp5 and vp6 dll decoders Patch by Reimar Doeffinger
author rtognimp
date Thu, 18 Mar 2004 22:00:31 +0000
parents c5aa951feff8
children 8d45dcfc016f
files etc/codecs.conf loader/module.c
diffstat 2 files changed, 51 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/etc/codecs.conf	Thu Mar 18 08:37:21 2004 +0000
+++ b/etc/codecs.conf	Thu Mar 18 22:00:31 2004 +0000
@@ -1147,6 +1147,24 @@
   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
--- a/loader/module.c	Thu Mar 18 08:37:21 2004 +0000
+++ b/loader/module.c	Thu Mar 18 22:00:31 2004 +0000
@@ -422,6 +422,39 @@
 	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;