From e130d73f8865056995011b2bad58bdb560e71e4a Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 4 Oct 2006 02:33:20 +0000 Subject: [PATCH] DSERR_BUFFERLOST handling in DSoundBuf::GetPosition --- stepmania/src/arch/Sound/DSoundHelpers.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/stepmania/src/arch/Sound/DSoundHelpers.cpp b/stepmania/src/arch/Sound/DSoundHelpers.cpp index 11fa066ce4..c62b7d0783 100644 --- a/stepmania/src/arch/Sound/DSoundHelpers.cpp +++ b/stepmania/src/arch/Sound/DSoundHelpers.cpp @@ -592,7 +592,19 @@ int64_t DSoundBuf::GetPosition() const { DWORD iCursor, iJunk; HRESULT hr = m_pBuffer->GetCurrentPosition( &iCursor, &iJunk ); - ASSERT_M( SUCCEEDED(hr), hr_ssprintf(hr, "GetCurrentPosition") ); + +#ifndef _XBOX + if( hr == DSERR_BUFFERLOST ) + { + m_pBuffer->Restore(); + hr = m_pBuffer->GetCurrentPosition( &iCursor, &iJunk ); + } + if( hr != DS_OK ) + { + LOG->Warn( hr_ssprintf(hr, "DirectSound::GetPosition failed") ); + iCursor = 0; + } +#endif /* This happens occasionally on "Realtek AC97 Audio". */ if( (int) iCursor == m_iBufferSize )