2 * PROJECT: ReactOS Sound System "MME Buddy" Library
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: lib/drivers/sound/mmebuddy/wave/format.c
6 * PURPOSE: Queries and sets wave device format (sample rate, etc.)
8 * PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org)
14 QueryWaveDeviceFormatSupport(
15 IN PSOUND_DEVICE SoundDevice
,
16 IN LPWAVEFORMATEX Format
,
20 MMDEVICE_TYPE DeviceType
;
21 PMMFUNCTION_TABLE FunctionTable
;
23 SND_TRACE(L
"Querying wave format support\n");
25 VALIDATE_MMSYS_PARAMETER( IsValidSoundDevice(SoundDevice
) );
26 VALIDATE_MMSYS_PARAMETER( Format
);
27 VALIDATE_MMSYS_PARAMETER( FormatSize
>= sizeof(WAVEFORMATEX
) );
29 Result
= GetSoundDeviceType(SoundDevice
, &DeviceType
);
30 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
32 /* Ensure we have a wave device (TODO: check if this applies to wavein as well) */
33 VALIDATE_MMSYS_PARAMETER( IS_WAVE_DEVICE_TYPE(DeviceType
) );
35 /* Obtain the function table */
36 Result
= GetSoundDeviceFunctionTable(SoundDevice
, &FunctionTable
);
37 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
39 if ( ! MMSUCCESS(Result
) )
40 return TranslateInternalMmResult(Result
);
42 if ( ! FunctionTable
->QueryWaveFormatSupport
)
43 return MMSYSERR_NOTSUPPORTED
;
45 return FunctionTable
->QueryWaveFormatSupport(SoundDevice
, Format
, FormatSize
);
50 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance
,
52 IN LPWAVEFORMATEX Format
,
56 MMDEVICE_TYPE DeviceType
;
57 PMMFUNCTION_TABLE FunctionTable
;
58 PSOUND_DEVICE SoundDevice
;
60 SND_TRACE(L
"Setting wave format\n");
62 VALIDATE_MMSYS_PARAMETER( IsValidSoundDeviceInstance(SoundDeviceInstance
) );
64 Result
= GetSoundDeviceFromInstance(SoundDeviceInstance
, &SoundDevice
);
65 if ( ! MMSUCCESS(Result
) )
66 return TranslateInternalMmResult(Result
);
68 Result
= GetSoundDeviceType(SoundDevice
, &DeviceType
);
69 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
70 if (DeviceType
== WAVE_IN_DEVICE_TYPE
|| DeviceType
== WAVE_OUT_DEVICE_TYPE
)
72 VALIDATE_MMSYS_PARAMETER( Format
);
73 VALIDATE_MMSYS_PARAMETER( FormatSize
>= sizeof(WAVEFORMATEX
) );
76 /* Ensure we have a wave device (TODO: check if this applies to wavein as well) */
77 VALIDATE_MMSYS_PARAMETER( IS_WAVE_DEVICE_TYPE(DeviceType
) || IS_MIDI_DEVICE_TYPE(DeviceType
) || IS_MIXER_DEVICE_TYPE(DeviceType
));
79 /* Obtain the function table */
80 Result
= GetSoundDeviceFunctionTable(SoundDevice
, &FunctionTable
);
81 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
83 if ( ! MMSUCCESS(Result
) )
84 return TranslateInternalMmResult(Result
);
86 if ( ! FunctionTable
->SetWaveFormat
)
87 return MMSYSERR_NOTSUPPORTED
;
89 return FunctionTable
->SetWaveFormat(SoundDeviceInstance
, DeviceId
, Format
, FormatSize
);