hook AVIStreamGetFrameOpen
This commit is contained in:
parent
7025517c2f
commit
d83e9e4401
8 changed files with 52 additions and 8 deletions
|
@ -1467,10 +1467,9 @@ HRESULT dd_CreateSurface(
|
|||
|
||||
DWORD aligned_width = dst_surface->pitch / dst_surface->bytes_pp;
|
||||
|
||||
DWORD bmi_size = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256;
|
||||
DWORD bmp_size = dst_surface->pitch * (dst_surface->height + g_config.guard_lines);
|
||||
|
||||
dst_surface->bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, bmi_size);
|
||||
dst_surface->bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DDBITMAPINFO));
|
||||
dst_surface->bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
dst_surface->bmi->bmiHeader.biWidth = aligned_width;
|
||||
dst_surface->bmi->bmiHeader.biHeight = -((int)dst_surface->height + g_config.guard_lines);
|
||||
|
|
|
@ -73,6 +73,7 @@ GETVERSIONEXAPROC real_GetVersionExA = GetVersionExA;
|
|||
COCREATEINSTANCEPROC real_CoCreateInstance = CoCreateInstance;
|
||||
MCISENDCOMMANDAPROC real_mciSendCommandA = mciSendCommandA;
|
||||
SETUNHANDLEDEXCEPTIONFILTERPROC real_SetUnhandledExceptionFilter = SetUnhandledExceptionFilter;
|
||||
AVISTREAMGETFRAMEOPENPROC real_AVIStreamGetFrameOpen = AVIStreamGetFrameOpen;
|
||||
|
||||
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
|
||||
SETWINDOWLONGWPROC real_SetWindowLongW = SetWindowLongW;
|
||||
|
@ -142,6 +143,13 @@ HOOKLIST g_hook_hooklist[] =
|
|||
{ "", NULL, NULL, 0 }
|
||||
}
|
||||
},
|
||||
{
|
||||
"Avifil32.dll",
|
||||
{
|
||||
{ "AVIStreamGetFrameOpen", (PROC)fake_AVIStreamGetFrameOpen, (PROC*)&real_AVIStreamGetFrameOpen, 0 },
|
||||
{ "", NULL, NULL, 0 }
|
||||
}
|
||||
},
|
||||
{
|
||||
"dinput.dll",
|
||||
{
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <math.h>
|
||||
#include <vfw.h>
|
||||
#include "debug.h"
|
||||
#include "config.h"
|
||||
#include "dd.h"
|
||||
|
@ -2174,3 +2175,27 @@ LPTOP_LEVEL_EXCEPTION_FILTER WINAPI fake_SetUnhandledExceptionFilter(
|
|||
return old;
|
||||
//return real_SetUnhandledExceptionFilter(lpTopLevelExceptionFilter);
|
||||
}
|
||||
|
||||
PGETFRAME WINAPI fake_AVIStreamGetFrameOpen(PAVISTREAM pavi, LPBITMAPINFOHEADER lpbiWanted)
|
||||
{
|
||||
if (g_ddraw.ref && g_ddraw.primary && (!lpbiWanted || (DWORD)lpbiWanted == 1))
|
||||
{
|
||||
DDBITMAPINFO bmi;
|
||||
memcpy(&bmi, g_ddraw.primary->bmi, sizeof(DDBITMAPINFO));
|
||||
|
||||
bmi.bmiHeader.biHeight = 0;
|
||||
bmi.bmiHeader.biWidth = 0;
|
||||
|
||||
if (g_ddraw.bpp == 8 && g_ddraw.primary->palette)
|
||||
{
|
||||
memcpy(&bmi.bmiColors[0], g_ddraw.primary->palette->data_rgb, sizeof(bmi.bmiColors));
|
||||
}
|
||||
|
||||
PGETFRAME result = real_AVIStreamGetFrameOpen(pavi, (LPBITMAPINFOHEADER)&bmi);
|
||||
|
||||
if (result)
|
||||
return result;
|
||||
}
|
||||
|
||||
return real_AVIStreamGetFrameOpen(pavi, lpbiWanted);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue