/* * Copyright 1998 Marcus Meissner */ #include #include "windows.h" #include "driver.h" #include "mmsystem.h" #include "ole2.h" #include "vfw.h" #include "debug.h" /**************************************************************************** * VideoForWindowsVersion [MSVFW32.2][MSVIDEO.2] * Returns the version in major.minor form. * In Windows95 this returns 0x040003b6 (4.950) */ DWORD WINAPI VideoForWindowsVersion(void) { return 0x040003B6; /* 4.950 */ } /* system.ini: [drivers32] */ /************************************************************************** * ICInfo [MSVFW32.33] * Get information about an installable compressor. Return TRUE if there * is one. */ BOOL32 WINAPI ICInfo32( DWORD fccType, /* [in] type of compressor ('vidc') */ DWORD fccHandler, /* [in] th compressor */ ICINFO32 *lpicinfo /* [out] information about compressor */ ) { char type[5],buf[2000]; memcpy(type,&fccType,4);type[4]=0; TRACE(mmsys,"(%s,%ld,%p).\n",type,fccHandler,lpicinfo); /* does OpenDriver/CloseDriver */ lpicinfo->dwSize = sizeof(ICINFO32); lpicinfo->fccType = fccType; lpicinfo->dwFlags = 0; if (GetPrivateProfileString32A("drivers32",NULL,NULL,buf,2000,"system.ini")) { char *s = buf; while (*s) { if (!lstrncmpi32A(type,s,4)) { if(!fccHandler--) { lpicinfo->fccHandler = mmioStringToFOURCC32A(s+5,0); return TRUE; } } s=s+lstrlen32A(s)+1; /* either next char or \0 */ } } return FALSE; } /************************************************************************** * ICOpen [MSVFW32.37] * Opens an installable compressor. Return special handle. */ HIC32 WINAPI ICOpen32(DWORD fccType,DWORD fccHandler,UINT32 wMode) { char type[5],handler[5],codecname[20]; ICOPEN icopen; HDRVR32 hdrv; WINE_HIC *whic; memcpy(type,&fccType,4);type[4]=0; memcpy(handler,&fccHandler,4);handler[4]=0; TRACE(mmsys,"(%s,%s,0x%08lx)\n",type,handler,(DWORD)wMode); sprintf(codecname,"%s.%s",type,handler); hdrv=OpenDriver32A(codecname,"drivers32",0); if (!hdrv) return 0; whic = HeapAlloc(GetProcessHeap(),0,sizeof(WINE_HIC)); whic->hdrv = hdrv; whic->driverproc= GetProcAddress32(GetDriverModuleHandle32(hdrv),"DriverProc"); /* Well, lParam2 is in fact a LPVIDEO_OPEN_PARMS, but it has the * same layout as ICOPEN */ icopen.fccType = fccType; icopen.fccHandler = fccHandler; icopen.dwSize = sizeof(ICOPEN); /* FIXME: fill out rest too... */ whic->private = whic->driverproc(0,hdrv,DRV_OPEN,0,&icopen); return (HIC32)whic; } LRESULT WINAPI ICGetInfo32(HIC32 hic,ICINFO32 *picinfo,DWORD cb) { LRESULT ret; WINE_HIC *whic = (WINE_HIC*)hic; TRACE(mmsys,"(0x%08lx,%p,%ld)\n",(DWORD)hic,picinfo,cb); ret = ICSendMessage32(whic,ICM_GETINFO,(DWORD)picinfo,cb); TRACE(mmsys," -> 0x%08lx\n",ret); return ret; } HIC32 WINAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags ) { FIXME(mmsys,"stub!\n"); return 0; } LRESULT VFWAPI ICSendMessage32(HIC32 hic,UINT32 msg,DWORD lParam1,DWORD lParam2) { LRESULT ret; WINE_HIC *whic = (WINE_HIC*)hic; switch (msg) { case ICM_GETINFO: FIXME(mmsys,"(0x%08lx,ICM_GETINFO,0x%08lx,0x%08lx)\n",(DWORD)hic,lParam1,lParam2); break; default: FIXME(mmsys,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx)\n",(DWORD)hic,(DWORD)msg,lParam1,lParam2); } ret = whic->driverproc(whic->private,whic->hdrv,msg,lParam1,lParam2); FIXME(mmsys," -> 0x%08lx\n",ret); return ret; } DWORD VFWAPIV ICDrawBegin32( HIC32 hic, DWORD dwFlags,/* flags */ HPALETTE32 hpal, /* palette to draw with */ HWND32 hwnd, /* window to draw to */ HDC32 hdc, /* HDC to draw to */ INT32 xDst, /* destination rectangle */ INT32 yDst, INT32 dxDst, INT32 dyDst, LPBITMAPINFOHEADER lpbi, /* format of frame to draw */ INT32 xSrc, /* source rectangle */ INT32 ySrc, INT32 dxSrc, INT32 dySrc, DWORD dwRate, /* frames/second = (dwRate/dwScale) */ DWORD dwScale) { return 0; } HANDLE32 /* HDRAWDIB */ WINAPI DrawDibOpen32() { FIXME(mmsys,"stub!\n"); return 0; }