Set proper target type.

Set proper max and step for mux control.
This commit is contained in:
Robert Reif 2004-08-27 19:38:47 +00:00 committed by Alexandre Julliard
parent 7c1e9361a3
commit d7d1c3846b
1 changed files with 24 additions and 13 deletions

View File

@ -309,7 +309,9 @@ static void MIX_FillLineControls(struct mixer* mix, int c, DWORD lineID,
lstrcpynA(mc->ctrl.szShortName, "Mixer", MIXER_SHORT_NAME_CHARS); lstrcpynA(mc->ctrl.szShortName, "Mixer", MIXER_SHORT_NAME_CHARS);
lstrcpynA(mc->ctrl.szName, "Mixer", MIXER_LONG_NAME_CHARS); lstrcpynA(mc->ctrl.szName, "Mixer", MIXER_LONG_NAME_CHARS);
memset(&mc->ctrl.Bounds, 0, sizeof(mc->ctrl.Bounds)); memset(&mc->ctrl.Bounds, 0, sizeof(mc->ctrl.Bounds));
mc->ctrl.Bounds.s1.dwMaximum = mc->ctrl.cMultipleItems - 1;
memset(&mc->ctrl.Metrics, 0, sizeof(mc->ctrl.Metrics)); memset(&mc->ctrl.Metrics, 0, sizeof(mc->ctrl.Metrics));
mc->ctrl.Metrics.cSteps = mc->ctrl.cMultipleItems;
break; break;
default: default:
@ -630,15 +632,17 @@ static DWORD MIX_GetLineInfoDst(struct mixer* mix, LPMIXERLINEA lpMl,
lpMl->dwDestination = dst; lpMl->dwDestination = dst;
switch (dst) switch (dst)
{ {
case 0: case LINEID_SPEAKER:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mask = mix->devMask; mask = mix->devMask;
j = SOUND_MIXER_VOLUME; j = SOUND_MIXER_VOLUME;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_WAVEOUT;
break; break;
case 1: case LINEID_RECORD:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
mask = mix->recMask; mask = mix->recMask;
j = SOUND_MIXER_RECLEV; j = SOUND_MIXER_RECLEV;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_WAVEIN;
break; break;
default: default:
FIXME("shouldn't happen\n"); FIXME("shouldn't happen\n");
@ -691,26 +695,32 @@ static DWORD MIX_GetLineInfoSrc(struct mixer* mix, LPMIXERLINEA lpMl,
case SOUND_MIXER_SYNTH: case SOUND_MIXER_SYNTH:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE; lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_MIDIOUT;
break; break;
case SOUND_MIXER_CD: case SOUND_MIXER_CD:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;
lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE; lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_UNDEFINED;
break; break;
case SOUND_MIXER_LINE: case SOUND_MIXER_LINE:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_LINE; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_LINE;
lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE; lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_UNDEFINED;
break; break;
case SOUND_MIXER_MIC: case SOUND_MIXER_MIC:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE; lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_WAVEIN;
break; break;
case SOUND_MIXER_PCM: case SOUND_MIXER_PCM:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE; lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_WAVEOUT;
break; break;
case SOUND_MIXER_IMIX: case SOUND_MIXER_IMIX:
lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED; lpMl->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED;
lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE; lpMl->fdwLine |= MIXERLINE_LINEF_SOURCE;
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_UNDEFINED;
break; break;
default: default:
WARN("Index %ld not handled.\n", idx); WARN("Index %ld not handled.\n", idx);
@ -797,8 +807,8 @@ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINEA lpMl, DWORD fdwInfo)
lpMl->dwDestination); lpMl->dwDestination);
switch (lpMl->dwDestination) switch (lpMl->dwDestination)
{ {
case 0: mask = mix->devMask; break; case LINEID_SPEAKER: mask = mix->devMask; break;
case 1: mask = mix->recMask; break; case LINEID_RECORD: mask = mix->recMask; break;
default: default:
WARN("invalid parameter\n"); WARN("invalid parameter\n");
return MMSYSERR_INVALPARAM; return MMSYSERR_INVALPARAM;
@ -893,15 +903,16 @@ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINEA lpMl, DWORD fdwInfo)
break; break;
} }
lpMl->Target.dwType = MIXERLINE_TARGETTYPE_AUX; /* FIXME */ if ((fdwInfo & MIXER_GETLINEINFOF_QUERYMASK) != MIXER_GETLINEINFOF_TARGETTYPE) {
lpMl->Target.dwDeviceID = 0xFFFFFFFF; lpMl->Target.dwDeviceID = 0xFFFFFFFF;
lpMl->Target.wMid = WINE_MIXER_MANUF_ID; lpMl->Target.wMid = WINE_MIXER_MANUF_ID;
lpMl->Target.wPid = WINE_MIXER_PRODUCT_ID; lpMl->Target.wPid = WINE_MIXER_PRODUCT_ID;
lpMl->Target.vDriverVersion = WINE_MIXER_VERSION; lpMl->Target.vDriverVersion = WINE_MIXER_VERSION;
if (mix->name) if (mix->name)
strcpy(lpMl->Target.szPname, mix->name); strcpy(lpMl->Target.szPname, mix->name);
else else
strcpy(lpMl->Target.szPname, WINE_MIXER_NAME); strcpy(lpMl->Target.szPname, WINE_MIXER_NAME);
}
return ret; return ret;
} }