dbaad8ecff0da6cc01fa1915f1517bc03163ab23
[reactos.git] / reactos / lib / drivers / sound / mmebuddy / wave / header.c
1 /*
2 * PROJECT: ReactOS Sound System "MME Buddy" Library
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: lib/drivers/sound/mmebuddy/header.c
5 *
6 * PURPOSE: Wave header preparation routines
7 *
8 * PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org)
9 */
10
11 #include <windows.h>
12 #include <mmsystem.h>
13 #include <mmddk.h>
14 #include <ntddsnd.h>
15 #include <mmebuddy.h>
16
17 MMRESULT
18 PrepareWaveHeader(
19 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
20 IN PWAVEHDR Header)
21 {
22 MMRESULT Result;
23 PSOUND_DEVICE SoundDevice;
24 PMMFUNCTION_TABLE FunctionTable;
25
26 VALIDATE_MMSYS_PARAMETER( IsValidSoundDeviceInstance(SoundDeviceInstance) );
27 VALIDATE_MMSYS_PARAMETER( Header );
28
29 SND_TRACE(L"Preparing wave header\n");
30
31 Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
32 if ( ! MMSUCCESS(Result) )
33 return TranslateInternalMmResult(Result);
34
35 Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable);
36 if ( ! MMSUCCESS(Result) )
37 return TranslateInternalMmResult(Result);
38
39 if ( ! FunctionTable->PrepareWaveHeader )
40 return MMSYSERR_NOTSUPPORTED;
41
42 return FunctionTable->PrepareWaveHeader(SoundDeviceInstance, Header);
43 }
44
45 MMRESULT
46 UnprepareWaveHeader(
47 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
48 IN PWAVEHDR Header)
49 {
50 MMRESULT Result;
51 PSOUND_DEVICE SoundDevice;
52 PMMFUNCTION_TABLE FunctionTable;
53
54 VALIDATE_MMSYS_PARAMETER( IsValidSoundDeviceInstance(SoundDeviceInstance) );
55 VALIDATE_MMSYS_PARAMETER( Header );
56
57 SND_TRACE(L"Un-preparing wave header\n");
58
59 Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
60 if ( ! MMSUCCESS(Result) )
61 return TranslateInternalMmResult(Result);
62
63 Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable);
64 if ( ! MMSUCCESS(Result) )
65 return TranslateInternalMmResult(Result);
66
67 if ( ! FunctionTable->UnprepareWaveHeader )
68 return MMSYSERR_NOTSUPPORTED;
69
70 return FunctionTable->UnprepareWaveHeader(SoundDeviceInstance, Header);
71 }
72
73 MMRESULT
74 SubmitWaveHeader(
75 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
76 IN PWAVEHDR Header)
77 {
78 MMRESULT Result;
79 PSOUND_DEVICE SoundDevice;
80 PMMFUNCTION_TABLE FunctionTable;
81
82 VALIDATE_MMSYS_PARAMETER( IsValidSoundDeviceInstance(SoundDeviceInstance) );
83 VALIDATE_MMSYS_PARAMETER( Header );
84
85 SND_TRACE(L"Submitting wave header\n");
86
87 Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
88 if ( ! MMSUCCESS(Result) )
89 return TranslateInternalMmResult(Result);
90
91 Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable);
92 if ( ! MMSUCCESS(Result) )
93 return TranslateInternalMmResult(Result);
94
95 if ( ! FunctionTable->SubmitWaveHeader )
96 return MMSYSERR_NOTSUPPORTED;
97
98 return FunctionTable->SubmitWaveHeader(SoundDeviceInstance, Header);
99 }
100