Changeset 8485 for trunk/src/winmm/mixer.cpp
- Timestamp:
- May 24, 2002, 8:02:48 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/mixer.cpp
r8479 r8485 1 /* $Id: mixer.cpp,v 1.1 4 2002-05-23 20:42:06sandervl Exp $ */1 /* $Id: mixer.cpp,v 1.15 2002-05-24 18:02:47 sandervl Exp $ */ 2 2 3 3 /* … … 41 41 #include "dbglocal.h" 42 42 43 static BOOLmixerAddControl(MIXERLINEA *pDestLine, DWORD dwControl, MIXERLINEA *pSrcLine);44 static MIXERLINEA *mixerAddSource(MIXERLINEA *pDestLine, DWORD dwSource);45 static MIXERLINEA *mixerAddDestination(DWORD dwDest);43 static MIXERCONTROLA *mixerAddControl(MIXERLINEA *pDestLine, DWORD dwControl, MIXERLINEA *pSrcLine); 44 static MIXERLINEA *mixerAddSource(MIXERLINEA *pDestLine, DWORD dwSource); 45 static MIXERLINEA *mixerAddDestination(DWORD dwDest); 46 46 47 47 //array of destination mixer lines … … 59 59 //array of all mixer controls 60 60 static MIXERCONTROLA mixerControls[MAX_MIXER_CONTROLS] = {0}; 61 //mapping of mixer id to internal id 62 static int mixerControlId[MAX_MIXER_CONTROLS] = {0}; 61 63 62 64 static int nrDestinations = 0; … … 74 76 DEVICE_STRUCT *pMixInfo = (DEVICE_STRUCT *)hmxobj; 75 77 76 if( fdwDetails== MIXER_OBJECTF_HMIXER) {78 if((fdwDetails & 0xF0000000)== MIXER_OBJECTF_HMIXER) { 77 79 if(!pMixInfo) { 78 80 return MMSYSERR_INVALHANDLE; … … 80 82 } 81 83 else 82 if( fdwDetails== MIXER_OBJECTF_MIXER) {83 if( hmxobj > 0) {84 if((fdwDetails & 0xF0000000) == MIXER_OBJECTF_MIXER) { 85 if(!HIWORD(hmxobj) && hmxobj > 0) { 84 86 return MMSYSERR_NODRIVER; 85 87 } 86 88 } 87 89 88 if (lpmcd == NULL) return MMSYSERR_INVALPARAM; 90 if(lpmcd == NULL || lpmcd->cbStruct != sizeof(MIXERCONTROLDETAILS)) { 91 dprintf(("ERROR: invalid pointer or structure size %d (%d)", (lpmcd) ? lpmcd->cbStruct : 0, sizeof(MIXERCONTROLDETAILS))); 92 return MMSYSERR_INVALPARAM; 93 } 89 94 90 95 switch (fdwDetails & MIXER_GETCONTROLDETAILSF_QUERYMASK) { 91 96 case MIXER_GETCONTROLDETAILSF_VALUE: 97 dprintf(("MIXER_GETCONTROLDETAILSF_VALUE %d (internal id %d)", lpmcd->dwControlID, mixerControlId[lpmcd->dwControlID])); 98 if(lpmcd->dwControlID >= nrControls) { 99 dprintf(("invalid control %d", lpmcd->dwControlID)); 100 return MIXERR_INVALCONTROL; 101 } 102 switch(mixerControls[lpmcd->dwControlID].dwControlType) { 103 case MIXERCONTROL_CONTROLTYPE_MUX: 104 dprintf(("MIXERCONTROL_CONTROLTYPE_MUX")); 105 break; 106 case MIXERCONTROL_CONTROLTYPE_MIXER: 107 dprintf(("MIXERCONTROL_CONTROLTYPE_MIXER")); 108 break; 109 case MIXERCONTROL_CONTROLTYPE_FADER: 110 dprintf(("MIXERCONTROL_CONTROLTYPE_FADER")); 111 break; 112 case MIXERCONTROL_CONTROLTYPE_VOLUME: //unsigned 113 { 114 MIXERCONTROLDETAILS_UNSIGNED *pDetails = (MIXERCONTROLDETAILS_UNSIGNED *)lpmcd->paDetails; 115 DWORD dwVolLeft, dwVolRight; 116 117 dprintf(("MIXERCONTROL_CONTROLTYPE_VOLUME")); 118 if(OSLibMixGetVolume(mixerControlId[lpmcd->dwControlID], NULL, &dwVolLeft, &dwVolRight) == FALSE) { 119 dprintf(("OSLibMixGetVolume failed!!")); 120 return MIXERR_INVALCONTROL; 121 } 122 pDetails->dwValue = dwVolLeft; 123 dprintf(("Left volume %d", dwVolLeft)); 124 if(lpmcd->cChannels == 2) { 125 dprintf(("Right volume %d", dwVolRight)); 126 pDetails += 1; 127 pDetails->dwValue = dwVolRight; 128 } 129 //todo > 2 channels 130 break; 131 } 132 case MIXERCONTROL_CONTROLTYPE_BASS: 133 dprintf(("MIXERCONTROL_CONTROLTYPE_BASS")); 134 break; 135 case MIXERCONTROL_CONTROLTYPE_TREBLE: 136 dprintf(("MIXERCONTROL_CONTROLTYPE_TREBLE")); 137 break; 138 case MIXERCONTROL_CONTROLTYPE_MUTE: 139 { 140 MIXERCONTROLDETAILS_UNSIGNED *pDetails = (MIXERCONTROLDETAILS_UNSIGNED *)lpmcd->paDetails; 141 BOOL fMute; 142 143 dprintf(("MIXERCONTROL_CONTROLTYPE_MUTE")); 144 if(OSLibMixGetVolume(mixerControlId[lpmcd->dwControlID], &fMute, NULL, NULL) == FALSE) { 145 dprintf(("OSLibMixGetVolume failed!!")); 146 return MIXERR_INVALCONTROL; 147 } 148 pDetails->dwValue = fMute; 149 dprintf(("Left mute %d", fMute)); 150 if(lpmcd->cChannels == 2) { 151 dprintf(("Right mute %d", fMute)); 152 pDetails += 1; 153 pDetails->dwValue = fMute; 154 } 155 //todo > 2 channels 156 break; 157 } 158 case MIXERCONTROL_CONTROLTYPE_CUSTOM: 159 dprintf(("MIXERCONTROL_CONTROLTYPE_CUSTOM")); 160 break; 161 case MIXERCONTROL_CONTROLTYPE_BOOLEANMETER: 162 dprintf(("MIXERCONTROL_CONTROLTYPE_BOOLEANMETER")); 163 break; 164 case MIXERCONTROL_CONTROLTYPE_SIGNEDMETER: 165 dprintf(("MIXERCONTROL_CONTROLTYPE_SIGNEDMETER")); 166 break; 167 case MIXERCONTROL_CONTROLTYPE_PEAKMETER: 168 dprintf(("MIXERCONTROL_CONTROLTYPE_PEAKMETER")); 169 break; 170 case MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER: 171 dprintf(("MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER")); 172 break; 173 case MIXERCONTROL_CONTROLTYPE_BOOLEAN: 174 dprintf(("MIXERCONTROL_CONTROLTYPE_BOOLEAN")); 175 break; 176 case MIXERCONTROL_CONTROLTYPE_ONOFF: 177 dprintf(("MIXERCONTROL_CONTROLTYPE_ONOFF")); 178 break; 179 case MIXERCONTROL_CONTROLTYPE_MONO: 180 dprintf(("MIXERCONTROL_CONTROLTYPE_MONO")); 181 break; 182 case MIXERCONTROL_CONTROLTYPE_LOUDNESS: 183 dprintf(("MIXERCONTROL_CONTROLTYPE_LOUDNESS")); 184 break; 185 case MIXERCONTROL_CONTROLTYPE_STEREOENH: 186 dprintf(("MIXERCONTROL_CONTROLTYPE_STEREOENH")); 187 break; 188 case MIXERCONTROL_CONTROLTYPE_BUTTON: 189 dprintf(("MIXERCONTROL_CONTROLTYPE_BUTTON")); 190 break; 191 case MIXERCONTROL_CONTROLTYPE_DECIBELS: 192 dprintf(("MIXERCONTROL_CONTROLTYPE_DECIBELS")); 193 break; 194 case MIXERCONTROL_CONTROLTYPE_SIGNED: 195 dprintf(("MIXERCONTROL_CONTROLTYPE_SIGNED")); 196 break; 197 case MIXERCONTROL_CONTROLTYPE_UNSIGNED: 198 dprintf(("MIXERCONTROL_CONTROLTYPE_UNSIGNED")); 199 break; 200 case MIXERCONTROL_CONTROLTYPE_PERCENT: 201 dprintf(("MIXERCONTROL_CONTROLTYPE_PERCENT")); 202 break; 203 case MIXERCONTROL_CONTROLTYPE_SLIDER: 204 dprintf(("MIXERCONTROL_CONTROLTYPE_SLIDER")); 205 break; 206 case MIXERCONTROL_CONTROLTYPE_PAN: 207 dprintf(("MIXERCONTROL_CONTROLTYPE_PAN")); 208 break; 209 case MIXERCONTROL_CONTROLTYPE_QSOUNDPAN: 210 dprintf(("MIXERCONTROL_CONTROLTYPE_QSOUNDPAN")); 211 break; 212 case MIXERCONTROL_CONTROLTYPE_EQUALIZER: 213 dprintf(("MIXERCONTROL_CONTROLTYPE_EQUALIZER")); 214 break; 215 case MIXERCONTROL_CONTROLTYPE_SINGLESELECT: 216 dprintf(("MIXERCONTROL_CONTROLTYPE_SINGLESELECT")); 217 break; 218 case MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT: 219 dprintf(("MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT")); 220 break; 221 case MIXERCONTROL_CONTROLTYPE_MICROTIME: 222 dprintf(("MIXERCONTROL_CONTROLTYPE_MICROTIME")); 223 break; 224 case MIXERCONTROL_CONTROLTYPE_MILLITIME: 225 dprintf(("MIXERCONTROL_CONTROLTYPE_MILLITIME")); 226 break; 227 default: 228 DebugInt3(); 229 return MIXERR_INVALCONTROL; 230 } 92 231 break; 93 232 case MIXER_GETCONTROLDETAILSF_LISTTEXT: 94 dprintf(("mixerGetControlDetailsA: NIY\n")); 233 dprintf(("MIXER_GETCONTROLDETAILSF_LISTTEXT %d", lpmcd->dwControlID)); 234 if(lpmcd->dwControlID >= nrControls) { 235 dprintf(("invalid control %d", lpmcd->dwControlID)); 236 return MIXERR_INVALCONTROL; 237 } 95 238 break; 96 239 default: … … 147 290 DEVICE_STRUCT *pMixInfo = (DEVICE_STRUCT *)hmxobj; 148 291 149 if( fdwDetails== MIXER_OBJECTF_HMIXER) {292 if((fdwDetails & 0xF0000000) == MIXER_OBJECTF_HMIXER) { 150 293 if(!pMixInfo) { 151 294 return MMSYSERR_INVALHANDLE; … … 153 296 } 154 297 else 155 if( fdwDetails== MIXER_OBJECTF_MIXER) {156 if( hmxobj > 0) {298 if((fdwDetails & 0xF0000000) == MIXER_OBJECTF_MIXER) { 299 if(!HIWORD(hmxobj) && hmxobj > 0) { 157 300 return MMSYSERR_NODRIVER; 158 301 } 159 302 } 160 if (lpmcd == NULL) return MMSYSERR_INVALPARAM; 303 if(lpmcd == NULL || lpmcd->cbDetails != sizeof(MIXERCONTROLDETAILS)) { 304 dprintf(("ERROR: invalid pointer or structure size")); 305 return MMSYSERR_INVALPARAM; 306 } 161 307 162 308 switch (fdwDetails & MIXER_GETCONTROLDETAILSF_QUERYMASK) { 163 309 case MIXER_GETCONTROLDETAILSF_VALUE: 310 dprintf(("MIXER_GETCONTROLDETAILSF_VALUE")); 164 311 break; 165 312 case MIXER_GETCONTROLDETAILSF_LISTTEXT: 166 dprintf((" mixerSetControlDetails: NIY\n"));313 dprintf(("MIXER_GETCONTROLDETAILSF_LISTTEXT")); 167 314 break; 168 315 default: … … 180 327 DEVICE_STRUCT *pMixInfo = (DEVICE_STRUCT *)hmxobj; 181 328 182 if( fdwControls== MIXER_OBJECTF_HMIXER) {329 if((fdwControls & 0xF0000000) == MIXER_OBJECTF_HMIXER) { 183 330 if(!pMixInfo) { 184 331 return MMSYSERR_INVALHANDLE; … … 186 333 } 187 334 else 188 if( fdwControls== MIXER_OBJECTF_MIXER) {189 if( hmxobj > 0) {335 if((fdwControls & 0xF0000000) == MIXER_OBJECTF_MIXER) { 336 if(!HIWORD(hmxobj) && hmxobj > 0) { 190 337 return MMSYSERR_NODRIVER; 191 338 } … … 200 347 { 201 348 case MIXER_GETLINECONTROLSF_ALL: 202 dprintf(("MIXER_GETLINECONTROLSF_ALL")); 203 return MIXERR_INVALLINE; 349 { 350 MIXERLINEA *pLine; 351 MIXERCONTROLA *pCtrl; 352 353 dprintf(("MIXER_GETLINECONTROLSF_ALL for line %d", lpMlc->dwLineID)); 354 if(lpMlc->dwLineID >= nrLines) { 355 dprintf(("ERROR: Invalid line %d", lpMlc->dwLineID)); 356 return MIXERR_INVALLINE; 357 } 358 pLine = pmixerLines[lpMlc->dwLineID]; 359 if(lpMlc->cControls != pLine->cControls || lpMlc->cbmxctrl < pLine->cControls*sizeof(MIXERCONTROLA)) { 360 dprintf(("ERROR: invalid nr of controls %d or structure size %d", lpMlc->cControls, lpMlc->cbmxctrl)); 361 return MMSYSERR_INVALPARAM; 362 } 363 for(int i=0;i<lpMlc->cControls;i++) { 364 pCtrl = lpMlc->pamxctrl+i; 365 memcpy(pCtrl, &mixerControls[mixerLineControls[lpMlc->dwLineID][i]], sizeof(MIXERCONTROLA)); 366 dprintf(("found control %s (%s) control id %d", pCtrl->szName, pCtrl->szShortName, pCtrl->dwControlID)); 367 } 204 368 break; 369 } 205 370 206 371 case MIXER_GETLINECONTROLSF_ONEBYID: 372 { 207 373 dprintf(("MIXER_GETLINECONTROLSF_ONEBYID %x", lpMlc->u.dwControlID)); 208 374 if(lpMlc->cControls != 1 || lpMlc->cbmxctrl != sizeof(MIXERCONTROLA)) { … … 214 380 return MIXERR_INVALCONTROL; 215 381 } 382 //find line associated with this control 383 lpMlc->dwLineID = -1; 384 for(int i=0;i<MAX_MIXER_LINES;i++) { 385 for(int j=0;j<MAX_SOURCE_CONTROLS;j++) { 386 if(mixerLineControls[i][j] == lpMlc->u.dwControlID) { 387 lpMlc->dwLineID = i; 388 break; 389 } 390 else 391 if(mixerLineControls[i][j] == -1) { 392 break; 393 } 394 } 395 if(lpMlc->dwLineID != -1) { 396 break; 397 } 398 } 399 if(i == MAX_MIXER_LINES) { 400 dprintf(("Associated line for control %d NOT FOUND", lpMlc->u.dwControlID)); 401 return MIXERR_INVALCONTROL; 402 } 216 403 memcpy(lpMlc->pamxctrl, &mixerControls[lpMlc->u.dwControlID], sizeof(MIXERCONTROLA)); 217 dprintf(("found control %s (%s)", lpMlc->pamxctrl->szName, lpMlc->pamxctrl->szShortName)); 404 405 dprintf(("found control %s (%s) associated line %d", lpMlc->pamxctrl->szName, lpMlc->pamxctrl->szShortName, lpMlc->dwLineID)); 218 406 break; 407 } 219 408 220 409 case MIXER_GETLINECONTROLSF_ONEBYTYPE: … … 328 517 if(mixerControls[idx].dwControlType == lpMlc->u.dwControlType) { 329 518 memcpy(lpMlc->pamxctrl, &mixerControls[idx], sizeof(MIXERCONTROLA)); 330 dprintf(("found control %s (%s) ", lpMlc->pamxctrl->szName, lpMlc->pamxctrl->szShortName));519 dprintf(("found control %s (%s) control id %d", lpMlc->pamxctrl->szName, lpMlc->pamxctrl->szShortName, lpMlc->pamxctrl->dwControlID)); 331 520 return MMSYSERR_NOERROR; 332 521 } 333 522 334 523 } 335 return MIXERR_INVAL LINE;524 return MIXERR_INVALVALUE; 336 525 } 337 526 default: … … 402 591 DEVICE_STRUCT *pMixInfo = (DEVICE_STRUCT *)hmxobj; 403 592 404 if( fdwInfo &MIXER_OBJECTF_HMIXER) {593 if((fdwInfo & 0xF0000000) == MIXER_OBJECTF_HMIXER) { 405 594 if(!pMixInfo) { 406 595 return MMSYSERR_INVALHANDLE; … … 408 597 } 409 598 else 410 if((fdwInfo & MIXER_OBJECTF_MIXER) == MIXER_OBJECTF_MIXER) {411 if( hmxobj > 0) {599 if((fdwInfo & 0xF0000000) == MIXER_OBJECTF_MIXER) { 600 if(!HIWORD(hmxobj) && hmxobj > 0) { 412 601 return MMSYSERR_NODRIVER; 413 602 } … … 428 617 } 429 618 memcpy(lpMl, &mixerDest[lpMl->dwDestination], sizeof(MIXERLINEA)); 430 dprintf(("found line %s (%s) connections %d controls %d", lpMl->szName, lpMl->szShortName, lpMl->cConnections, lpMl->cControls));619 dprintf(("found line %s (%s) id %d connections %d controls %d", lpMl->szName, lpMl->szShortName, lpMl->dwLineID, lpMl->cConnections, lpMl->cControls)); 431 620 break; 432 621 … … 434 623 dprintf(("MIXER_GETLINEINFOF_LINEID %d", lpMl->dwLineID)); 435 624 if(lpMl->dwLineID >= nrLines) { 436 dprintf(("ERROR: Invalid destination%d", lpMl->dwLineID));625 dprintf(("ERROR: Invalid line %d", lpMl->dwLineID)); 437 626 return MIXERR_INVALLINE; 438 627 } … … 456 645 } 457 646 memcpy(lpMl, &mixerSource[mixerDestInputs[lpMl->dwDestination][lpMl->dwSource]], sizeof(MIXERLINEA)); 458 dprintf(("found line %s (%s) connections %d controls %d", lpMl->szName, lpMl->szShortName, lpMl->cConnections, lpMl->cControls));647 dprintf(("found line %s (%s) id %d connections %d controls %d", lpMl->szName, lpMl->szShortName, lpMl->dwLineID, lpMl->cConnections, lpMl->cControls)); 459 648 break; 460 649 … … 596 785 pmxcaps->fdwSupport = 0; //no mixer flags exist 597 786 pmxcaps->cDestinations = nrDestinations; 787 dprintf(("mixerGetDevCapsA: cDestinations %d", pmxcaps->cDestinations)); 598 788 } 599 789 … … 622 812 pmxcaps->fdwSupport = 0; //no mixer flags exist 623 813 pmxcaps->cDestinations = nrDestinations; 814 dprintf(("mixerGetDevCapsW: cDestinations %d", pmxcaps->cDestinations)); 624 815 } 625 816 … … 708 899 { 709 900 MIXERLINEA *pDestLine; 901 MIXERCONTROLA *pLineOutMix; 902 MIXERCONTROLA *pWaveInMux; 710 903 711 904 if(!fMMPMAvailable) return TRUE; … … 719 912 pDestLine = mixerAddDestination(MIXER_DEST_LINEOUT); 720 913 914 pLineOutMix = mixerAddControl(pDestLine, MIX_CTRL_MIX_OUT_LINE, pDestLine); 721 915 mixerAddControl(pDestLine, MIX_CTRL_VOL_OUT_LINE, pDestLine); 722 916 mixerAddControl(pDestLine, MIX_CTRL_MUTE_OUT_LINE, pDestLine); 917 pLineOutMix->cMultipleItems = pDestLine->cConnections; 723 918 724 919 //WaveIn destination 725 920 pDestLine = mixerAddDestination(MIXER_DEST_WAVEIN); 921 mixerAddControl(pDestLine, MIX_CTRL_MUX_IN_W_SRC, pDestLine); 726 922 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_MIC, pDestLine); 727 923 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_LINE, pDestLine); 728 //must add after all recording inputs (to count them) 729 mixerAddControl(pDestLine, MIX_CTRL_MUX_IN_W_SRC, pDestLine); 924 pWaveInMux->cMultipleItems = pDestLine->cConnections; 730 925 return TRUE; 731 926 } 732 927 //Line out destination 733 928 pDestLine = mixerAddDestination(MIXER_DEST_LINEOUT); 929 930 pLineOutMix = mixerAddControl(pDestLine, MIX_CTRL_MIX_OUT_LINE, pDestLine); 734 931 735 932 mixerAddControl(pDestLine, MIX_CTRL_VOL_OUT_LINE, pDestLine); … … 748 945 } 749 946 750 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_SPDIF)) { 751 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_SPDIF); 752 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_SPDIF, pLine); 753 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_SPDIF, pLine); 754 } 755 756 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_MONO)) { 757 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_MONOIN); 758 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_MONO, pLine); 759 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_MONO, pLine); 760 } 761 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_PHONE)) { 762 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_PHONE); 763 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_PHONE, pLine); 764 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_PHONE, pLine); 947 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_PCM)) { 948 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_PCM); 949 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_PCM, pLine); 950 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_PCM, pLine); 951 } 952 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_WAVETABLE)) { 953 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_WAVETABLE); 954 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_WAVETABLE, pLine); 955 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_WAVETABLE, pLine); 956 } 957 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_MIDI)) { 958 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_MIDI); 959 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_MIDI, pLine); 960 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_MIDI, pLine); 765 961 } 766 962 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_MIC)) { … … 782 978 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_CD, pLine); 783 979 } 980 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_AUX)) { 981 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_AUX); 982 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_AUX, pLine); 983 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_AUX, pLine); 984 } 985 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_SPDIF)) { 986 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_SPDIF); 987 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_SPDIF, pLine); 988 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_SPDIF, pLine); 989 } 990 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_MONO)) { 991 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_MONOIN); 992 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_MONO, pLine); 993 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_MONO, pLine); 994 } 995 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_PHONE)) { 996 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_PHONE); 997 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_PHONE, pLine); 998 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_PHONE, pLine); 999 } 784 1000 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_VIDEO)) { 785 1001 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_VIDEO); … … 787 1003 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_VIDEO, pLine); 788 1004 } 789 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_AUX)) { 790 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_AUX); 791 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_AUX, pLine); 792 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_AUX, pLine); 793 } 794 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_PCM)) { 795 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_PCM); 796 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_PCM, pLine); 797 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_PCM, pLine); 798 } 799 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_WAVETABLE)) { 800 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_WAVETABLE); 801 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_WAVETABLE, pLine); 802 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_WAVETABLE, pLine); 803 } 804 if(OSLibMixIsControlPresent(MIX_CTRL_VOL_IN_L_MIDI)) { 805 MIXERLINEA *pLine = mixerAddSource(pDestLine, MIXER_SRC_MIDI); 806 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_L_MIDI, pLine); 807 mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_MIDI, pLine); 808 } 1005 pLineOutMix->cMultipleItems = pDestLine->cConnections; 809 1006 810 1007 //Wave In Destination 811 1008 if(OSLibMixIsControlPresent(MIX_CTRL_MUX_IN_W_SRC)) { 812 1009 pDestLine = mixerAddDestination(MIXER_DEST_WAVEIN); 1010 pWaveInMux = mixerAddControl(pDestLine, MIX_CTRL_MUX_IN_W_SRC, pDestLine); 1011 1012 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_MIC)) { 1013 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_MIC, pDestLine); 1014 } 1015 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_LINE)) { 1016 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_LINE, pDestLine); 1017 } 1018 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_CD)) { 1019 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_CD, pDestLine); 1020 } 1021 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_AUX)) { 1022 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_AUX, pDestLine); 1023 } 1024 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_PCM)) { 1025 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_PCM, pDestLine); 1026 } 1027 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_WAVETABLE)) { 1028 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_WAVETABLE, pDestLine); 1029 } 1030 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_MIDI)) { 1031 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_MIDI, pDestLine); 1032 } 813 1033 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_MONO)) { 814 1034 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_MONO, pDestLine); … … 817 1037 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_PHONE, pDestLine); 818 1038 } 819 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_MIC)) {820 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_MIC, pDestLine);821 }822 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_LINE)) {823 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_LINE, pDestLine);824 }825 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_CD)) {826 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_CD, pDestLine);827 }828 1039 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_SPDIF)) { 829 1040 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_SPDIF, pDestLine); … … 832 1043 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_VIDEO, pDestLine); 833 1044 } 834 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_AUX)) { 835 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_AUX, pDestLine); 836 } 837 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_PCM)) { 838 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_PCM, pDestLine); 839 } 840 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_WAVETABLE)) { 841 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_WAVETABLE, pDestLine); 842 } 843 if(OSLibMixIsRecSourcePresent(MIX_CTRL_VOL_IN_W_MIDI)) { 844 mixerAddControl(pDestLine, MIX_CTRL_VOL_IN_W_MIDI, pDestLine); 845 } 846 //must add after all recording inputs (to count them) 847 mixerAddControl(pDestLine, MIX_CTRL_MUX_IN_W_SRC, pDestLine); 1045 pWaveInMux->cMultipleItems = pDestLine->cConnections; 848 1046 } 849 1047 … … 1062 1260 /******************************************************************************/ 1063 1261 /******************************************************************************/ 1064 static BOOLmixerAddControl(MIXERLINEA *pDestLine, DWORD dwControl, MIXERLINEA *pSrcLine)1262 static MIXERCONTROLA * mixerAddControl(MIXERLINEA *pDestLine, DWORD dwControl, MIXERLINEA *pSrcLine) 1065 1263 { 1066 1264 MIXERCONTROLA *pctrl = &mixerControls[nrControls]; … … 1069 1267 dprintf(("ERROR: mixerAddControl: out of room!!!")); 1070 1268 DebugInt3(); 1071 return FALSE;1269 return NULL; 1072 1270 } 1073 1271 … … 1079 1277 pctrl->fdwControl = 0; 1080 1278 switch(dwControl) { 1279 case MIX_CTRL_MIX_OUT_LINE: 1280 pctrl->fdwControl = MIXERCONTROL_CONTROLF_MULTIPLE | MIXERCONTROL_CONTROLF_UNIFORM; 1281 pctrl->dwControlType = MIXERCONTROL_CONTROLTYPE_MIXER; 1282 pctrl->Bounds.s.lMinimum = 0; 1283 pctrl->Bounds.s.lMaximum = 1; 1284 pctrl->Metrics.cSteps = 1; 1285 pctrl->cMultipleItems = 0; //to be filled in later (see caller) 1286 break; 1287 1288 case MIX_CTRL_MUX_IN_W_SRC: 1289 pctrl->fdwControl = MIXERCONTROL_CONTROLF_MULTIPLE | MIXERCONTROL_CONTROLF_UNIFORM; 1290 pctrl->dwControlType = MIXERCONTROL_CONTROLTYPE_MUX; 1291 pctrl->Bounds.s.lMinimum = 0; 1292 pctrl->Bounds.s.lMaximum = 1; 1293 pctrl->Metrics.cSteps = 1; 1294 pctrl->cMultipleItems = 0; //to be filled in later (see caller) 1295 break; 1296 1081 1297 case MIX_CTRL_VOL_OUT_LINE: 1082 1298 case MIX_CTRL_VOL_IN_L_MONO: … … 1172 1388 break; 1173 1389 1174 case MIX_CTRL_MUX_IN_W_SRC:1175 pctrl->fdwControl = MIXERCONTROL_CONTROLF_MULTIPLE | MIXERCONTROL_CONTROLF_UNIFORM;1176 pctrl->dwControlType = MIXERCONTROL_CONTROLTYPE_MUX;1177 pctrl->Bounds.s.lMinimum = 0;1178 pctrl->Bounds.s.lMaximum = 1;1179 pctrl->Metrics.cSteps = 1;1180 break;1181 1182 1390 case MIX_CTRL_OUT_L_TREBLE: 1183 1391 pctrl->dwControlType = MIXERCONTROL_CONTROLTYPE_TREBLE; … … 1200 1408 //increase nr of controls of corresponding destinateion line 1201 1409 pDestLine->cControls++; 1202 1410 1203 1411 //add control to list of controls associated with source line 1204 1412 for(int i=0;i<MAX_SOURCE_CONTROLS;i++) { … … 1214 1422 strncpy(pctrl->szShortName, szCtrlName[dwControl][0], sizeof(pctrl->szShortName)); 1215 1423 strncpy(pctrl->szName, szCtrlName[dwControl][1], sizeof(pctrl->szName)); 1424 1425 //save internal id 1426 mixerControlId[nrControls] = dwControl; 1216 1427 nrControls++; 1217 1428 dprintf(("Adding control %s (%s)", pctrl->szName, pctrl->szShortName)); 1218 return TRUE;1219 } 1220 /******************************************************************************/ 1221 /******************************************************************************/ 1222 1429 return pctrl; 1430 } 1431 /******************************************************************************/ 1432 /******************************************************************************/ 1433
Note:
See TracChangeset
for help on using the changeset viewer.