From 3e07d5777fefac35c4fda28cef2efe21d00002c4 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 17 Jul 2009 09:24:11 +0000 Subject: [PATCH] - Don't hardcode the sound kernel buffersize and maximum buffer count and make it possible to override it because kernel streaming pins have specific frame size requirements. - See KSALLOCATOR_FRAMING struct svn path=/trunk/; revision=41996 --- .../lib/drivers/sound/mmebuddy/deviceinstance.c | 12 ++++++++++++ .../lib/drivers/sound/mmebuddy/wave/streaming.c | 16 ++++------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/reactos/lib/drivers/sound/mmebuddy/deviceinstance.c b/reactos/lib/drivers/sound/mmebuddy/deviceinstance.c index cbfa56a521c..8646e55e81a 100644 --- a/reactos/lib/drivers/sound/mmebuddy/deviceinstance.c +++ b/reactos/lib/drivers/sound/mmebuddy/deviceinstance.c @@ -13,6 +13,13 @@ #include #include +/* + Restrain ourselves from flooding the kernel device! +*/ + +#define SOUND_KERNEL_BUFFER_COUNT 10 +#define SOUND_KERNEL_BUFFER_SIZE 16384 + MMRESULT AllocateSoundDeviceInstance( OUT PSOUND_DEVICE_INSTANCE* SoundDeviceInstance) @@ -27,6 +34,11 @@ AllocateSoundDeviceInstance( if ( ! NewInstance ) return MMSYSERR_NOMEM; + /* Use default frame size */ + NewInstance->FrameSize = SOUND_KERNEL_BUFFER_SIZE; + /* Use default buffer count */ + NewInstance->BufferCount = SOUND_KERNEL_BUFFER_COUNT; + /* Provide the caller with the new instance pointer */ *SoundDeviceInstance = NewInstance; diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c index ea4c4b5b106..147c301755e 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c @@ -16,14 +16,6 @@ #include -/* - Restrain ourselves from flooding the kernel device! -*/ - -#define SOUND_KERNEL_BUFFER_COUNT 10 -#define SOUND_KERNEL_BUFFER_SIZE 16384 - - /* DoWaveStreaming Check if there is streaming to be done, and if so, do it. @@ -52,7 +44,7 @@ DoWaveStreaming( SND_ASSERT( FunctionTable->CommitWaveBuffer ); /* No point in doing anything if no resources available to use */ - if ( SoundDeviceInstance->OutstandingBuffers >= SOUND_KERNEL_BUFFER_COUNT ) + if ( SoundDeviceInstance->OutstandingBuffers >= SoundDeviceInstance->BufferCount ) { SND_TRACE(L"DoWaveStreaming: No available buffers to stream with - doing nothing\n"); return; @@ -67,7 +59,7 @@ DoWaveStreaming( return; } - while ( ( SoundDeviceInstance->OutstandingBuffers < SOUND_KERNEL_BUFFER_COUNT ) && + while ( ( SoundDeviceInstance->OutstandingBuffers < SoundDeviceInstance->BufferCount ) && ( Header ) ) { HeaderExtension = (PWAVEHDR_EXTENSION) Header->reserved; @@ -98,8 +90,8 @@ DoWaveStreaming( BytesRemaining = Header->dwBufferLength - HeaderExtension->BytesCommitted; /* We can commit anything up to the buffer size limit */ - BytesToCommit = BytesRemaining > SOUND_KERNEL_BUFFER_SIZE ? - SOUND_KERNEL_BUFFER_SIZE : + BytesToCommit = BytesRemaining > SoundDeviceInstance->FrameSize ? + SoundDeviceInstance->FrameSize : BytesRemaining; /* Should always have something to commit by this point */