Emmanuel Maillard : winecoreaudio:
Initial implementation of MIX_GetLineControls.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon May 14 10:52:50 CDT 2007
Module: wine
Branch: master
Commit: 33e24d7ecca02b1f8d8d01ae9459e32389035041
URL: http://source.winehq.org/git/wine.git/?a=commit;h=33e24d7ecca02b1f8d8d01ae9459e32389035041
Author: Emmanuel Maillard <mahanuu at free.fr>
Date: Sun May 13 22:12:49 2007 +0200
winecoreaudio: Initial implementation of MIX_GetLineControls.
---
dlls/winecoreaudio.drv/mixer.c | 86 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mixer.c b/dlls/winecoreaudio.drv/mixer.c
index 5a9f724..01c35a1 100644
--- a/dlls/winecoreaudio.drv/mixer.c
+++ b/dlls/winecoreaudio.drv/mixer.c
@@ -616,6 +616,91 @@ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINEW lpMl, DWORD_PTR fdwInfo)
}
/**************************************************************************
+* MIX_GetLineControls [internal]
+*/
+static DWORD MIX_GetLineControls(WORD wDevID, LPMIXERLINECONTROLSW lpMlc, DWORD_PTR flags)
+{
+ DWORD ret = MMSYSERR_NOTENABLED;
+ int ctrl = 0;
+ TRACE("%04X, %p, %08lX\n", wDevID, lpMlc, flags);
+
+ if (lpMlc == NULL) {
+ WARN("invalid parameter: lpMlc == NULL\n");
+ return MMSYSERR_INVALPARAM;
+ }
+
+ if (lpMlc->cbStruct < sizeof(*lpMlc)) {
+ WARN("invalid parameter: lpMlc->cbStruct = %d\n", lpMlc->cbStruct);
+ return MMSYSERR_INVALPARAM;
+ }
+
+ if (lpMlc->cbmxctrl < sizeof(MIXERCONTROLW)) {
+ WARN("invalid parameter: lpMlc->cbmxctrl = %d\n", lpMlc->cbmxctrl);
+ return MMSYSERR_INVALPARAM;
+ }
+
+ if (wDevID >= numMixers) {
+ WARN("bad device ID: %04X\n", wDevID);
+ return MMSYSERR_BADDEVICEID;
+ }
+
+ switch (flags & MIXER_GETLINECONTROLSF_QUERYMASK)
+ {
+ case MIXER_GETLINECONTROLSF_ALL:
+ FIXME("dwLineID=%d MIXER_GETLINECONTROLSF_ALL (%d)\n", lpMlc->dwLineID, lpMlc->cControls);
+ if (lpMlc->cControls != ControlsPerLine)
+ {
+ WARN("invalid parameter lpMlc->cControls %d\n", lpMlc->cControls);
+ ret = MMSYSERR_INVALPARAM;
+ }
+ else
+ {
+ if ( (lpMlc->dwLineID >= 0) && (lpMlc->dwLineID < mixer.caps.cDestinations) )
+ {
+ int i;
+ for (i = 0; i < lpMlc->cControls; i++)
+ {
+ lpMlc->pamxctrl[i] = mixer.mixerCtrls[lpMlc->dwLineID * i].ctrl;
+ }
+ ret = MMSYSERR_NOERROR;
+ }
+ else ret = MIXERR_INVALLINE;
+ }
+ break;
+ case MIXER_GETLINECONTROLSF_ONEBYID:
+ TRACE("dwLineID=%d MIXER_GETLINECONTROLSF_ONEBYID (%d)\n", lpMlc->dwLineID, lpMlc->u.dwControlID);
+ if ( lpMlc->u.dwControlID >= 0 && lpMlc->u.dwControlID < mixer.numCtrl )
+ {
+ lpMlc->pamxctrl[0] = mixer.mixerCtrls[lpMlc->u.dwControlID].ctrl;
+ ret = MMSYSERR_NOERROR;
+ }
+ else ret = MIXERR_INVALVALUE;
+ break;
+ case MIXER_GETLINECONTROLSF_ONEBYTYPE:
+ TRACE("dwLineID=%d MIXER_GETLINECONTROLSF_ONEBYTYPE (%s)\n", lpMlc->dwLineID, getControlType(lpMlc->u.dwControlType));
+ if (lpMlc->u.dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME)
+ {
+ ctrl = (lpMlc->dwLineID * ControlsPerLine) + IDControlVolume;
+ lpMlc->pamxctrl[0] = mixer.mixerCtrls[ctrl].ctrl;
+ ret = MMSYSERR_NOERROR;
+ }
+ else
+ if (lpMlc->u.dwControlType == MIXERCONTROL_CONTROLTYPE_MUTE)
+ {
+ ctrl = (lpMlc->dwLineID * ControlsPerLine) + IDControlMute;
+ lpMlc->pamxctrl[0] = mixer.mixerCtrls[ctrl].ctrl;
+ ret = MMSYSERR_NOERROR;
+ }
+ break;
+ default:
+ ERR("Unknown flag %08lx\n", flags & MIXER_GETLINECONTROLSF_QUERYMASK);
+ ret = MMSYSERR_INVALPARAM;
+ }
+
+ return ret;
+}
+
+/**************************************************************************
* mxdMessage
*/
DWORD WINAPI CoreAudio_mxdMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser,
@@ -643,6 +728,7 @@ DWORD WINAPI CoreAudio_mxdMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser,
case MXDM_GETLINEINFO:
return MIX_GetLineInfo(wDevID, (LPMIXERLINEW)dwParam1, dwParam2);
case MXDM_GETLINECONTROLS:
+ return MIX_GetLineControls(wDevID, (LPMIXERLINECONTROLSW)dwParam1, dwParam2);
case MXDM_GETCONTROLDETAILS:
case MXDM_SETCONTROLDETAILS:
default:
More information about the wine-cvs
mailing list