DSERR_BUFFERLOST handling in DSoundBuf::GetPosition

This commit is contained in:
Glenn Maynard
2006-10-04 02:33:20 +00:00
parent 2b8a7f4a14
commit e130d73f88
+13 -1
View File
@@ -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 )