HANDLE hStopEvent;
HANDLE hResetEvent;
BOOL ResetInProgress;
+ BOOL bPaused;
} SOUND_DEVICE_INSTANCE, *PSOUND_DEVICE_INSTANCE;
/* This lives in WAVEHDR.reserved */
StopStreaming(
IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
+VOID
+InitiateSoundStreaming(
+ IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
/*
kernel.c
PMMFUNCTION_TABLE FunctionTable;
PSOUND_DEVICE SoundDevice;
PSOUND_DEVICE_INSTANCE SoundDeviceInstance;
+ BOOL OldState;
VALIDATE_MMSYS_PARAMETER( PrivateHandle );
SoundDeviceInstance = (PSOUND_DEVICE_INSTANCE) PrivateHandle;
/* Try change state */
Result = FunctionTable->SetState(SoundDeviceInstance, bStart);
+ if ( MMSUCCESS(Result) )
+ {
+ /* Get old audio stream state */
+ OldState = SoundDeviceInstance->bPaused;
+
+ /* Store audio stream pause state */
+ SoundDeviceInstance->bPaused = !bStart;
+
+ if (SoundDeviceInstance->bPaused == FALSE && OldState == TRUE)
+ {
+ InitiateSoundStreaming(SoundDeviceInstance);
+ }
+ }
+
return Result;
}
SoundDeviceInstance->HeadWaveHeader = WaveHeader;
SoundDeviceInstance->TailWaveHeader = WaveHeader;
- DoWaveStreaming(SoundDeviceInstance);
+ /* Only do wave streaming when the stream has not been paused */
+ if (SoundDeviceInstance->bPaused == FALSE)
+ {
+ DoWaveStreaming(SoundDeviceInstance);
+ }
}
else
{
SoundDeviceInstance->TailWaveHeader = WaveHeader;
DUMP_WAVEHDR_QUEUE(SoundDeviceInstance);
- DoWaveStreaming(SoundDeviceInstance);
+ /* Only do wave streaming when the stream has not been paused */
+ if ( SoundDeviceInstance->bPaused == FALSE )
+ {
+ DoWaveStreaming(SoundDeviceInstance);
+ }
}
}
StopStreamingInSoundThread,
NULL);
}
+
+MMRESULT
+PerformWaveStreaming(
+ IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
+ IN PVOID Parameter)
+{
+ DoWaveStreaming(SoundDeviceInstance);
+
+ return MMSYSERR_NOERROR;
+}
+
+DWORD
+WINAPI
+WaveActivateSoundStreaming(
+ IN PVOID lpParameter)
+{
+ CallSoundThread((PSOUND_DEVICE_INSTANCE)lpParameter,
+ PerformWaveStreaming,
+ NULL);
+
+ ExitThread(0);
+}
+
+VOID
+InitiateSoundStreaming(
+ IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance)
+{
+ HANDLE hThread;
+
+ hThread = CreateThread(NULL, 0, WaveActivateSoundStreaming, (PVOID)SoundDeviceInstance, 0, NULL);
+
+ if (hThread != NULL)
+ CloseHandle(hThread);
+}