Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmmebuddy.h
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Sound System "MME Buddy" Library 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: include/reactos/libs/sound/mmebuddy.h 00005 * 00006 * PURPOSE: Header for the "MME Buddy" helper library (located in 00007 * lib/drivers/sound/mmebuddy) 00008 * 00009 * PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org) 00010 * 00011 * HISTORY: 4 July 2008 - Created 00012 * 31 Dec 2008 - Split off NT4-specific code into a separate library 00013 * 00014 * NOTES: MME Buddy was the best name I could come up with... 00015 * The structures etc. here should be treated as internal to the 00016 * library so should not be directly accessed elsewhere. Perhaps they 00017 * can be moved to an internal header? 00018 */ 00019 00020 #ifndef ROS_AUDIO_MMEBUDDY_H 00021 #define ROS_AUDIO_MMEBUDDY_H 00022 00023 /* 00024 Hacky debug macro 00025 */ 00026 00027 #define POPUP(...) \ 00028 { \ 00029 WCHAR dbg_popup_msg[1024], dbg_popup_title[256]; \ 00030 wsprintf(dbg_popup_title, L"%hS(%d)", __FILE__, __LINE__); \ 00031 wsprintf(dbg_popup_msg, __VA_ARGS__); \ 00032 MessageBox(0, dbg_popup_msg, dbg_popup_title, MB_OK | MB_TASKMODAL); \ 00033 } 00034 00035 #ifndef NDEBUG 00036 #define SND_ERR(...) \ 00037 { \ 00038 WCHAR dbg_popup_msg[1024]; \ 00039 wsprintf(dbg_popup_msg, __VA_ARGS__); \ 00040 OutputDebugString(dbg_popup_msg); \ 00041 } 00042 #define SND_WARN(...) \ 00043 { \ 00044 WCHAR dbg_popup_msg[1024]; \ 00045 wsprintf(dbg_popup_msg, __VA_ARGS__); \ 00046 OutputDebugString(dbg_popup_msg); \ 00047 } 00048 #define SND_TRACE(...) \ 00049 { \ 00050 WCHAR dbg_popup_msg[1024]; \ 00051 wsprintf(dbg_popup_msg, __VA_ARGS__); \ 00052 OutputDebugString(dbg_popup_msg); \ 00053 } 00054 00055 #define SND_ASSERT(condition) \ 00056 { \ 00057 if ( ! ( condition ) ) \ 00058 { \ 00059 SND_ERR(L"ASSERT FAILED: %hS File %hS Line %u\n", #condition, __FILE__, __LINE__); \ 00060 POPUP(L"ASSERT FAILED: %hS\n", #condition); \ 00061 ExitProcess(1); \ 00062 } \ 00063 } 00064 00065 #define DUMP_WAVEHDR_QUEUE(sound_device_instance) \ 00066 { \ 00067 PWAVEHDR CurrDumpHdr = sound_device_instance->HeadWaveHeader; \ 00068 SND_TRACE(L"-- Current wave header list --\n"); \ 00069 while ( CurrDumpHdr ) \ 00070 { \ 00071 SND_TRACE(L"%x | %d bytes | flags: %x\n", CurrDumpHdr, \ 00072 CurrDumpHdr->dwBufferLength, \ 00073 CurrDumpHdr->dwFlags); \ 00074 CurrDumpHdr = CurrDumpHdr->lpNext; \ 00075 } \ 00076 } 00077 00078 #else 00079 #define SND_ERR(...) do {} while ( 0 ) 00080 #define SND_WARN(...) do {} while ( 0 ) 00081 #define SND_TRACE(...) do {} while ( 0 ) 00082 #define SND_ASSERT(condition) do {(void)(condition);} while ( 0 ) 00083 #define DUMP_WAVEHDR_QUEUE(condition) do {} while ( 0 ) 00084 #endif 00085 00086 /* 00087 Some memory allocation helper macros 00088 */ 00089 00090 #define AllocateStruct(thing) \ 00091 (thing*) AllocateMemory(sizeof(thing)) 00092 00093 #define StringLengthToBytes(chartype, string_length) \ 00094 ( ( string_length + 1 ) * sizeof(chartype) ) 00095 00096 #define AllocateWideString(string_length) \ 00097 (PWSTR) AllocateMemory(StringLengthToBytes(WCHAR, string_length)) 00098 00099 #define ZeroWideString(string) \ 00100 ZeroMemory(string, StringLengthToBytes(WCHAR, wcslen(string))) 00101 00102 #define CopyWideString(dest, source) \ 00103 CopyMemory(dest, source, StringLengthToBytes(WCHAR, wcslen(source))) 00104 00105 00106 /* 00107 Helps find the minimum/maximum of two values 00108 */ 00109 00110 #define MinimumOf(value_a, value_b) \ 00111 ( value_a < value_b ? value_a : value_b ) 00112 00113 #define MaximumOf(value_a, value_b) \ 00114 ( value_a > value_b ? value_a : value_b ) 00115 00116 00117 /* 00118 Convert a device type into a zero-based array index 00119 */ 00120 00121 #define SOUND_DEVICE_TYPE_TO_INDEX(x) \ 00122 ( x - MIN_SOUND_DEVICE_TYPE ) 00123 00124 #define INDEX_TO_SOUND_DEVICE_TYPE(x) \ 00125 ( x + MIN_SOUND_DEVICE_TYPE ) 00126 00127 00128 /* 00129 Validation 00130 */ 00131 00132 #define IsValidSoundDeviceType IS_VALID_SOUND_DEVICE_TYPE 00133 00134 #define VALIDATE_MMSYS_PARAMETER(parameter_condition) \ 00135 { \ 00136 if ( ! (parameter_condition) ) \ 00137 { \ 00138 SND_ERR(L"FAILED parameter check: %hS at File %S Line %lu\n", #parameter_condition, __FILE__, __LINE__); \ 00139 return MMSYSERR_INVALPARAM; \ 00140 } \ 00141 } 00142 00143 #define MMSUCCESS(result) \ 00144 ( result == MMSYSERR_NOERROR ) 00145 00146 00147 /* 00148 Types and Structures 00149 */ 00150 00151 typedef UCHAR MMDEVICE_TYPE, *PMMDEVICE_TYPE; 00152 struct _SOUND_DEVICE; 00153 struct _SOUND_DEVICE_INSTANCE; 00154 00155 00156 #define DEFINE_GETCAPS_FUNCTYPE(func_typename, caps_type) \ 00157 typedef MMRESULT (*func_typename)( \ 00158 IN struct _SOUND_DEVICE* SoundDevice, \ 00159 IN DWORD DeviceId, \ 00160 OUT caps_type Capabilities, \ 00161 IN DWORD CapabilitiesSize); 00162 00163 /* This one is for those of us who don't care */ 00164 DEFINE_GETCAPS_FUNCTYPE(MMGETCAPS_FUNC, PVOID); 00165 00166 /* These are for those of us that do */ 00167 DEFINE_GETCAPS_FUNCTYPE(MMGETWAVEOUTCAPS_FUNC, LPWAVEOUTCAPS); 00168 DEFINE_GETCAPS_FUNCTYPE(MMGETWAVEINCAPS_FUNC, LPWAVEINCAPS ); 00169 DEFINE_GETCAPS_FUNCTYPE(MMGETMIDIOUTCAPS_FUNC, LPMIDIOUTCAPS); 00170 DEFINE_GETCAPS_FUNCTYPE(MMGETMIDIINCAPS_FUNC, LPMIDIINCAPS ); 00171 00172 struct _SOUND_DEVICE; 00173 struct _SOUND_DEVICE_INSTANCE; 00174 00175 00176 /* 00177 By extending the OVERLAPPED structure, it becomes possible to provide the 00178 I/O completion routines with additional information. 00179 */ 00180 00181 typedef struct _SOUND_OVERLAPPED 00182 { 00183 OVERLAPPED Standard; 00184 struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance; 00185 PWAVEHDR Header; 00186 BOOL PerformCompletion; 00187 00188 LPOVERLAPPED_COMPLETION_ROUTINE OriginalCompletionRoutine; 00189 PVOID CompletionContext; 00190 00191 } SOUND_OVERLAPPED, *PSOUND_OVERLAPPED; 00192 00193 typedef MMRESULT (*WAVE_COMMIT_FUNC)( 00194 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00195 IN PVOID OffsetPtr, 00196 IN DWORD Bytes, 00197 IN PSOUND_OVERLAPPED Overlap, 00198 IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine); 00199 00200 typedef MMRESULT (*MMMIXERQUERY_FUNC) ( 00201 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00202 IN DWORD DeviceId, 00203 IN UINT uMsg, 00204 IN LPVOID Parameter, 00205 IN DWORD Flags); 00206 00207 typedef MMRESULT (*MMWAVEQUERYFORMATSUPPORT_FUNC)( 00208 IN struct _SOUND_DEVICE* Device, 00209 IN PWAVEFORMATEX WaveFormat, 00210 IN DWORD WaveFormatSize); 00211 00212 typedef MMRESULT (*MMWAVESETFORMAT_FUNC)( 00213 IN struct _SOUND_DEVICE_INSTANCE* Instance, 00214 IN DWORD DeviceId, 00215 IN PWAVEFORMATEX WaveFormat, 00216 IN DWORD WaveFormatSize); 00217 00218 typedef MMRESULT (*MMOPEN_FUNC)( 00219 IN struct _SOUND_DEVICE* SoundDevice, 00220 OUT PVOID* Handle); 00221 00222 typedef MMRESULT (*MMCLOSE_FUNC)( 00223 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00224 IN PVOID Handle); /* not sure about this */ 00225 00226 typedef MMRESULT (*MMWAVEHEADER_FUNC)( 00227 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00228 IN PWAVEHDR WaveHeader); 00229 00230 typedef MMRESULT (*MMBUFFER_FUNC)( 00231 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00232 IN PVOID Buffer, 00233 IN DWORD Length); 00234 00235 typedef MMRESULT(*MMGETPOS_FUNC)( 00236 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00237 IN MMTIME* Time); 00238 00239 00240 typedef MMRESULT(*MMSETSTATE_FUNC)( 00241 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00242 IN BOOL bStart); 00243 00244 00245 typedef MMRESULT(*MMQUERYDEVICEINTERFACESTRING_FUNC)( 00246 IN MMDEVICE_TYPE DeviceType, 00247 IN DWORD DeviceId, 00248 IN LPWSTR Interface, 00249 IN DWORD InterfaceLength, 00250 OUT DWORD * InterfaceSize); 00251 00252 typedef MMRESULT(*MMRESETSTREAM_FUNC)( 00253 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00254 IN MMDEVICE_TYPE DeviceType, 00255 IN BOOLEAN bStartReset); 00256 00257 typedef struct _MMFUNCTION_TABLE 00258 { 00259 union 00260 { 00261 MMGETCAPS_FUNC GetCapabilities; 00262 MMGETWAVEOUTCAPS_FUNC GetWaveOutCapabilities; 00263 MMGETWAVEINCAPS_FUNC GetWaveInCapabilities; 00264 MMGETMIDIOUTCAPS_FUNC GetMidiOutCapabilities; 00265 MMGETMIDIINCAPS_FUNC GetMidiInCapabilities; 00266 }; 00267 00268 MMOPEN_FUNC Open; 00269 MMCLOSE_FUNC Close; 00270 00271 MMWAVEQUERYFORMATSUPPORT_FUNC QueryWaveFormatSupport; 00272 MMWAVESETFORMAT_FUNC SetWaveFormat; 00273 00274 MMMIXERQUERY_FUNC QueryMixerInfo; 00275 00276 WAVE_COMMIT_FUNC CommitWaveBuffer; 00277 00278 MMGETPOS_FUNC GetPos; 00279 MMSETSTATE_FUNC SetState; 00280 MMQUERYDEVICEINTERFACESTRING_FUNC GetDeviceInterfaceString; 00281 MMRESETSTREAM_FUNC ResetStream; 00282 00283 // Redundant 00284 //MMWAVEHEADER_FUNC PrepareWaveHeader; 00285 //MMWAVEHEADER_FUNC UnprepareWaveHeader; 00286 //MMWAVEHEADER_FUNC WriteWaveHeader; 00287 00288 //MMWAVEHEADER_FUNC SubmitWaveHeaderToDevice; 00289 //MMBUFFER_FUNC CompleteBuffer; 00290 } MMFUNCTION_TABLE, *PMMFUNCTION_TABLE; 00291 00292 00293 00294 typedef MMRESULT (*SOUND_THREAD_REQUEST_HANDLER)( 00295 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, 00296 IN PVOID Parameter); 00297 00298 typedef struct _SOUND_THREAD 00299 { 00300 HANDLE Handle; 00301 BOOL Running; 00302 00303 struct 00304 { 00305 HANDLE Ready; 00306 HANDLE Request; 00307 HANDLE Done; 00308 } Events; 00309 00310 struct 00311 { 00312 SOUND_THREAD_REQUEST_HANDLER Handler; 00313 struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance; 00314 PVOID Parameter; 00315 MMRESULT Result; 00316 } Request; 00317 } SOUND_THREAD, *PSOUND_THREAD; 00318 00319 typedef struct _SOUND_DEVICE 00320 { 00321 struct _SOUND_DEVICE* Next; 00322 struct _SOUND_DEVICE_INSTANCE* HeadInstance; 00323 struct _SOUND_DEVICE_INSTANCE* TailInstance; 00324 MMDEVICE_TYPE Type; 00325 PVOID Identifier; /* Path for NT4 drivers */ 00326 /*PWSTR Path;*/ 00327 MMFUNCTION_TABLE FunctionTable; 00328 } SOUND_DEVICE, *PSOUND_DEVICE; 00329 00330 typedef struct _SOUND_DEVICE_INSTANCE 00331 { 00332 struct _SOUND_DEVICE_INSTANCE* Next; 00333 struct _SOUND_DEVICE* Device; 00334 PVOID Handle; 00335 struct _SOUND_THREAD* Thread; 00336 00337 /* Stuff generously donated to us from WinMM */ 00338 struct 00339 { 00340 HDRVR Handle; 00341 DWORD Flags; 00342 DWORD_PTR ClientCallback; 00343 DWORD_PTR ClientCallbackInstanceData; 00344 } WinMM; 00345 00346 /* DO NOT TOUCH THESE OUTSIDE OF THE SOUND THREAD */ 00347 00348 union 00349 { 00350 PWAVEHDR HeadWaveHeader; 00351 }; 00352 00353 union 00354 { 00355 PWAVEHDR TailWaveHeader; 00356 }; 00357 00358 PWAVEHDR WaveLoopStart; 00359 //PWAVEHDR CurrentWaveHeader; 00360 DWORD OutstandingBuffers; 00361 DWORD LoopsRemaining; 00362 DWORD FrameSize; 00363 DWORD BufferCount; 00364 WAVEFORMATEX WaveFormatEx; 00365 HANDLE hNotifyEvent; 00366 HANDLE hStopEvent; 00367 HANDLE hResetEvent; 00368 BOOL ResetInProgress; 00369 BOOL bPaused; 00370 } SOUND_DEVICE_INSTANCE, *PSOUND_DEVICE_INSTANCE; 00371 00372 /* This lives in WAVEHDR.reserved */ 00373 typedef struct _WAVEHDR_EXTENSION 00374 { 00375 DWORD BytesCommitted; 00376 DWORD BytesCompleted; 00377 } WAVEHDR_EXTENSION, *PWAVEHDR_EXTENSION; 00378 00379 00380 /* 00381 reentrancy.c 00382 */ 00383 00384 MMRESULT 00385 InitEntrypointMutexes(VOID); 00386 00387 VOID 00388 CleanupEntrypointMutexes(VOID); 00389 00390 VOID 00391 AcquireEntrypointMutex( 00392 IN MMDEVICE_TYPE DeviceType); 00393 00394 VOID 00395 ReleaseEntrypointMutex( 00396 IN MMDEVICE_TYPE DeviceType); 00397 00398 00399 /* 00400 mme.c 00401 */ 00402 00403 VOID 00404 NotifyMmeClient( 00405 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00406 IN UINT Message, 00407 IN DWORD_PTR Parameter); 00408 00409 MMRESULT 00410 MmeGetSoundDeviceCapabilities( 00411 IN MMDEVICE_TYPE DeviceType, 00412 IN DWORD DeviceId, 00413 IN PVOID Capabilities, 00414 IN DWORD CapabilitiesSize); 00415 00416 MMRESULT 00417 MmeOpenDevice( 00418 IN MMDEVICE_TYPE DeviceType, 00419 IN UINT DeviceId, 00420 IN LPWAVEOPENDESC OpenParameters, 00421 IN DWORD Flags, 00422 OUT DWORD_PTR* PrivateHandle); 00423 00424 MMRESULT 00425 MmeCloseDevice( 00426 IN DWORD_PTR PrivateHandle); 00427 00428 MMRESULT 00429 MmeGetPosition( 00430 IN MMDEVICE_TYPE DeviceType, 00431 IN DWORD DeviceId, 00432 IN DWORD_PTR PrivateHandle, 00433 IN MMTIME* Time, 00434 IN DWORD Size); 00435 00436 MMRESULT 00437 MmeGetDeviceInterfaceString( 00438 IN MMDEVICE_TYPE DeviceType, 00439 IN DWORD DeviceId, 00440 IN LPWSTR Interface, 00441 IN DWORD InterfaceLength, 00442 OUT DWORD * InterfaceSize); 00443 00444 00445 MMRESULT 00446 MmeSetState( 00447 IN DWORD_PTR PrivateHandle, 00448 IN BOOL bStart); 00449 00450 00451 #define MmePrepareWaveHeader(private_handle, header) \ 00452 PrepareWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header) 00453 00454 #define MmeUnprepareWaveHeader(private_handle, header) \ 00455 UnprepareWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header) 00456 00457 #define MmeWriteWaveHeader(private_handle, header) \ 00458 WriteWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header) 00459 00460 MMRESULT 00461 MmeResetWavePlayback( 00462 IN DWORD_PTR PrivateHandle); 00463 00464 00465 /* 00466 capabilities.c 00467 */ 00468 00469 MMRESULT 00470 GetSoundDeviceCapabilities( 00471 IN PSOUND_DEVICE SoundDevice, 00472 IN DWORD DeviceId, 00473 OUT PVOID Capabilities, 00474 IN DWORD CapabilitiesSize); 00475 00476 00477 /* 00478 devicelist.c 00479 */ 00480 00481 ULONG 00482 GetSoundDeviceCount( 00483 IN MMDEVICE_TYPE DeviceType); 00484 00485 BOOLEAN 00486 IsValidSoundDevice( 00487 IN PSOUND_DEVICE SoundDevice); 00488 00489 MMRESULT 00490 ListSoundDevice( 00491 IN MMDEVICE_TYPE DeviceType, 00492 IN PVOID Identifier OPTIONAL, 00493 OUT PSOUND_DEVICE* SoundDevice OPTIONAL); 00494 00495 MMRESULT 00496 UnlistSoundDevice( 00497 IN MMDEVICE_TYPE DeviceType, 00498 IN PSOUND_DEVICE SoundDevice); 00499 00500 MMRESULT 00501 UnlistSoundDevices( 00502 IN MMDEVICE_TYPE DeviceType); 00503 00504 VOID 00505 UnlistAllSoundDevices(VOID); 00506 00507 MMRESULT 00508 GetSoundDevice( 00509 IN MMDEVICE_TYPE DeviceType, 00510 IN DWORD DeviceIndex, 00511 OUT PSOUND_DEVICE* Device); 00512 00513 MMRESULT 00514 GetSoundDeviceIdentifier( 00515 IN PSOUND_DEVICE SoundDevice, 00516 OUT PVOID* Identifier); 00517 00518 MMRESULT 00519 GetSoundDeviceType( 00520 IN PSOUND_DEVICE SoundDevice, 00521 OUT PMMDEVICE_TYPE DeviceType); 00522 00523 00524 /* 00525 functiontable.c 00526 */ 00527 00528 MMRESULT 00529 SetSoundDeviceFunctionTable( 00530 IN PSOUND_DEVICE SoundDevice, 00531 IN PMMFUNCTION_TABLE FunctionTable); 00532 00533 MMRESULT 00534 GetSoundDeviceFunctionTable( 00535 IN PSOUND_DEVICE SoundDevice, 00536 OUT PMMFUNCTION_TABLE* FunctionTable); 00537 00538 00539 /* 00540 deviceinstance.c 00541 */ 00542 00543 BOOLEAN 00544 IsValidSoundDeviceInstance( 00545 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance); 00546 00547 MMRESULT 00548 CreateSoundDeviceInstance( 00549 IN PSOUND_DEVICE SoundDevice, 00550 OUT PSOUND_DEVICE_INSTANCE* SoundDeviceInstance); 00551 00552 MMRESULT 00553 DestroySoundDeviceInstance( 00554 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance); 00555 00556 MMRESULT 00557 DestroyAllSoundDeviceInstances( 00558 IN PSOUND_DEVICE SoundDevice); 00559 00560 MMRESULT 00561 GetSoundDeviceFromInstance( 00562 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00563 OUT PSOUND_DEVICE* SoundDevice); 00564 00565 MMRESULT 00566 GetSoundDeviceInstanceHandle( 00567 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00568 OUT PVOID* Handle); 00569 00570 MMRESULT 00571 SetSoundDeviceInstanceMmeData( 00572 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00573 IN HDRVR MmeHandle, 00574 IN DWORD_PTR ClientCallback, 00575 IN DWORD_PTR ClientCallbackData, 00576 IN DWORD Flags); 00577 00578 00579 /* 00580 thread.c 00581 */ 00582 00583 MMRESULT 00584 CreateSoundThread( 00585 OUT PSOUND_THREAD* Thread); 00586 00587 MMRESULT 00588 DestroySoundThread( 00589 IN PSOUND_THREAD Thread); 00590 00591 MMRESULT 00592 CallSoundThread( 00593 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00594 IN SOUND_THREAD_REQUEST_HANDLER RequestHandler, 00595 IN PVOID Parameter OPTIONAL); 00596 00597 00598 /* 00599 utility.c 00600 */ 00601 00602 PVOID 00603 AllocateMemory( 00604 IN UINT Size); 00605 00606 VOID 00607 FreeMemory( 00608 IN PVOID Pointer); 00609 00610 UINT 00611 GetMemoryAllocationCount(VOID); 00612 00613 UINT 00614 GetDigitCount( 00615 IN UINT Number); 00616 00617 MMRESULT 00618 Win32ErrorToMmResult( 00619 IN UINT ErrorCode); 00620 00621 MMRESULT 00622 TranslateInternalMmResult( 00623 IN MMRESULT Result); 00624 00625 00626 /* 00627 wave/format.c 00628 */ 00629 00630 MMRESULT 00631 QueryWaveDeviceFormatSupport( 00632 IN PSOUND_DEVICE SoundDevice, 00633 IN LPWAVEFORMATEX Format, 00634 IN DWORD FormatSize); 00635 00636 MMRESULT 00637 SetWaveDeviceFormat( 00638 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00639 IN DWORD DeviceId, 00640 IN LPWAVEFORMATEX Format, 00641 IN DWORD FormatSize); 00642 00643 00644 /* 00645 wave/header.c 00646 */ 00647 00648 MMRESULT 00649 EnqueueWaveHeader( 00650 PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00651 IN PVOID Parameter); 00652 00653 VOID 00654 CompleteWaveHeader( 00655 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00656 IN PWAVEHDR Header); 00657 00658 MMRESULT 00659 PrepareWaveHeader( 00660 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00661 IN PWAVEHDR Header); 00662 00663 MMRESULT 00664 UnprepareWaveHeader( 00665 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00666 IN PWAVEHDR Header); 00667 00668 MMRESULT 00669 WriteWaveHeader( 00670 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00671 IN PWAVEHDR Header); 00672 00673 00674 /* 00675 wave/streaming.c 00676 */ 00677 00678 VOID 00679 DoWaveStreaming( 00680 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance); 00681 00682 VOID CALLBACK 00683 CompleteIO( 00684 IN DWORD dwErrorCode, 00685 IN DWORD dwNumberOfBytesTransferred, 00686 IN LPOVERLAPPED lpOverlapped); 00687 00688 MMRESULT 00689 CommitWaveHeaderToKernelDevice( 00690 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00691 IN PWAVEHDR Header, 00692 IN WAVE_COMMIT_FUNC CommitFunction); 00693 00694 MMRESULT 00695 WriteFileEx_Committer( 00696 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, 00697 IN PVOID OffsetPtr, 00698 IN DWORD Length, 00699 IN PSOUND_OVERLAPPED Overlap, 00700 IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine); 00701 00702 MMRESULT 00703 StopStreaming( 00704 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance); 00705 00706 VOID 00707 InitiateSoundStreaming( 00708 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance); 00709 00710 /* 00711 kernel.c 00712 */ 00713 00714 MMRESULT 00715 OpenKernelSoundDeviceByName( 00716 IN PWSTR DevicePath, 00717 IN BOOLEAN ReadOnly, 00718 OUT PHANDLE Handle); 00719 00720 MMRESULT 00721 OpenKernelSoundDevice( 00722 IN PSOUND_DEVICE SoundDevice, 00723 IN BOOLEAN ReadOnly, 00724 OUT PHANDLE Handle); 00725 00726 MMRESULT 00727 CloseKernelSoundDevice( 00728 IN HANDLE Handle); 00729 00730 MMRESULT 00731 SyncOverlappedDeviceIoControl( 00732 IN HANDLE SoundDeviceInstance, 00733 IN DWORD IoControlCode, 00734 IN LPVOID InBuffer, 00735 IN DWORD InBufferSize, 00736 OUT LPVOID OutBuffer, 00737 IN DWORD OutBufferSize, 00738 OUT LPDWORD BytesTransferred OPTIONAL); 00739 00740 00741 #endif Generated on Sun May 27 2012 04:33:16 for ReactOS by
1.7.6.1
|