Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
143f10a4
Commit
143f10a4
authored
Apr 24, 2007
by
Maarten Lankhorst
Committed by
Alexandre Julliard
Apr 24, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winealsa: Implement GetLineControls in mixer.
parent
1843e71e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
134 additions
and
0 deletions
+134
-0
mixer.c
dlls/winealsa.drv/mixer.c
+134
-0
No files found.
dlls/winealsa.drv/mixer.c
View file @
143f10a4
...
...
@@ -100,6 +100,46 @@ static const char * getMessage(UINT uMsg)
return
str
;
}
static
const
char
*
getControlType
(
DWORD
dwControlType
)
{
#define TYPE_TO_STR(x) case x: return #x;
switch
(
dwControlType
)
{
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_CUSTOM
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_BOOLEANMETER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_SIGNEDMETER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_PEAKMETER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_BOOLEAN
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_ONOFF
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_MUTE
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_MONO
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_LOUDNESS
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_STEREOENH
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_BASS_BOOST
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_BUTTON
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_DECIBELS
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_SIGNED
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_UNSIGNED
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_PERCENT
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_SLIDER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_PAN
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_QSOUNDPAN
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_FADER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_VOLUME
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_BASS
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_TREBLE
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_EQUALIZER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_SINGLESELECT
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_MUX
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_MIXER
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_MICROTIME
);
TYPE_TO_STR
(
MIXERCONTROL_CONTROLTYPE_MILLITIME
);
}
#undef TYPE_TO_STR
return
wine_dbg_sprintf
(
"UNKNOWN(%08x)"
,
dwControlType
);
}
/* A simple declaration of a line control
* These are each of the channels that show up
*/
...
...
@@ -891,6 +931,97 @@ static DWORD MIX_GetLineInfo(UINT wDevID, LPMIXERLINEW Ml, DWORD_PTR flags)
return
MMSYSERR_NOERROR
;
}
/* Get the controls that belong to a certain line, either all or 1 */
static
DWORD
MIX_GetLineControls
(
UINT
wDevID
,
LPMIXERLINECONTROLSW
mlc
,
DWORD_PTR
flags
)
{
mixer
*
mmixer
=
MIX_GetMix
(
wDevID
);
int
i
,
j
=
0
;
DWORD
ct
;
if
(
!
mlc
||
mlc
->
cbStruct
!=
sizeof
(
*
mlc
))
{
WARN
(
"Invalid mlc %p, cbStruct: %d
\n
"
,
mlc
,
(
!
mlc
?
-
1
:
mlc
->
cbStruct
));
return
MMSYSERR_INVALPARAM
;
}
if
(
mlc
->
cbmxctrl
!=
sizeof
(
MIXERCONTROLW
))
{
WARN
(
"cbmxctrl %d
\n
"
,
mlc
->
cbmxctrl
);
return
MMSYSERR_INVALPARAM
;
}
if
(
!
mmixer
)
return
MMSYSERR_BADDEVICEID
;
flags
&=
MIXER_GETLINECONTROLSF_QUERYMASK
;
if
(
flags
==
MIXER_GETLINECONTROLSF_ONEBYID
)
mlc
->
dwLineID
=
mlc
->
u
.
dwControlID
/
CONTROLSPERLINE
;
if
(
mlc
->
dwLineID
<
0
||
mlc
->
dwLineID
>=
mmixer
->
chans
)
{
TRACE
(
"Invalid dwLineID %d
\n
"
,
mlc
->
dwLineID
);
return
MIXERR_INVALLINE
;
}
switch
(
flags
)
{
case
MIXER_GETLINECONTROLSF_ALL
:
TRACE
(
"line=%08x MIXER_GETLINECONTROLSF_ALL (%d)
\n
"
,
mlc
->
dwLineID
,
mlc
->
cControls
);
for
(
i
=
0
;
i
<
CONTROLSPERLINE
;
++
i
)
if
(
mmixer
->
controls
[
i
+
mlc
->
dwLineID
*
CONTROLSPERLINE
].
enabled
)
{
memcpy
(
&
mlc
->
pamxctrl
[
j
],
&
mmixer
->
controls
[
i
+
mlc
->
dwLineID
*
CONTROLSPERLINE
].
c
,
sizeof
(
MIXERCONTROLW
));
TRACE
(
"Added %s (%s)
\n
"
,
debugstr_w
(
mlc
->
pamxctrl
[
j
].
szShortName
),
debugstr_w
(
mlc
->
pamxctrl
[
j
].
szName
));
++
j
;
if
(
j
>
mlc
->
cControls
)
{
WARN
(
"invalid parameter
\n
"
);
return
MMSYSERR_INVALPARAM
;
}
}
if
(
!
j
||
mlc
->
cControls
>
j
)
{
WARN
(
"invalid parameter
\n
"
);
return
MMSYSERR_INVALPARAM
;
}
break
;
case
MIXER_GETLINECONTROLSF_ONEBYID
:
TRACE
(
"line=%08x MIXER_GETLINECONTROLSF_ONEBYID (%x)
\n
"
,
mlc
->
dwLineID
,
mlc
->
u
.
dwControlID
);
if
(
!
mmixer
->
controls
[
mlc
->
u
.
dwControlID
].
enabled
)
return
MIXERR_INVALCONTROL
;
mlc
->
pamxctrl
[
0
]
=
mmixer
->
controls
[
mlc
->
u
.
dwControlID
].
c
;
break
;
case
MIXER_GETLINECONTROLSF_ONEBYTYPE
:
TRACE
(
"line=%08x MIXER_GETLINECONTROLSF_ONEBYTYPE (%s)
\n
"
,
mlc
->
dwLineID
,
getControlType
(
mlc
->
u
.
dwControlType
));
ct
=
mlc
->
u
.
dwControlType
&
MIXERCONTROL_CT_CLASS_MASK
;
for
(
i
=
0
;
i
<=
CONTROLSPERLINE
;
++
i
)
{
const
int
ofs
=
i
+
mlc
->
dwLineID
*
CONTROLSPERLINE
;
if
(
i
==
CONTROLSPERLINE
)
{
WARN
(
"invalid parameter: control %s not found
\n
"
,
getControlType
(
mlc
->
u
.
dwControlType
));
return
MIXERR_INVALCONTROL
;
}
if
(
mmixer
->
controls
[
ofs
].
enabled
&&
(
mmixer
->
controls
[
ofs
].
c
.
dwControlType
&
MIXERCONTROL_CT_CLASS_MASK
)
==
ct
)
{
mlc
->
pamxctrl
[
0
]
=
mmixer
->
controls
[
ofs
].
c
;
break
;
}
}
break
;
default:
FIXME
(
"Unknown flag %08lx
\n
"
,
flags
&
MIXER_GETLINECONTROLSF_QUERYMASK
);
return
MMSYSERR_INVALPARAM
;
}
return
MMSYSERR_NOERROR
;
}
#endif
/*HAVE_ALSA*/
/**************************************************************************
...
...
@@ -926,6 +1057,9 @@ DWORD WINAPI ALSA_mxdMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser,
case
MXDM_GETLINEINFO
:
ret
=
MIX_GetLineInfo
(
wDevID
,
(
LPMIXERLINEW
)
dwParam1
,
dwParam2
);
break
;
case
MXDM_GETLINECONTROLS
:
ret
=
MIX_GetLineControls
(
wDevID
,
(
LPMIXERLINECONTROLSW
)
dwParam1
,
dwParam2
);
break
;
case
MXDM_GETNUMDEVS
:
ret
=
cards
;
break
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment