[MMEBUDDY]

- Hackfix corruption of audio buffer list which made the playback thread spin forever on an already played buffer.
- Tested with Winamp / VLC / mplay32 with Vbox 3.1.2

svn path=/trunk/; revision=45360
This commit is contained in:
Johannes Anderwald 2010-01-31 19:09:30 +00:00
parent 2afb0124d2
commit 6c11399f0a
2 changed files with 13 additions and 4 deletions

View file

@ -248,10 +248,18 @@ EnqueueWaveHeader(
{
/* There are already queued headers - make this one the tail */
SND_TRACE(L"Enqueued next wave header\n");
SoundDeviceInstance->TailWaveHeader->lpNext = WaveHeader;
SoundDeviceInstance->TailWaveHeader = WaveHeader;
DoWaveStreaming(SoundDeviceInstance);
/* FIXME - Make sure that the buffer has not already been added to the list */
if ( SoundDeviceInstance->TailWaveHeader != WaveHeader )
{
SND_ASSERT(SoundDeviceInstance->TailWaveHeader != WaveHeader);
SoundDeviceInstance->TailWaveHeader->lpNext = WaveHeader;
SoundDeviceInstance->TailWaveHeader = WaveHeader;
DUMP_WAVEHDR_QUEUE(SoundDeviceInstance);
DoWaveStreaming(SoundDeviceInstance);
}
}
DUMP_WAVEHDR_QUEUE(SoundDeviceInstance);

View file

@ -77,6 +77,7 @@ DoWaveStreaming(
{
{
/* Move on to the next header */
SND_ASSERT(Header != Header->lpNext);
Header = Header->lpNext;
}
}
@ -209,9 +210,9 @@ CompleteIO(
}
else
{
SND_TRACE(L"%d/%d bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength);
/* Partially completed */
HdrExtension->BytesCompleted += dwNumberOfBytesTransferred;
SND_TRACE(L"%d/%d bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength);
break;
}