Windows2003-3790/windows/appcompat/shims/general/correctacmstreamopen.cpp

81 lines
1.8 KiB
C++
Raw Permalink Normal View History

2001-01-01 00:00:00 +01:00
/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
CorrectACMStreamOpen.cpp
Abstract:
This shim corrects the samples per block for acmStreamOpen so that
it will pass IMA ADPCM's parameter validation.
Notes:
This is a general shim.
History:
08/09/2002 mnikkel Created
--*/
#include "precomp.h"
#include "msacmdrv.h"
typedef MMRESULT (*_pfn_acmStreamOpen)(LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc,
LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD_PTR dwCallback,
DWORD_PTR dwInstance, DWORD fdwOpen );
IMPLEMENT_SHIM_BEGIN(CorrectACMStreamOpen)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(acmStreamOpen)
APIHOOK_ENUM_END
/*++
If the wSamplesPerBlock is 1017 samples change it to 505 samples
so it will pass IMA ADPCM's parameter validation.
--*/
MMRESULT
APIHOOK(acmStreamOpen)(
LPHACMSTREAM phas,
HACMDRIVER had,
LPWAVEFORMATEX pwfxSrc,
LPWAVEFORMATEX pwfxDst,
LPWAVEFILTER pwfltr,
DWORD_PTR dwCallback,
DWORD_PTR dwInstance,
DWORD fdwOpen
)
{
if ( pwfxSrc &&
(WAVE_FORMAT_IMA_ADPCM == pwfxSrc->wFormatTag) &&
(256 == pwfxSrc->nBlockAlign) &&
(1017 == ((LPIMAADPCMWAVEFORMAT)(pwfxSrc))->wSamplesPerBlock))
{
((LPIMAADPCMWAVEFORMAT)(pwfxSrc))->wSamplesPerBlock = 505;
DPFN( eDbgLevelError, "[acmStreamOpen] changing samples per block to 505");
}
return acmStreamOpen( phas, had, pwfxSrc, pwfxDst, pwfltr, dwCallback,
dwInstance, fdwOpen);
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(MSACM32.DLL, acmStreamOpen)
HOOK_END
IMPLEMENT_SHIM_END