ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mmebuddy.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.