Hotfix DSound Stream

This commit is contained in:
RadWolfie 2018-04-02 13:09:51 -05:00
parent 0ede9c223d
commit 5e58773956
2 changed files with 11 additions and 1 deletions

View File

@ -3394,6 +3394,8 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetFormat)
LOG_FUNC_ARG(pwfxFormat)
LOG_FUNC_END;
XTL::EMUPATCH(CDirectSoundStream_Flush)(pThis);
return HybridDirectSoundBuffer_SetFormat(pThis->EmuDirectSoundBuffer8, pwfxFormat, pThis->EmuBufferDesc,
pThis->EmuFlags, pThis->EmuPlayFlags, pThis->EmuDirectSound3DBuffer8,
0, pThis->X_BufferCache, pThis->X_BufferCacheSize);

View File

@ -286,7 +286,10 @@ inline void GeneratePCMFormat(
GenerateXboxBufferCache(pDSBufferDesc, dwEmuFlags, X_BufferSizeRequest, X_BufferCache, X_BufferCacheSize);
}
pDSBufferDesc->dwBufferBytes = DSoundBufferGetPCMBufferSize(dwEmuFlags, X_BufferCacheSize);
// Handle DSound Buffer only
if (X_BufferCacheSize > 0) {
pDSBufferDesc->dwBufferBytes = DSoundBufferGetPCMBufferSize(dwEmuFlags, X_BufferCacheSize);
}
}
inline void DSoundGenericUnlock(
@ -1060,6 +1063,11 @@ inline HRESULT HybridDirectSoundBuffer_SetFormat(
if (g_pDSoundPrimaryBuffer == pDSBuffer) {
hRet = pDSBuffer->SetFormat(pBufferDesc->lpwfxFormat);
} else {
// DSound Stream only
if (X_BufferCacheSize == 0) {
// Allocate at least 5 second worth of bytes in PCM format.
pBufferDesc->dwBufferBytes = pBufferDesc->lpwfxFormat->nAvgBytesPerSec * 5;
}
DSoundBufferReplace(pDSBuffer, pBufferDesc, dwPlayFlags, pDS3DBuffer);
}