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)
19 QueryWaveDeviceFormatSupport(
20 IN PSOUND_DEVICE SoundDevice
,
21 IN LPWAVEFORMATEX Format
,
25 MMDEVICE_TYPE DeviceType
;
26 PMMFUNCTION_TABLE FunctionTable
;
28 SND_TRACE(L
"Querying wave format support\n");
30 VALIDATE_MMSYS_PARAMETER( IsValidSoundDevice(SoundDevice
) );
31 VALIDATE_MMSYS_PARAMETER( Format
);
32 VALIDATE_MMSYS_PARAMETER( FormatSize
>= sizeof(WAVEFORMATEX
) );
34 Result
= GetSoundDeviceType(SoundDevice
, &DeviceType
);
35 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
37 /* Ensure we have a wave device (TODO: check if this applies to wavein as well) */
38 VALIDATE_MMSYS_PARAMETER( IS_WAVE_DEVICE_TYPE(DeviceType
) );
40 /* Obtain the function table */
41 Result
= GetSoundDeviceFunctionTable(SoundDevice
, &FunctionTable
);
42 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
44 if ( ! MMSUCCESS(Result
) )
45 return TranslateInternalMmResult(Result
);
47 if ( ! FunctionTable
->QueryWaveFormatSupport
)
48 return MMSYSERR_NOTSUPPORTED
;
50 return FunctionTable
->QueryWaveFormatSupport(SoundDevice
, Format
, FormatSize
);
55 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance
,
57 IN LPWAVEFORMATEX Format
,
61 MMDEVICE_TYPE DeviceType
;
62 PMMFUNCTION_TABLE FunctionTable
;
63 PSOUND_DEVICE SoundDevice
;
65 SND_TRACE(L
"Setting wave format\n");
67 VALIDATE_MMSYS_PARAMETER( IsValidSoundDeviceInstance(SoundDeviceInstance
) );
68 VALIDATE_MMSYS_PARAMETER( Format
);
69 VALIDATE_MMSYS_PARAMETER( FormatSize
>= sizeof(WAVEFORMATEX
) );
71 Result
= GetSoundDeviceFromInstance(SoundDeviceInstance
, &SoundDevice
);
72 if ( ! MMSUCCESS(Result
) )
73 return TranslateInternalMmResult(Result
);
75 Result
= GetSoundDeviceType(SoundDevice
, &DeviceType
);
76 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
78 /* Ensure we have a wave device (TODO: check if this applies to wavein as well) */
79 VALIDATE_MMSYS_PARAMETER( IS_WAVE_DEVICE_TYPE(DeviceType
) );
81 /* Obtain the function table */
82 Result
= GetSoundDeviceFunctionTable(SoundDevice
, &FunctionTable
);
83 SND_ASSERT( Result
== MMSYSERR_NOERROR
);
85 if ( ! MMSUCCESS(Result
) )
86 return TranslateInternalMmResult(Result
);
88 if ( ! FunctionTable
->SetWaveFormat
)
89 return MMSYSERR_NOTSUPPORTED
;
91 return FunctionTable
->SetWaveFormat(SoundDeviceInstance
, DeviceId
, Format
, FormatSize
);