mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 19:26:32 +00:00
[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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user