diff --git a/src/core/hle/DSOUND/DirectSound/DSStream_PacketManager.cpp b/src/core/hle/DSOUND/DirectSound/DSStream_PacketManager.cpp index 187760c7d..f8cc13daf 100644 --- a/src/core/hle/DSOUND/DirectSound/DSStream_PacketManager.cpp +++ b/src/core/hle/DSOUND/DirectSound/DSStream_PacketManager.cpp @@ -75,13 +75,6 @@ void DSStream_Packet_Clear( free(buffer->pBuffer_data); - // Peform release only, don't trigger any events below. - if (status == XMP_STATUS_RELEASE_CXBXR) { - DSoundSGEMemDealloc(buffer->xmp_data.dwMaxSize); - buffer = pThis->Host_BufferPacketArray.erase(buffer); - return; - } - if (buffer->xmp_data.pdwStatus != xbox::zeroptr) { (*buffer->xmp_data.pdwStatus) = status; } @@ -163,7 +156,7 @@ static inline void DSStream_Packet_Stop( { DSStream_Packet_Stop_Internal(pThis); - if (pThis->Host_BufferPacketArray.size() == 0) { + if (pThis->Host_BufferPacketArray.empty()) { if ((pThis->EmuFlags & DSE_FLAG_ENVELOPE2) > 0) { pThis->Xb_Status |= X_DSSSTATUS_ENVELOPECOMPLETE; } @@ -186,6 +179,18 @@ static inline void DSStream_Packet_Starved( ); } +static inline void DSStream_Packet_Complete( + xbox::X_CDirectSoundStream* pThis + ) +{ + if ((pThis->EmuFlags & DSE_FLAG_ENVELOPE2) != 0) { + pThis->Xb_Status = X_DSSSTATUS_ENVELOPECOMPLETE; + } + else { + pThis->Xb_Status = 0; + } +} + // Prefill buffer with at least 1 second worth of buffer. See "nAvgBytesPerSec" below for inspection. static void DSStream_Packet_Prefill( xbox::X_CDirectSoundStream* pThis, @@ -214,10 +219,24 @@ bool DSStream_Packet_Process( { // Do not allow to process if there is no packets. - if (pThis->Host_BufferPacketArray.size() == 0) { + if (pThis->Host_BufferPacketArray.empty()) { return 0; } + // Do not allow to process when the voice is not activated. + if ((pThis->EmuFlags & DSE_FLAG_PAUSENOACTIVATE) != 0 && + (pThis->EmuFlags & DSE_FLAG_IS_ACTIVATED) == 0) { + return 0; + } + + if (pThis->EmuFlags & DSE_FLAG_IS_FLUSHING) { + return 0; + } + + if (!(pThis->EmuFlags & DSE_FLAG_IS_ACTIVATED)) { + pThis->EmuFlags |= DSE_FLAG_IS_ACTIVATED; + } + // If title want to pause, then don't process the packets. // If media object is being used as playback synch, then don't process the packets. if ((pThis->EmuFlags & DSE_FLAG_PAUSE) > 0 || @@ -228,16 +247,6 @@ bool DSStream_Packet_Process( return 0; } - if ((pThis->Xb_Status & X_DSSSTATUS_PAUSED) > 0) { - pThis->Xb_Status &= ~X_DSSSTATUS_PAUSED; - } - - if (pThis->Host_isProcessing == false) { - if (!(pThis->EmuFlags & DSE_FLAG_IS_ACTIVATED)) { - pThis->EmuFlags |= DSE_FLAG_IS_ACTIVATED; - } - } - DWORD dwAudioBytes; HRESULT hRet = pThis->EmuDirectSoundBuffer8->GetStatus(&dwAudioBytes); if (hRet == DS_OK) { @@ -289,9 +298,10 @@ bool DSStream_Packet_Process( bool isStreamEnd = packetCurrent->isStreamEnd; DSStream_Packet_Clear(packetCurrent, XMP_STATUS_SUCCESS, pThis->Xb_lpfnCallback, pThis->Xb_lpvContext, pThis); - if (pThis->Host_BufferPacketArray.size() == 0) { + if (pThis->Host_BufferPacketArray.empty()) { if (isStreamEnd) { DSStream_Packet_Stop(pThis); + DSStream_Packet_Complete(pThis); } else { DSStream_Packet_Starved(pThis); @@ -325,7 +335,7 @@ bool DSStream_Packet_Process( DSStream_Packet_Prefill(pThis, packetCurrent); } // Out of packets, let's stop stream's buffer. - if (pThis->Host_BufferPacketArray.size() == 0) { + if (pThis->Host_BufferPacketArray.empty()) { DSStream_Packet_Starved(pThis); return 0; } @@ -345,7 +355,7 @@ void DSStream_Packet_FlushEx_Reset( xbox::X_CDirectSoundStream* pThis ) { - // Remove flags only (This is the only place it will remove other than FlushEx perform set/remove the flags.) + // Remove flags only (This is the only place it will remove beside FlushEx perform re-set the flags.) pThis->EmuFlags &= ~(DSE_FLAG_FLUSH_ASYNC | DSE_FLAG_ENVELOPE | DSE_FLAG_ENVELOPE2); pThis->Xb_rtFlushEx = 0LL; } @@ -354,6 +364,9 @@ bool DSStream_Packet_Flush( xbox::X_CDirectSoundStream* pThis ) { + if ((pThis->EmuFlags & DSE_FLAG_IS_FLUSHING) == 0) { + pThis->EmuFlags |= DSE_FLAG_IS_FLUSHING; + } // If host's audio is still playing then return busy-state until buffer has stop playing. DWORD dwStatus; pThis->EmuDirectSoundBuffer8->GetStatus(&dwStatus); @@ -371,8 +384,14 @@ bool DSStream_Packet_Flush( DSStream_Packet_Clear(buffer, XMP_STATUS_FLUSHED, pThis->Xb_lpfnCallback, pThis->Xb_lpvContext, pThis); } // Clear flags and set status to zero. + DSStream_Packet_Complete(pThis); DSStream_Packet_FlushEx_Reset(pThis); - pThis->EmuFlags &= ~DSE_FLAG_PAUSE; - pThis->Xb_Status = 0; + + // TESTCASE: Burnout 3 sets stream to pause state then calling SetFormat without processing any packets. + // Which then doesn't need to clear pause flag. + if ((pThis->EmuFlags & DSE_FLAG_IS_ACTIVATED) != 0) { + pThis->EmuFlags &= ~(DSE_FLAG_PAUSE | DSE_FLAG_IS_ACTIVATED); + } + pThis->EmuFlags &= ~DSE_FLAG_IS_FLUSHING; return false; } diff --git a/src/core/hle/DSOUND/DirectSound/DirectSound.cpp b/src/core/hle/DSOUND/DirectSound/DirectSound.cpp index 25de7da9b..7adba12a8 100644 --- a/src/core/hle/DSOUND/DirectSound/DirectSound.cpp +++ b/src/core/hle/DSOUND/DirectSound/DirectSound.cpp @@ -899,7 +899,7 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSound_SynchPlayback) vector_ds_stream::iterator ppDSStream = g_pDSoundStreamCache.begin(); for (; ppDSStream != g_pDSoundStreamCache.end(); ppDSStream++) { - if ((*ppDSStream)->Host_BufferPacketArray.size() == 0) { + if ((*ppDSStream)->Host_BufferPacketArray.empty()) { continue; } if (((*ppDSStream)->EmuFlags & DSE_FLAG_SYNCHPLAYBACK_CONTROL) > 0) { diff --git a/src/core/hle/DSOUND/DirectSound/DirectSound.hpp b/src/core/hle/DSOUND/DirectSound/DirectSound.hpp index f65a65d49..e87167707 100644 --- a/src/core/hle/DSOUND/DirectSound/DirectSound.hpp +++ b/src/core/hle/DSOUND/DirectSound/DirectSound.hpp @@ -133,11 +133,13 @@ struct SharedDSBuffer : DSBUFFER_S { #define DSE_FLAG_PCM_UNKNOWN (1 << 2) #define DSE_FLAG_SYNCHPLAYBACK_CONTROL (1 << 10) #define DSE_FLAG_PAUSE (1 << 11) -#define DSE_FLAG_FLUSH_ASYNC (1 << 12) -#define DSE_FLAG_ENVELOPE (1 << 13) -#define DSE_FLAG_ENVELOPE2 (1 << 14) // NOTE: This flag is a requirement for GetStatus to return X_DSSSTATUS_ENVELOPECOMPLETE value. +#define DSE_FLAG_PAUSENOACTIVATE (1 << 12) +#define DSE_FLAG_FLUSH_ASYNC (1 << 13) +#define DSE_FLAG_ENVELOPE (1 << 14) +#define DSE_FLAG_ENVELOPE2 (1 << 15) // NOTE: This flag is a requirement for GetStatus to return X_DSSSTATUS_ENVELOPECOMPLETE value. #define DSE_FLAG_RECIEVEDATA (1 << 20) #define DSE_FLAG_IS_ACTIVATED (1 << 21) // Only used for DirectSoundStream class, to acknowledge pause's no activate flag. +#define DSE_FLAG_IS_FLUSHING (1 << 22) // Only used for DirectSoundStream class, to acknowledge pause's no activate flag. #define DSE_FLAG_DEBUG_MUTE (1 << 30) // Cxbx-R debugging usage only #define DSE_FLAG_BUFFER_EXTERNAL (1 << 31) #define DSE_FLAG_AUDIO_CODECS (DSE_FLAG_PCM | DSE_FLAG_XADPCM | DSE_FLAG_PCM_UNKNOWN) diff --git a/src/core/hle/DSOUND/DirectSound/DirectSoundInline.hpp b/src/core/hle/DSOUND/DirectSound/DirectSoundInline.hpp index c8cd34af9..bd215786f 100644 --- a/src/core/hle/DSOUND/DirectSound/DirectSoundInline.hpp +++ b/src/core/hle/DSOUND/DirectSound/DirectSoundInline.hpp @@ -849,14 +849,16 @@ static inline HRESULT HybridDirectSoundBuffer_Pause( pDSBuffer->Play(0, 0, dwEmuPlayFlags); } DSoundBufferSynchPlaybackFlagRemove(dwEmuFlags); - dwEmuFlags &= ~DSE_FLAG_PAUSE; + dwEmuFlags &= ~(DSE_FLAG_PAUSE | DSE_FLAG_PAUSENOACTIVATE); Xb_rtTimeStamp = 0; break; case X_DSSPAUSE_PAUSE: pDSBuffer->Stop(); DSoundBufferSynchPlaybackFlagRemove(dwEmuFlags); - dwEmuFlags |= DSE_FLAG_PAUSE; - Xb_rtTimeStamp = rtTimeStamp; + if ((dwEmuFlags & DSE_FLAG_PAUSENOACTIVATE) == 0) { + dwEmuFlags |= DSE_FLAG_PAUSE; + Xb_rtTimeStamp = rtTimeStamp; + } break; case X_DSSPAUSE_SYNCHPLAYBACK: //TODO: Test case Rayman 3 - Hoodlum Havoc, Battlestar Galactica, Miami Vice, Star Wars: KotOR, and... ? @@ -867,8 +869,13 @@ static inline HRESULT HybridDirectSoundBuffer_Pause( pDSBuffer->Stop(); } break; - // TODO: NOTE: If stream is playing, it perform same behavior as pause flag. If it is not played, it act as a queue until trigger to play it. + // NOTE: If stream is paused with packets, it will trigger to play. If it is not played, it act as a queue until trigger to play it. case X_DSSPAUSE_PAUSENOACTIVATE: + dwEmuFlags &= ~DSE_FLAG_PAUSE; + if ((dwEmuFlags & DSE_FLAG_IS_ACTIVATED) == 0) { + dwEmuFlags |= DSE_FLAG_PAUSENOACTIVATE; + Xb_rtTimeStamp = rtTimeStamp; + } break; } diff --git a/src/core/hle/DSOUND/DirectSound/DirectSoundStream.cpp b/src/core/hle/DSOUND/DirectSound/DirectSoundStream.cpp index 2c725e955..c6cc99711 100644 --- a/src/core/hle/DSOUND/DirectSound/DirectSoundStream.cpp +++ b/src/core/hle/DSOUND/DirectSound/DirectSoundStream.cpp @@ -126,14 +126,14 @@ void DirectSoundDoWork_Stream(xbox::LARGE_INTEGER& time) // Actually, DirectSoundStream need to process buffer packets here. vector_ds_stream::iterator ppDSStream = g_pDSoundStreamCache.begin(); for (; ppDSStream != g_pDSoundStreamCache.end(); ppDSStream++) { - if ((*ppDSStream)->Host_BufferPacketArray.size() == 0) { + if ((*ppDSStream)->Host_BufferPacketArray.empty()) { continue; } xbox::X_CDirectSoundStream* pThis = (*ppDSStream); // TODO: Do we need this in async thread loop? if (pThis->Xb_rtPauseEx != 0LL && pThis->Xb_rtPauseEx <= time.QuadPart) { pThis->Xb_rtPauseEx = 0LL; - pThis->EmuFlags &= ~DSE_FLAG_PAUSE; + pThis->EmuFlags &= ~(DSE_FLAG_PAUSE | DSE_FLAG_PAUSENOACTIVATE); // Don't call play here, let DSStream_Packet_Process deal with it. } // If has flush async requested then verify time has expired to perform flush process. @@ -191,7 +191,7 @@ xbox::ulong_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_Release) } for (auto buffer = pThis->Host_BufferPacketArray.begin(); buffer != pThis->Host_BufferPacketArray.end();) { - DSStream_Packet_Clear(buffer, XMP_STATUS_RELEASE_CXBXR, nullptr, nullptr, pThis); + DSStream_Packet_Clear(buffer, XMP_STATUS_FLUSHED, pThis->Xb_lpfnCallback, pThis->Xb_lpvContext, pThis); } if (pThis->EmuBufferDesc.lpwfxFormat != nullptr) { @@ -380,6 +380,18 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_Discontinuity) return DS_OK; } +xbox::hresult_xt CxbxrImpl_CDirectSoundStream_Flush +( + xbox::X_CDirectSoundStream* pThis) +{ + + DSoundBufferSynchPlaybackFlagRemove(pThis->EmuFlags); + + while (DSStream_Packet_Flush(pThis)); + + return DS_OK; +} + // ****************************************************************** // * patch: CDirectSoundStream_Flush // ****************************************************************** @@ -391,11 +403,7 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_Flush) LOG_FUNC_ONE_ARG(pThis); - DSoundBufferSynchPlaybackFlagRemove(pThis->EmuFlags); - - while (DSStream_Packet_Flush(pThis)); - - return DS_OK; + return CxbxrImpl_CDirectSoundStream_Flush(pThis); } // ****************************************************************** @@ -412,7 +420,7 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_FlushEx) LOG_FUNC_BEGIN LOG_FUNC_ARG(pThis) LOG_FUNC_ARG(rtTimeStamp) - LOG_FUNC_ARG(dwFlags) + LOG_FUNC_ARG_TYPE(DSSFLUSHEX_FLAG, dwFlags) LOG_FUNC_END; HRESULT hRet = DSERR_INVALIDPARAM; @@ -422,22 +430,20 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_FlushEx) // Cannot use rtTimeStamp here, it must be flush. if (dwFlags == X_DSSFLUSHEX_IMMEDIATE) { - hRet = xbox::EMUPATCH(CDirectSoundStream_Flush)(pThis); + hRet = CxbxrImpl_CDirectSoundStream_Flush(pThis); } // Remaining flags require X_DSSFLUSHEX_ASYNC to be include. - else if ((dwFlags & X_DSSFLUSHEX_ASYNC) > 0) { + else if ((dwFlags & X_DSSFLUSHEX_ASYNC) > 0 && !pThis->Host_BufferPacketArray.empty()) { // If rtTimeStamp is zero'd, then call flush once and allow process flush in worker thread. if (rtTimeStamp == 0LL) { - bool isBusy = DSStream_Packet_Flush(pThis); - if (!isBusy) { - // testcase: Obscure will crash after new game's video if not call DSStream_Packet_Flush in same thread. - // If flush is not busy, then we don't need worker thread to continue flushing. - return hRet; - } xbox::LARGE_INTEGER getTime; xbox::KeQuerySystemTime(&getTime); pThis->Xb_rtFlushEx = getTime.QuadPart; + pThis->EmuFlags |= DSE_FLAG_IS_FLUSHING; + // HACK: Need to find a way to remove Flush call without break Obscure. + // Otherwise, it will behave like on hardware. + DSStream_Packet_Flush(pThis); } else { pThis->Xb_rtFlushEx = rtTimeStamp; @@ -549,14 +555,17 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_GetStatus__r2) // Convert host to xbox status flag. if (hRet == DS_OK) { - if (pThis->Host_isProcessing && !(dwStatusXbox & X_DSSSTATUS_PAUSED)) { - dwStatusXbox |= X_DSSSTATUS_PLAYING; - - } if (pThis->Host_BufferPacketArray.size() != pThis->X_MaxAttachedPackets) { dwStatusXbox |= X_DSSSTATUS_READY; } - + if (!pThis->Host_BufferPacketArray.empty()) { + if ((pThis->EmuFlags & DSE_FLAG_PAUSE) != 0) { + dwStatusXbox |= X_DSSSTATUS_PAUSED; + } + else if ((pThis->EmuFlags & (DSE_FLAG_PAUSE | DSE_FLAG_PAUSENOACTIVATE | DSE_FLAG_IS_FLUSHING)) == 0) { + dwStatusXbox |= X_DSSSTATUS_PLAYING; + } + } } else { dwStatusXbox = 0; hRet = DSERR_GENERIC; @@ -601,19 +610,38 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_GetVoiceProperties) return hRet; } + +xbox::hresult_xt CxbxrImpl_CDirectSoundStream_PauseEx( + xbox::X_CDirectSoundStream* pThis, + xbox::REFERENCE_TIME rtTimestamp, + xbox::dword_xt dwPause) +{ + xbox::hresult_xt hRet = HybridDirectSoundBuffer_Pause(pThis->EmuDirectSoundBuffer8, dwPause, pThis->EmuFlags, pThis->EmuPlayFlags, + pThis->Host_isProcessing, rtTimestamp, pThis->Xb_rtPauseEx); + + if ((pThis->EmuFlags & DSE_FLAG_PAUSE) != 0) { + pThis->Host_isProcessing = false; + } + else if (!pThis->Host_isProcessing) { + DSStream_Packet_Process(pThis); + } + + return hRet; +} + // ****************************************************************** // * patch: CDirectSoundStream_Pause // ****************************************************************** xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_Pause) ( X_CDirectSoundStream* pThis, - dword_xt dwPause) + dword_xt dwPause) { DSoundMutexGuardLock; LOG_FUNC_BEGIN LOG_FUNC_ARG(pThis) - LOG_FUNC_ARG(dwPause) + LOG_FUNC_ARG_TYPE(DSSPAUSE_FLAG, dwPause) LOG_FUNC_END; if (!pThis) { @@ -621,26 +649,7 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_Pause) return xbox::status_success; } - HRESULT hRet = HybridDirectSoundBuffer_Pause(pThis->EmuDirectSoundBuffer8, dwPause, pThis->EmuFlags, pThis->EmuPlayFlags, - pThis->Host_isProcessing, 0LL, pThis->Xb_rtPauseEx); - - if (dwPause == X_DSSPAUSE_PAUSENOACTIVATE) { - if (pThis->Host_BufferPacketArray.size() == 0 && !(pThis->EmuFlags & DSE_FLAG_IS_ACTIVATED)) { - pThis->EmuFlags |= DSE_FLAG_PAUSE; - } - } - - if ((pThis->EmuFlags & DSE_FLAG_PAUSE) > 0) { - pThis->Host_isProcessing = false; - if ((pThis->EmuFlags & DSE_FLAG_IS_ACTIVATED) > 0) { - if (pThis->Host_BufferPacketArray.size() != 0) { - pThis->Xb_Status |= X_DSSSTATUS_PAUSED; - } - } - } - else if (!pThis->Host_isProcessing) { - DSStream_Packet_Process(pThis); - } + HRESULT hRet = CxbxrImpl_CDirectSoundStream_PauseEx(pThis, 0LL, dwPause); return hRet; } @@ -652,21 +661,19 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_PauseEx) ( X_CDirectSoundStream *pThis, REFERENCE_TIME rtTimestamp, - dword_xt dwPause) + dword_xt dwPause) { DSoundMutexGuardLock; LOG_FUNC_BEGIN LOG_FUNC_ARG(pThis) LOG_FUNC_ARG(rtTimestamp) - LOG_FUNC_ARG(dwPause) + LOG_FUNC_ARG_TYPE(DSSPAUSE_FLAG, dwPause) LOG_FUNC_END; // This function wasn't part of the XDK until 4721. (Same as IDirectSoundBuffer_PauseEx?) - // TODO: Implement time stamp feature (a thread maybe?) - HRESULT hRet = HybridDirectSoundBuffer_Pause(pThis->EmuDirectSoundBuffer8, dwPause, pThis->EmuFlags, pThis->EmuPlayFlags, - pThis->Host_isProcessing, rtTimestamp, pThis->Xb_rtPauseEx); + HRESULT hRet = CxbxrImpl_CDirectSoundStream_PauseEx(pThis, rtTimestamp, dwPause); return hRet; } @@ -735,9 +742,7 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(CDirectSoundStream_Process) if ((pThis->Xb_Status & X_DSSSTATUS_STARVED) > 0) { pThis->Xb_Status &= ~X_DSSSTATUS_STARVED; } - if ((pThis->EmuFlags & DSE_FLAG_IS_ACTIVATED) > 0 && (pThis->EmuFlags & DSE_FLAG_PAUSE) > 0) { - pThis->Xb_Status |= X_DSSSTATUS_PAUSED; - } + pThis->EmuFlags &= ~DSE_FLAG_IS_FLUSHING; DSStream_Packet_Process(pThis); // Once full it needs to change status to flushed when cannot hold any more packets. } else { diff --git a/src/core/hle/DSOUND/XbDSoundLogging.cpp b/src/core/hle/DSOUND/XbDSoundLogging.cpp index 437049a72..916c22afb 100644 --- a/src/core/hle/DSOUND/XbDSoundLogging.cpp +++ b/src/core/hle/DSOUND/XbDSoundLogging.cpp @@ -118,12 +118,12 @@ FLAGS2STR_START(DSSFLUSHEX_FLAG) FLAG2STR(X_DSSFLUSHEX_ENVELOPE2) FLAGS2STR_END_and_LOGRENDER(DSSFLUSHEX_FLAG) -FLAGS2STR_START(DSSPAUSE_FLAG) - FLAG2STR(X_DSSPAUSE_RESUME) - FLAG2STR(X_DSSPAUSE_PAUSE) - FLAG2STR(X_DSSPAUSE_SYNCHPLAYBACK) - FLAG2STR(X_DSSPAUSE_PAUSENOACTIVATE) -FLAGS2STR_END_and_LOGRENDER(DSSPAUSE_FLAG) +ENUM2STR_START(DSSPAUSE_FLAG) + ENUM2STR_CASE(X_DSSPAUSE_RESUME) + ENUM2STR_CASE(X_DSSPAUSE_PAUSE) + ENUM2STR_CASE(X_DSSPAUSE_SYNCHPLAYBACK) + ENUM2STR_CASE(X_DSSPAUSE_PAUSENOACTIVATE) +ENUM2STR_END_and_LOGRENDER(DSSPAUSE_FLAG) FLAGS2STR_START(DSSSTATUS_FLAG) FLAG2STR(X_DSSSTATUS_READY) @@ -139,7 +139,6 @@ ENUM2STR_START(XMP_STATUS) ENUM2STR_CASE(XMP_STATUS_PENDING) ENUM2STR_CASE(XMP_STATUS_FLUSHED) ENUM2STR_CASE(XMP_STATUS_FAILURE) - ENUM2STR_CASE((int)XMP_STATUS_RELEASE_CXBXR) // NOTE: Custom status for Cxbx-Reloaded. ENUM2STR_END_and_LOGRENDER(XMP_STATUS) FLAGS2STR_START(XMO_STREAMF) diff --git a/src/core/hle/DSOUND/XbDSoundLogging.hpp b/src/core/hle/DSOUND/XbDSoundLogging.hpp index 6b2f7e779..9d99b21ba 100644 --- a/src/core/hle/DSOUND/XbDSoundLogging.hpp +++ b/src/core/hle/DSOUND/XbDSoundLogging.hpp @@ -67,7 +67,7 @@ FLAGS2STR_HEADER(DSBSTOPEX_FLAG) // DSound Stream flag/enum FLAGS2STR_HEADER(DSSCAPS_FLAG) FLAGS2STR_HEADER(DSSFLUSHEX_FLAG) -FLAGS2STR_HEADER(DSSPAUSE_FLAG) +ENUM2STR_HEADER(DSSPAUSE_FLAG) FLAGS2STR_HEADER(DSSSTATUS_FLAG) // DSound class usage diff --git a/src/core/hle/DSOUND/XbDSoundTypes.h b/src/core/hle/DSOUND/XbDSoundTypes.h index fb6ca44c2..25cb4d7f5 100644 --- a/src/core/hle/DSOUND/XbDSoundTypes.h +++ b/src/core/hle/DSOUND/XbDSoundTypes.h @@ -225,7 +225,6 @@ XMEDIAPACKET, *PXMEDIAPACKET, *LPXMEDIAPACKET; #define XMP_STATUS_PENDING E_PENDING #define XMP_STATUS_FLUSHED E_ABORT #define XMP_STATUS_FAILURE E_FAIL -#define XMP_STATUS_RELEASE_CXBXR 0xFFFFFFFF // ****************************************************************** // * XMEDIAINFO