winealsa.drv: Rewrite channel counting for additional readability and circumvention of a couple of crashes.

This commit is contained in:
Jeff Cook 2010-10-10 22:10:53 -06:00 committed by Alexandre Julliard
parent e96d3d538a
commit 0b4c99cd7d
1 changed files with 6 additions and 4 deletions

View File

@ -491,7 +491,10 @@ static void ALSA_MixerInit(void)
for (elem = snd_mixer_first_elem(mixdev[mixnum].mix); elem; elem = snd_mixer_elem_next(elem)) for (elem = snd_mixer_first_elem(mixdev[mixnum].mix); elem; elem = snd_mixer_elem_next(elem))
if (!strcasecmp(snd_mixer_selem_get_name(elem), "Master") && !mastelem) if (!strcasecmp(snd_mixer_selem_get_name(elem), "Master") && !mastelem)
{
mastelem = elem; mastelem = elem;
++(mixdev[mixnum].chans);
}
else if (!strcasecmp(snd_mixer_selem_get_name(elem), "Capture") && !captelem) else if (!strcasecmp(snd_mixer_selem_get_name(elem), "Capture") && !captelem)
captelem = elem; captelem = elem;
else if (!strcasecmp(snd_mixer_selem_get_name(elem), "Mic") && !micelem && !mastelem && total_elems == 1) else if (!strcasecmp(snd_mixer_selem_get_name(elem), "Mic") && !micelem && !mastelem && total_elems == 1)
@ -517,13 +520,12 @@ static void ALSA_MixerInit(void)
headelem = elem; headelem = elem;
else if (!strcasecmp(snd_mixer_selem_get_name(elem), "PCM") && !pcmelem) else if (!strcasecmp(snd_mixer_selem_get_name(elem), "PCM") && !pcmelem)
pcmelem = elem; pcmelem = elem;
else ++(mixdev[mixnum].chans);
++(mixdev[mixnum].chans);
} }
} }
/* Add master channel, uncounted channels and an extra for capture */ /* Add dummy capture channel, wanted by Windows */
mixdev[mixnum].chans += !!mastelem + !!headelem + !!pcmelem + 1; mixdev[mixnum].chans += 1;
/* If there is only 'Capture' and 'Master', this device is not worth it */ /* If there is only 'Capture' and 'Master', this device is not worth it */
if (mixdev[mixnum].chans == 2) if (mixdev[mixnum].chans == 2)