Implemented VideoCapDriverDescAndVer.

This commit is contained in:
Marcus Meissner 2001-01-28 23:45:43 +00:00 committed by Alexandre Julliard
parent 982e0ce07f
commit 31052f9946
3 changed files with 71 additions and 4 deletions

View File

@ -429,7 +429,7 @@ mpr/libmpr.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
msacm/libmsacm32.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
msnet32/libmsnet32.@LIBEXT@: libntdll.@LIBEXT@
msvcrt/libmsvcrt.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
msvideo/libmsvfw32.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
msvideo/libmsvfw32.@LIBEXT@: libwinmm.@LIBEXT@ libversion.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
odbc32/libodbc32.@LIBEXT@: libntdll.@LIBEXT@
ole32/libole32.@LIBEXT@: libadvapi32.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ librpcrt4.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
oleaut32/liboleaut32.@LIBEXT@: libole32.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@

View File

@ -2,6 +2,7 @@ name msvfw32
type win32
import winmm.dll
import version.dll
import user32.dll
import gdi32.dll
import kernel32.dll

View File

@ -15,6 +15,7 @@
#include "winnls.h"
#include "wingdi.h"
#include "winuser.h"
#include "winver.h"
#include "vfw.h"
#include "vfw16.h"
#include "wine/winbase16.h"
@ -44,8 +45,70 @@ DWORD WINAPI VideoForWindowsVersion(void) {
/***********************************************************************
* VideoCapDriverDescAndVer [MSVIDEO.22]
*/
DWORD WINAPI VideoCapDriverDescAndVer(WORD nr,LPVOID buf1,WORD buf1len,LPVOID buf2,WORD buf2len) {
FIXME("(%d,%p,%d,%p,%d), stub!\n",nr,buf1,buf1len,buf2,buf2len);
DWORD WINAPI VideoCapDriverDescAndVer(
WORD nr,LPSTR buf1,WORD buf1len,LPSTR buf2,WORD buf2len
) {
DWORD verhandle;
WORD xnr = nr;
DWORD infosize;
UINT subblocklen;
char *s,buf[2000],fn[260];
LPBYTE infobuf;
LPVOID subblock;
TRACE("(%d,%p,%d,%p,%d)\n",nr,buf1,buf1len,buf2,buf2len);
if (GetPrivateProfileStringA("drivers32",NULL,NULL,buf,sizeof(buf),"system.ini")) {
s = buf;
while (*s) {
if (!strncasecmp(s,"vid",3)) {
if (!xnr)
break;
xnr--;
}
s=s+strlen(s)+1; /* either next char or \0 */
}
} else
return 20; /* hmm, out of entries even if we don't have any */
if (xnr) {
FIXME("No more VID* entries found\n");
return 20;
}
GetPrivateProfileStringA("drivers32",s,NULL,fn,sizeof(fn),"system.ini");
infosize = GetFileVersionInfoSizeA(fn,&verhandle);
if (!infosize) {
TRACE("%s has no fileversioninfo.\n",fn);
return 18;
}
infobuf = HeapAlloc(GetProcessHeap(),0,infosize);
if (GetFileVersionInfoA(fn,verhandle,infosize,infobuf)) {
char vbuf[200];
/* Yes, two space behind : */
/* FIXME: test for buflen */
sprintf(vbuf,"Version: %d.%d.%d.%d\n",
((WORD*)infobuf)[0x0f],
((WORD*)infobuf)[0x0e],
((WORD*)infobuf)[0x11],
((WORD*)infobuf)[0x10]
);
TRACE("version of %s is %s\n",fn,vbuf);
strncpy(buf2,vbuf,buf2len);
} else {
TRACE("GetFileVersionInfoA failed for %s.\n",fn);
strncpy(buf2,fn,buf2len); /* msvideo.dll appears to copy fn*/
}
/* FIXME: language problem? */
if (VerQueryValueA( infobuf,
"\\StringFileInfo\\040904E4\\FileDescription",
&subblock,
&subblocklen
)) {
TRACE("VQA returned %s\n",(LPCSTR)subblock);
strncpy(buf1,subblock,buf1len);
} else {
TRACE("VQA did not return on query \\StringFileInfo\\040904E4\\FileDescription?\n");
strncpy(buf1,fn,buf1len); /* msvideo.dll appears to copy fn*/
}
HeapFree(GetProcessHeap(),0,infobuf);
return 0;
}
@ -258,7 +321,10 @@ HIC VFWAPI ICLocate(
DWORD querymsg;
LPSTR pszBuffer;
TRACE("(0x%08lx,0x%08lx,%p,%p,0x%04x)\n", fccType, fccHandler, lpbiIn, lpbiOut, wMode);
type[4]=0;memcpy(type,&fccType,4);
handler[4]=0;memcpy(handler,&fccHandler,4);
TRACE("(%s,%s,%p,%p,0x%04x)\n", type, handler, lpbiIn, lpbiOut, wMode);
switch (wMode) {
case ICMODE_FASTCOMPRESS: