DSERR_BUFFERLOST handling in DSoundBuf::GetPosition
This commit is contained in:
@@ -592,7 +592,19 @@ int64_t DSoundBuf::GetPosition() const
|
|||||||
{
|
{
|
||||||
DWORD iCursor, iJunk;
|
DWORD iCursor, iJunk;
|
||||||
HRESULT hr = m_pBuffer->GetCurrentPosition( &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". */
|
/* This happens occasionally on "Realtek AC97 Audio". */
|
||||||
if( (int) iCursor == m_iBufferSize )
|
if( (int) iCursor == m_iBufferSize )
|
||||||
|
|||||||
Reference in New Issue
Block a user