Ouput xbox to host conversion failure verbose for first buffer/stream creation.

It may not be enough verbose, though trying it out to gather information from user's issue.
This commit is contained in:
RadWolfie 2019-02-06 13:26:29 -06:00
parent 90339f1f58
commit 2d7378daa4
2 changed files with 55 additions and 41 deletions

View File

@ -52,14 +52,9 @@ namespace xboxkrnl {
#include "core\kernel\support\EmuXTL.h"
#include "common\Settings.hpp"
#ifndef _DEBUG_TRACE
//#define _DEBUG_TRACE
#include "Logging.h"
#undef _DEBUG_TRACE
#else
#include "Logging.h"
#endif
#include "Logging.h"
#include "DirectSoundLogging.hpp"
#include "..\XbDSoundLogging.hpp"
#include <mmreg.h>
#include <msacm.h>
@ -951,19 +946,30 @@ HRESULT WINAPI XTL::EMUPATCH(DirectSoundCreateBuffer)
DBG_PRINTF("DirectSoundCreateBuffer, *ppBuffer := 0x%08X, bytes := 0x%08X\n", *ppBuffer, (*ppBuffer)->EmuBufferDesc.dwBufferBytes);
DSoundBufferCreate(&DSBufferDesc, (*ppBuffer)->EmuDirectSoundBuffer8);
if (pdsbd->dwFlags & DSBCAPS_CTRL3D) {
DSound3DBufferCreate((*ppBuffer)->EmuDirectSoundBuffer8, (*ppBuffer)->EmuDirectSound3DBuffer8);
(*ppBuffer)->Xb_dwHeadroom = 0; // Default for 3D
hRet = DSoundBufferCreate(&DSBufferDesc, (*ppBuffer)->EmuDirectSoundBuffer8);
if (FAILED(hRet)) {
std::stringstream output;
output << "Xbox:\n" << pdsbd;
output << "\nHost converison:\n" << DSBufferDesc;
EmuLog(LOG_LEVEL::WARNING, output.str().c_str());
output.str("");
output << static_cast<DS_RESULT>(hRet);
CxbxKrnlCleanup("DSB: DSoundBufferCreate error: %s", output.str().c_str());
}
else {
if (pdsbd->dwFlags & DSBCAPS_CTRL3D) {
DSound3DBufferCreate((*ppBuffer)->EmuDirectSoundBuffer8, (*ppBuffer)->EmuDirectSound3DBuffer8);
(*ppBuffer)->Xb_dwHeadroom = 0; // Default for 3D
}
DSoundDebugMuteFlag((*ppBuffer)->X_BufferCacheSize, (*ppBuffer)->EmuFlags);
// Pre-set volume to enforce silence if one of audio codec is disabled.
HybridDirectSoundBuffer_SetVolume((*ppBuffer)->EmuDirectSoundBuffer8, 0L, (*ppBuffer)->EmuFlags, nullptr,
(*ppBuffer)->Xb_VolumeMixbin, (*ppBuffer)->Xb_dwHeadroom);
g_pDSoundBufferCache.push_back(*ppBuffer);
}
DSoundDebugMuteFlag((*ppBuffer)->X_BufferCacheSize, (*ppBuffer)->EmuFlags);
// Pre-set volume to enforce silence if one of audio codec is disabled.
HybridDirectSoundBuffer_SetVolume((*ppBuffer)->EmuDirectSoundBuffer8, 0L, (*ppBuffer)->EmuFlags, nullptr,
(*ppBuffer)->Xb_VolumeMixbin, (*ppBuffer)->Xb_dwHeadroom);
g_pDSoundBufferCache.push_back(*ppBuffer);
}
leaveCriticalSection;
@ -1748,19 +1754,30 @@ HRESULT WINAPI XTL::EMUPATCH(DirectSoundCreateStream)
DBG_PRINTF("DirectSoundCreateStream, *ppStream := 0x%.08X\n", *ppStream);
DSoundBufferCreate(&DSBufferDesc, (*ppStream)->EmuDirectSoundBuffer8);
if (DSBufferDesc.dwFlags & DSBCAPS_CTRL3D) {
DSound3DBufferCreate((*ppStream)->EmuDirectSoundBuffer8, (*ppStream)->EmuDirectSound3DBuffer8);
(*ppStream)->Xb_dwHeadroom = 0; // Default for 3D
hRet = DSoundBufferCreate(&DSBufferDesc, (*ppStream)->EmuDirectSoundBuffer8);
if (FAILED(hRet)) {
std::stringstream output;
output << "Xbox:\n" << pdssd;
output << "\nHost converison:\n" << DSBufferDesc;
EmuLog(LOG_LEVEL::WARNING, output.str().c_str());
output.str("");
output << static_cast<DS_RESULT>(hRet);
CxbxKrnlCleanup("DSS: DSoundBufferCreate error: %s", output.str().c_str());
}
else {
if (DSBufferDesc.dwFlags & DSBCAPS_CTRL3D) {
DSound3DBufferCreate((*ppStream)->EmuDirectSoundBuffer8, (*ppStream)->EmuDirectSound3DBuffer8);
(*ppStream)->Xb_dwHeadroom = 0; // Default for 3D
}
DSoundDebugMuteFlag((*ppStream)->EmuBufferDesc.dwBufferBytes, (*ppStream)->EmuFlags);
// Pre-set volume to enforce silence if one of audio codec is disabled.
HybridDirectSoundBuffer_SetVolume((*ppStream)->EmuDirectSoundBuffer8, 0L, (*ppStream)->EmuFlags, nullptr,
(*ppStream)->Xb_VolumeMixbin, (*ppStream)->Xb_dwHeadroom);
g_pDSoundStreamCache.push_back(*ppStream);
}
DSoundDebugMuteFlag((*ppStream)->EmuBufferDesc.dwBufferBytes, (*ppStream)->EmuFlags);
// Pre-set volume to enforce silence if one of audio codec is disabled.
HybridDirectSoundBuffer_SetVolume((*ppStream)->EmuDirectSoundBuffer8, 0L, (*ppStream)->EmuFlags, nullptr,
(*ppStream)->Xb_VolumeMixbin, (*ppStream)->Xb_dwHeadroom);
g_pDSoundStreamCache.push_back(*ppStream);
}
leaveCriticalSection;

View File

@ -431,21 +431,18 @@ inline void DSoundGenericUnlock(
}
// Temporary creation since we need IDIRECTSOUNDBUFFER8, not IDIRECTSOUNDBUFFER class.
inline void DSoundBufferCreate(LPDSBUFFERDESC pDSBufferDesc, LPDIRECTSOUNDBUFFER8 &pDSBuffer)
inline HRESULT DSoundBufferCreate(LPDSBUFFERDESC pDSBufferDesc, LPDIRECTSOUNDBUFFER8 &pDSBuffer)
{
LPDIRECTSOUNDBUFFER pTempBuffer;
HRESULT hRetDS = g_pDSound8->CreateSoundBuffer(pDSBufferDesc, &pTempBuffer, NULL);
if (hRetDS != DS_OK) {
CxbxKrnlCleanup("CreateSoundBuffer error: 0x%08X", hRetDS);
} else {
if (hRetDS == DS_OK) {
hRetDS = pTempBuffer->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*)&(pDSBuffer));
pTempBuffer->Release();
if (hRetDS != DS_OK) {
CxbxKrnlCleanup("Create IDirectSoundBuffer8 error: 0x%08X", hRetDS);
}
}
}
}
return hRetDS;
}
inline void DSound3DBufferCreate(LPDIRECTSOUNDBUFFER8 pDSBuffer, LPDIRECTSOUND3DBUFFER8 &pDS3DBuffer) {
HRESULT hRetDS3D = pDSBuffer->QueryInterface(IID_IDirectSound3DBuffer, (LPVOID*)&(pDS3DBuffer));
if (hRetDS3D != DS_OK) {