ReactOS 0.4.15-dev-8235-gcd88a97
mixer.c File Reference
#include "sndvol32.h"
Include dependency graph for mixer.c:

Go to the source code of this file.

Macros

#define NO_MIXER_SELECTED   ((UINT)(~0))
 

Functions

static VOID ClearMixerCache (PSND_MIXER Mixer)
 
PSND_MIXER SndMixerCreate (HWND hWndNotification, UINT MixerId)
 
VOID SndMixerDestroy (PSND_MIXER Mixer)
 
VOID SndMixerClose (PSND_MIXER Mixer)
 
BOOL SndMixerQueryControls (PSND_MIXER Mixer, PUINT DisplayControls, LPMIXERLINE LineInfo, LPMIXERCONTROL *Controls)
 
static BOOL SndMixerQueryConnections (PSND_MIXER Mixer, PSND_MIXER_DESTINATION Line)
 
static BOOL SndMixerQueryDestinations (PSND_MIXER Mixer)
 
BOOL SndMixerSelect (PSND_MIXER Mixer, UINT MixerId)
 
UINT SndMixerGetSelection (PSND_MIXER Mixer)
 
INT SndMixerGetProductName (PSND_MIXER Mixer, LPTSTR lpBuffer, UINT uSize)
 
INT SndMixerGetLineName (PSND_MIXER Mixer, DWORD LineID, LPTSTR lpBuffer, UINT uSize, BOOL LongName)
 
BOOL SndMixerEnumProducts (PSND_MIXER Mixer, PFNSNDMIXENUMPRODUCTS EnumProc, PVOID Context)
 
INT SndMixerSetVolumeControlDetails (PSND_MIXER Mixer, DWORD dwControlID, DWORD cChannels, DWORD cbDetails, LPVOID paDetails)
 
INT SndMixerGetVolumeControlDetails (PSND_MIXER Mixer, DWORD dwControlID, DWORD cChannels, DWORD cbDetails, LPVOID paDetails)
 
INT SndMixerGetDestinationCount (PSND_MIXER Mixer)
 
BOOL SndMixerEnumLines (PSND_MIXER Mixer, PFNSNDMIXENUMLINES EnumProc, PVOID Context)
 
BOOL SndMixerEnumConnections (PSND_MIXER Mixer, DWORD LineID, PFNSNDMIXENUMCONNECTIONS EnumProc, PVOID Context)
 
BOOL SndMixerIsDisplayControl (PSND_MIXER Mixer, LPMIXERCONTROL Control)
 
LPMIXERLINE SndMixerGetLineByName (PSND_MIXER Mixer, DWORD LineID, LPWSTR LineName)
 

Macro Definition Documentation

◆ NO_MIXER_SELECTED

#define NO_MIXER_SELECTED   ((UINT)(~0))

Definition at line 28 of file mixer.c.

Function Documentation

◆ ClearMixerCache()

static VOID ClearMixerCache ( PSND_MIXER  Mixer)
static

Definition at line 31 of file mixer.c.

32{
35
36 for (Line = Mixer->Lines; Line != NULL; Line = NextLine)
37 {
38 if (Line->Controls != NULL)
39 {
41 0,
42 Line->Controls);
43 }
44
45 for (Con = Line->Connections; Con != NULL; Con = NextCon)
46 {
47 if (Con->Controls != NULL)
48 {
50 0,
51 Con->Controls);
52 }
53
54 NextCon = Con->Next;
56 0,
57 Con);
58 }
59
60 NextLine = Line->Next;
62 0,
63 Line);
64 }
65 Mixer->Lines = NULL;
66}
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
BOOLEAN NextLine(PCHAR LineBuffer, ULONG BufferSize, FILE *File)
Definition: parser.c:230
Definition: ncftp.h:79
PSND_MIXER_DESTINATION Lines
Definition: sndvol32.h:105
PDOS_DEVICE_NODE Con
Definition: condrv.c:26

Referenced by SndMixerDestroy(), and SndMixerSelect().

◆ SndMixerClose()

VOID SndMixerClose ( PSND_MIXER  Mixer)

Definition at line 101 of file mixer.c.

102{
103 if (Mixer->hmx != NULL)
104 {
105 mixerClose(Mixer->hmx);
106 Mixer->hmx = NULL;
107 Mixer->MixerId = NO_MIXER_SELECTED;
108 }
109}
#define NO_MIXER_SELECTED
Definition: mixer.c:28
UINT MixerId
Definition: sndvol32.h:102
HMIXER hmx
Definition: sndvol32.h:103
UINT WINAPI mixerClose(HMIXER hMix)
Definition: winmm.c:386

Referenced by SndMixerDestroy(), and SndMixerSelect().

◆ SndMixerCreate()

PSND_MIXER SndMixerCreate ( HWND  hWndNotification,
UINT  MixerId 
)

Definition at line 69 of file mixer.c.

70{
73 sizeof(SND_MIXER));
74 if (Mixer != NULL)
75 {
76 Mixer->hWndNotification = hWndNotification;
79
80 if (Mixer->MixersCount > 0)
81 {
82 /* select the first mixer by default */
83 SndMixerSelect(Mixer, MixerId);
84 }
85 }
86
87 return Mixer;
88}
BOOL SndMixerSelect(PSND_MIXER Mixer, UINT MixerId)
Definition: mixer.c:304
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
struct _SND_MIXER SND_MIXER
struct _SND_MIXER * PSND_MIXER
UINT MixersCount
Definition: sndvol32.h:100
HWND hWndNotification
Definition: sndvol32.h:101
UINT WINAPI mixerGetNumDevs(void)
Definition: winmm.c:280

Referenced by DlgPreferencesProc(), and MainWindowProc().

◆ SndMixerDestroy()

VOID SndMixerDestroy ( PSND_MIXER  Mixer)

Definition at line 91 of file mixer.c.

92{
93 ClearMixerCache(Mixer);
94 SndMixerClose(Mixer);
96 0,
97 Mixer);
98}
static VOID ClearMixerCache(PSND_MIXER Mixer)
Definition: mixer.c:31
VOID SndMixerClose(PSND_MIXER Mixer)
Definition: mixer.c:101

Referenced by MainWindowProc().

◆ SndMixerEnumConnections()

BOOL SndMixerEnumConnections ( PSND_MIXER  Mixer,
DWORD  LineID,
PFNSNDMIXENUMCONNECTIONS  EnumProc,
PVOID  Context 
)

Definition at line 552 of file mixer.c.

556{
557 if (Mixer->hmx)
558 {
560
561 for (Line = Mixer->Lines; Line != NULL; Line = Line->Next)
562 {
563 if (Line->Info.dwLineID == LineID)
564 {
565 PSND_MIXER_CONNECTION Connection;
566
567 if (Line->DisplayControls != 0)
568 {
569 if (!EnumProc(Mixer,
570 LineID,
571 &Line->Info,
572 Context))
573 {
574 return FALSE;
575 }
576 }
577
578 for (Connection = Line->Connections; Connection != NULL; Connection = Connection->Next)
579 {
580 if (!EnumProc(Mixer,
581 LineID,
582 &Connection->Info,
583 Context))
584 {
585 return FALSE;
586 }
587 }
588
589 return TRUE;
590 }
591 }
592 }
593
594 return FALSE;
595}
static BOOL CALLBACK EnumProc(_In_ HWND hWnd, _In_ LPARAM lParam)
Definition: SetParent.c:53
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
struct _SND_MIXER_CONNECTION * Next
Definition: sndvol32.h:82

Referenced by LoadDialogCtrls(), MainWindowProc(), and UpdatePrefDlgControls().

◆ SndMixerEnumLines()

BOOL SndMixerEnumLines ( PSND_MIXER  Mixer,
PFNSNDMIXENUMLINES  EnumProc,
PVOID  Context 
)

Definition at line 526 of file mixer.c.

529{
530 if (Mixer->hmx)
531 {
533
534 for (Line = Mixer->Lines; Line != NULL; Line = Line->Next)
535 {
536 if (!EnumProc(Mixer,
537 &Line->Info,
538 Line->DisplayControls,
539 Context))
540 {
541 return FALSE;
542 }
543 }
544
545 return TRUE;
546 }
547
548 return FALSE;
549}

Referenced by UpdatePrefDlgControls().

◆ SndMixerEnumProducts()

BOOL SndMixerEnumProducts ( PSND_MIXER  Mixer,
PFNSNDMIXENUMPRODUCTS  EnumProc,
PVOID  Context 
)

Definition at line 431 of file mixer.c.

434{
435 MIXERCAPS Caps;
436 HMIXER hMixer;
437 UINT i;
438 BOOL Ret = TRUE;
439
440 for (i = 0; i < Mixer->MixersCount; i++)
441 {
442 if (mixerOpen(&hMixer,
443 i,
444 0,
445 0,
446 0) == MMSYSERR_NOERROR)
447 {
448 if (mixerGetDevCaps(i,
449 &Caps,
450 sizeof(Caps)) == MMSYSERR_NOERROR)
451 {
452 if (!EnumProc(Mixer,
453 i,
454 Caps.szPname,
455 Context))
456 {
458 Ret = FALSE;
459 break;
460 }
461 }
462 else
463 {
464 DPRINT("Failed to get device capabilities for mixer id %d!\n", i);
465 }
467 }
468 }
469
470 return Ret;
471}
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define mixerGetDevCaps
Definition: mmsystem.h:2852
#define MMSYSERR_NOERROR
Definition: mmsystem.h:96
HMIXER hMixer
Definition: test.c:10
unsigned int UINT
Definition: ndis.h:50
#define DPRINT
Definition: sndvol32.h:73
CHAR szPname[MAXPNAMELEN]
Definition: mmsystem.h:1217
UINT WINAPI mixerOpen(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
Definition: winmm.c:339

Referenced by DlgPreferencesProc().

◆ SndMixerGetDestinationCount()

INT SndMixerGetDestinationCount ( PSND_MIXER  Mixer)

Definition at line 520 of file mixer.c.

521{
522 return (Mixer->hmx ? (INT)Mixer->Caps.cDestinations : -1);
523}
MIXERCAPS Caps
Definition: sndvol32.h:104
DWORD cDestinations
Definition: mmsystem.h:1219
int32_t INT
Definition: typedefs.h:58

◆ SndMixerGetLineByName()

LPMIXERLINE SndMixerGetLineByName ( PSND_MIXER  Mixer,
DWORD  LineID,
LPWSTR  LineName 
)

Definition at line 615 of file mixer.c.

618{
620 PSND_MIXER_CONNECTION Connection;
621
622 if (Mixer->hmx == 0)
623 return NULL;
624
625 for (Line = Mixer->Lines; Line != NULL; Line = Line->Next)
626 {
627 if (Line->Info.dwLineID == LineID)
628 {
629 if (Line->DisplayControls != 0)
630 {
631 if (wcsicmp(Line->Info.szName, LineName) == 0)
632 {
633 return &Line->Info;
634 }
635 }
636
637 for (Connection = Line->Connections; Connection != NULL; Connection = Connection->Next)
638 {
639 if (wcsicmp(Connection->Info.szName, LineName) == 0)
640 {
641 return &Connection->Info;
642 }
643 }
644
645 return NULL;
646 }
647 }
648
649 return NULL;
650}
#define wcsicmp
Definition: compat.h:15
CHAR szName[MIXER_LONG_NAME_CHARS]
Definition: mmsystem.h:1243

Referenced by MainWindowProc().

◆ SndMixerGetLineName()

INT SndMixerGetLineName ( PSND_MIXER  Mixer,
DWORD  LineID,
LPTSTR  lpBuffer,
UINT  uSize,
BOOL  LongName 
)

Definition at line 390 of file mixer.c.

395{
396 if (Mixer->hmx)
397 {
398 UINT lnsz;
400 LPMIXERLINE lpl = NULL;
401
402 for (Line = Mixer->Lines; Line != NULL; Line = Line->Next)
403 {
404 if (Line->Info.dwLineID == LineID)
405 {
406 lpl = &Line->Info;
407 break;
408 }
409 }
410
411 if (lpl != NULL)
412 {
413 lnsz = (UINT) lstrlen(LongName ? lpl->szName : lpl->szShortName);
414 if(lnsz + 1 > uSize)
415 {
416 return lnsz + 1;
417 }
418 else
419 {
420 memcpy(lpBuffer, LongName ? lpl->szName : lpl->szShortName, lnsz * sizeof(TCHAR));
421 lpBuffer[lnsz] = _T('\0');
422 return lnsz;
423 }
424 }
425 }
426
427 return -1;
428}
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
_In_ ULONGLONG _In_ PUNICODE_STRING _In_ PUNICODE_STRING LongName
Definition: fsrtlfuncs.h:338
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
CHAR szShortName[MIXER_SHORT_NAME_CHARS]
Definition: mmsystem.h:1242
#define _T(x)
Definition: vfdio.h:22
#define lstrlen
Definition: winbase.h:3876
char TCHAR
Definition: xmlstorage.h:189

Referenced by EnumConnectionsCallback(), PrefDlgAddConnection(), and WriteLineSettings().

◆ SndMixerGetProductName()

INT SndMixerGetProductName ( PSND_MIXER  Mixer,
LPTSTR  lpBuffer,
UINT  uSize 
)

Definition at line 367 of file mixer.c.

370{
371 if (Mixer->hmx)
372 {
373 UINT lnsz = (UINT) lstrlen(Mixer->Caps.szPname);
374 if(lnsz + 1 > uSize)
375 {
376 return lnsz + 1;
377 }
378 else
379 {
380 memcpy(lpBuffer, Mixer->Caps.szPname, lnsz * sizeof(TCHAR));
381 lpBuffer[lnsz] = _T('\0');
382 return lnsz;
383 }
384 }
385
386 return -1;
387}

Referenced by MainWindowProc(), and UpdatePrefDlgControls().

◆ SndMixerGetSelection()

UINT SndMixerGetSelection ( PSND_MIXER  Mixer)

Definition at line 361 of file mixer.c.

362{
363 return Mixer->MixerId;
364}

Referenced by DlgPreferencesProc(), and UpdatePrefDlgControls().

◆ SndMixerGetVolumeControlDetails()

INT SndMixerGetVolumeControlDetails ( PSND_MIXER  Mixer,
DWORD  dwControlID,
DWORD  cChannels,
DWORD  cbDetails,
LPVOID  paDetails 
)

Definition at line 498 of file mixer.c.

499{
500 MIXERCONTROLDETAILS MixerDetails;
501
502 if (Mixer->hmx)
503 {
504 MixerDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
505 MixerDetails.dwControlID = dwControlID;
506 MixerDetails.cChannels = cChannels;
507 MixerDetails.cMultipleItems = 0;
508 MixerDetails.cbDetails = cbDetails;
509 MixerDetails.paDetails = paDetails;
510
512 {
513 return 1;
514 }
515 }
516 return -1;
517}
#define MIXER_GETCONTROLDETAILSF_VALUE
Definition: mmsystem.h:412
#define mixerGetControlDetails
Definition: mmsystem.h:2855
struct tMIXERCONTROLDETAILS MIXERCONTROLDETAILS
#define MIXER_OBJECTF_HMIXER
Definition: mmsystem.h:301

Referenced by EnumConnectionsCallback(), MixerControlChangeCallback(), OnInitDialog(), and SetVolumeCallback().

◆ SndMixerIsDisplayControl()

BOOL SndMixerIsDisplayControl ( PSND_MIXER  Mixer,
LPMIXERCONTROL  Control 
)

Definition at line 598 of file mixer.c.

600{
601 if (Mixer->hmx && !(Control->fdwControl & MIXERCONTROL_CONTROLF_DISABLED))
602 {
603 switch (Control->dwControlType & MIXERCONTROL_CT_CLASS_MASK)
604 {
607 return TRUE;
608 }
609 }
610
611 return FALSE;
612}
#define MIXERCONTROL_CONTROLF_DISABLED
Definition: mmsystem.h:352
#define MIXERCONTROL_CT_CLASS_MASK
Definition: mmsystem.h:353
#define MIXERCONTROL_CT_CLASS_FADER
Definition: mmsystem.h:359
#define MIXERCONTROL_CT_CLASS_SWITCH
Definition: mmsystem.h:356
_In_ WDF_WMI_PROVIDER_CONTROL Control
Definition: wdfwmi.h:166

Referenced by SndMixerQueryControls().

◆ SndMixerQueryConnections()

static BOOL SndMixerQueryConnections ( PSND_MIXER  Mixer,
PSND_MIXER_DESTINATION  Line 
)
static

Definition at line 175 of file mixer.c.

177{
178 UINT i, DispControls;
179 MIXERLINE LineInfo;
181 BOOL Ret = TRUE;
182
183 LineInfo.cbStruct = sizeof(LineInfo);
184 for (i = Line->Info.cConnections; i > 0; i--)
185 {
186 LineInfo.dwDestination = Line->Info.dwDestination;
187 LineInfo.dwSource = i - 1;
188 Result = mixerGetLineInfo((HMIXEROBJ)Mixer->hmx,
189 &LineInfo,
192 {
193 LPMIXERCONTROL Controls = NULL;
195
196 DPRINT("++ Source: %ws\n", LineInfo.szName);
197
198 DispControls = 0;
199
200 if (!SndMixerQueryControls(Mixer,
201 &DispControls,
202 &LineInfo,
203 &Controls))
204 {
205 DPRINT("Failed to query connection controls\n");
206 Ret = FALSE;
207 break;
208 }
209
212 sizeof(SND_MIXER_CONNECTION));
213 if (Con != NULL)
214 {
215 Con->Info = LineInfo;
216 Con->Controls = Controls;
217 Con->DisplayControls = DispControls;
218 Con->Next = Line->Connections;
219 Line->Connections = Con;
220 }
221 else
222 {
224 0,
225 Controls);
226 }
227 }
228 else
229 {
230 DPRINT("Failed to get connection information: %d\n", Result);
231 Ret = FALSE;
232 break;
233 }
234 }
235
236 return Ret;
237}
BOOL SndMixerQueryControls(PSND_MIXER Mixer, PUINT DisplayControls, LPMIXERLINE LineInfo, LPMIXERCONTROL *Controls)
Definition: mixer.c:112
UINT MMRESULT
Definition: mmsystem.h:962
#define MIXER_GETLINEINFOF_SOURCE
Definition: mmsystem.h:345
#define mixerGetLineInfo
Definition: mmsystem.h:2853
struct _SND_MIXER_CONNECTION SND_MIXER_CONNECTION
DWORD dwDestination
Definition: mmsystem.h:1233
DWORD dwSource
Definition: mmsystem.h:1234
DWORD cbStruct
Definition: mmsystem.h:1232
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

Referenced by SndMixerQueryDestinations().

◆ SndMixerQueryControls()

BOOL SndMixerQueryControls ( PSND_MIXER  Mixer,
PUINT  DisplayControls,
LPMIXERLINE  LineInfo,
LPMIXERCONTROL Controls 
)

Definition at line 112 of file mixer.c.

116{
117 if (LineInfo->cControls > 0)
118 {
119 *Controls = (MIXERCONTROL*) HeapAlloc(GetProcessHeap(),
121 LineInfo->cControls * sizeof(MIXERCONTROL));
122 if (*Controls != NULL)
123 {
124 MIXERLINECONTROLS LineControls;
126 UINT j;
127
128 LineControls.cbStruct = sizeof(LineControls);
129 LineControls.dwLineID = LineInfo->dwLineID;
130 LineControls.cControls = LineInfo->cControls;
131 LineControls.cbmxctrl = sizeof(MIXERCONTROL);
132 LineControls.pamxctrl = (MIXERCONTROL*)(*Controls);
133
134 Result = mixerGetLineControls((HMIXEROBJ)Mixer->hmx,
135 &LineControls,
138 {
139 for (j = 0; j < LineControls.cControls; j++)
140 {
141 if (SndMixerIsDisplayControl(Mixer,
142 &(*Controls)[j]))
143 {
144 (*DisplayControls)++;
145 }
146
147 DPRINT("Line control: %ws (0x%x, 0x%x)\n", (*Controls)[j].szName, (*Controls)[j].fdwControl, (*Controls)[j].dwControlType);
148 }
149
150 return TRUE;
151 }
152 else
153 {
155 0,
156 *Controls);
157 *Controls = NULL;
158 DPRINT("Failed to get line (ID: 0x%x) controls: %d\n", LineInfo->dwLineID, Result);
159 }
160 }
161 else
162 {
163 DPRINT("Failed to allocate memory for %d line (ID: 0x%x) controls!\n", LineInfo->dwLineID, LineInfo->cControls);
164 }
165
166 return FALSE;
167 }
168 else
169 {
170 return TRUE;
171 }
172}
BOOL SndMixerIsDisplayControl(PSND_MIXER Mixer, LPMIXERCONTROL Control)
Definition: mixer.c:598
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
MIXERCONTROLA MIXERCONTROL
Definition: mmsystem.h:2825
#define mixerGetLineControls
Definition: mmsystem.h:2854
#define MIXER_GETLINECONTROLSF_ALL
Definition: mmsystem.h:408
static const WCHAR szName[]
Definition: powrprof.c:45
DWORD cControls
Definition: mmsystem.h:1241
DWORD dwLineID
Definition: mmsystem.h:1235
LPMIXERCONTROLA pamxctrl
Definition: mmsystem.h:1338

Referenced by EnumConnectionsCallback(), MixerControlChangeCallback(), OnInitDialog(), SetVolumeCallback(), SndMixerQueryConnections(), and SndMixerQueryDestinations().

◆ SndMixerQueryDestinations()

static BOOL SndMixerQueryDestinations ( PSND_MIXER  Mixer)
static

Definition at line 240 of file mixer.c.

241{
242 UINT i;
243 BOOL Ret = TRUE;
244
245 for (i = Mixer->Caps.cDestinations; i > 0; i--)
246 {
248
251 sizeof(SND_MIXER_DESTINATION));
252 if (Line != NULL)
253 {
254 Line->Info.cbStruct = sizeof(Line->Info);
255 Line->Info.dwDestination = i - 1;
256 if (mixerGetLineInfo((HMIXEROBJ)Mixer->hmx,
257 &Line->Info,
259 {
260 DPRINT("+ Destination: %ws (0x%x, %d)\n", Line->Info.szName, Line->Info.dwLineID, Line->Info.dwComponentType);
261
262 if (!SndMixerQueryControls(Mixer,
263 &Line->DisplayControls,
264 &Line->Info,
265 &Line->Controls))
266 {
267 DPRINT("Failed to query mixer controls!\n");
268 Ret = FALSE;
269 break;
270 }
271
272 if (!SndMixerQueryConnections(Mixer, Line))
273 {
274 DPRINT("Failed to query mixer connections!\n");
275 Ret = FALSE;
276 break;
277 }
278
279 Line->Next = Mixer->Lines;
280 Mixer->Lines = Line;
281 }
282 else
283 {
284 DPRINT("Failed to get line information for id %d!\n", i);
286 0,
287 Line);
288 Ret = FALSE;
289 break;
290 }
291 }
292 else
293 {
294 DPRINT("Allocation of SND_MIXER_DEST structure for id %d failed!\n", i);
295 Ret = FALSE;
296 break;
297 }
298 }
299
300 return Ret;
301}
static BOOL SndMixerQueryConnections(PSND_MIXER Mixer, PSND_MIXER_DESTINATION Line)
Definition: mixer.c:175
#define MIXER_GETLINEINFOF_DESTINATION
Definition: mmsystem.h:344
struct _SND_MIXER_DESTINATION SND_MIXER_DESTINATION

Referenced by SndMixerSelect().

◆ SndMixerSelect()

BOOL SndMixerSelect ( PSND_MIXER  Mixer,
UINT  MixerId 
)

Definition at line 304 of file mixer.c.

306{
307 if (MixerId >= Mixer->MixersCount)
308 {
309 return FALSE;
310 }
311
312 SndMixerClose(Mixer);
313
314 if (mixerOpen(&Mixer->hmx,
315 MixerId,
317 0,
319 mixerOpen(&Mixer->hmx,
320 MixerId,
322 0,
324 mixerOpen(&Mixer->hmx,
325 MixerId,
326 0,
327 0,
328 0) == MMSYSERR_NOERROR)
329 {
330 if (mixerGetDevCaps(MixerId,
331 &Mixer->Caps,
332 sizeof(Mixer->Caps)) == MMSYSERR_NOERROR)
333 {
334 BOOL Ret = FALSE;
335
336 Mixer->MixerId = MixerId;
337
338 ClearMixerCache(Mixer);
339
340 Ret = SndMixerQueryDestinations(Mixer);
341
342 if (!Ret)
343 {
344 ClearMixerCache(Mixer);
345 }
346
347 return Ret;
348 }
349 else
350 {
351 mixerClose(Mixer->hmx);
352 }
353 }
354
355 Mixer->hmx = NULL;
356 Mixer->MixerId = NO_MIXER_SELECTED;
357 return FALSE;
358}
static BOOL SndMixerQueryDestinations(PSND_MIXER Mixer)
Definition: mixer.c:240
#define CALLBACK_WINDOW
Definition: mmsystem.h:148
#define MIXER_OBJECTF_MIXER
Definition: mmsystem.h:300
uint32_t DWORD_PTR
Definition: typedefs.h:65

Referenced by SndMixerCreate(), and UpdatePrefDlgControls().

◆ SndMixerSetVolumeControlDetails()

INT SndMixerSetVolumeControlDetails ( PSND_MIXER  Mixer,
DWORD  dwControlID,
DWORD  cChannels,
DWORD  cbDetails,
LPVOID  paDetails 
)

Definition at line 474 of file mixer.c.

475{
476 MIXERCONTROLDETAILS MixerDetails;
477
478 if (Mixer->hmx)
479 {
480 MixerDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
481 MixerDetails.dwControlID = dwControlID;
482 MixerDetails.cChannels = cChannels;
483 MixerDetails.cMultipleItems = 0;
484 MixerDetails.cbDetails = cbDetails;
485 MixerDetails.paDetails = paDetails;
486
488 {
489 return 1;
490 }
491 }
492
493 return -1;
494}
#define MIXER_SETCONTROLDETAILSF_VALUE
Definition: mmsystem.h:415
UINT WINAPI mixerSetControlDetails(HMIXEROBJ hmix, LPMIXERCONTROLDETAILS lpmcd, DWORD fdwDetails)
Definition: winmm.c:681

Referenced by OnHScroll(), and SetVolumeCallback().