Additional streaming behaviour fix for XAudio2 driver

This commit is contained in:
kaetemi 2014-02-17 00:20:29 +01:00
parent 5ec390b0d6
commit 76ce7523ff

View file

@ -397,30 +397,16 @@ void CSourceXAudio2::submitStreamingBuffer(IBuffer *buffer)
// nldebug(NLSOUND_XAUDIO2_PREFIX "submitStreamingBuffer"); // nldebug(NLSOUND_XAUDIO2_PREFIX "submitStreamingBuffer");
nlassert(_BufferStreaming); nlassert(_BufferStreaming);
IBuffer::TBufferFormat bufferFormat;
uint8 channels;
uint8 bitsPerSample;
uint32 frequency;
buffer->getFormat(bufferFormat, channels, bitsPerSample, frequency);
// allow to change the format if not playing // allow to change the format if not playing
if (!_IsPlaying) if (!_IsPlaying)
{ {
if (!_SourceVoice) IBuffer::TBufferFormat bufferFormat;
{ uint8 channels;
// if no source yet, prepare the format uint8 bitsPerSample;
preparePlay(bufferFormat, channels, bitsPerSample, frequency); uint32 frequency;
} buffer->getFormat(bufferFormat, channels, bitsPerSample, frequency);
else preparePlay(bufferFormat, channels, bitsPerSample, frequency);
{
XAUDIO2_VOICE_STATE voice_state;
_SourceVoice->GetState(&voice_state);
// if no buffers queued, prepare the format
if (!voice_state.BuffersQueued)
{
preparePlay(bufferFormat, channels, bitsPerSample, frequency);
}
}
} }
submitBuffer(static_cast<CBufferXAudio2 *>(buffer)); submitBuffer(static_cast<CBufferXAudio2 *>(buffer));
@ -636,6 +622,7 @@ bool CSourceXAudio2::play()
// preparePlay already called, // preparePlay already called,
// stop already called before going into buffer streaming // stop already called before going into buffer streaming
nlassert(!_IsPlaying); nlassert(!_IsPlaying);
nlassert(_SourceVoice);
_PlayStart = CTime::getLocalTime(); _PlayStart = CTime::getLocalTime();
if (SUCCEEDED(_SourceVoice->Start(0))) _IsPlaying = true; if (SUCCEEDED(_SourceVoice->Start(0))) _IsPlaying = true;
else nlwarning(NLSOUND_XAUDIO2_PREFIX "FAILED Play (_BufferStreaming)"); else nlwarning(NLSOUND_XAUDIO2_PREFIX "FAILED Play (_BufferStreaming)");