ALSA: configure capture settings before playback

This fixes an issue with some soundcards e.g. "AxeFx III".
Device configuration fails unless set_hwpar() is performed
for the capture device before configuring the playack
device (half duplex is fine, too).
This commit is contained in:
Robin Gareus 2020-11-04 14:46:49 +01:00
parent b00baa8ac2
commit c87ef15e82
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -438,22 +438,8 @@ void Alsa_pcmi::initialise (const char *play_name, const char *capt_name, const
}
}
/* devices opened, now perform hardware config */
_state = -2;
if (_play_handle)
{
if (snd_pcm_hw_params_malloc (&_play_hwpar) < 0)
{
if (_debug & DEBUG_INIT) fprintf (stderr, "Alsa_pcmi: can't allocate playback hw params\n");
return;
}
if (snd_pcm_sw_params_malloc (&_play_swpar) < 0)
{
if (_debug & DEBUG_INIT) fprintf (stderr, "Alsa_pcmi: can't allocate playback sw params\n");
return;
}
if (set_hwpar (_play_handle, _play_hwpar, "playback", _play_nfrag, &_play_nchan) < 0) return;
if (set_swpar (_play_handle, _play_swpar, "playback") < 0) return;
}
if (_capt_handle)
{
@ -471,6 +457,24 @@ void Alsa_pcmi::initialise (const char *play_name, const char *capt_name, const
if (set_swpar (_capt_handle, _capt_swpar, "capture") < 0) return;
}
if (_play_handle)
{
if (snd_pcm_hw_params_malloc (&_play_hwpar) < 0)
{
if (_debug & DEBUG_INIT) fprintf (stderr, "Alsa_pcmi: can't allocate playback hw params\n");
return;
}
if (snd_pcm_sw_params_malloc (&_play_swpar) < 0)
{
if (_debug & DEBUG_INIT) fprintf (stderr, "Alsa_pcmi: can't allocate playback sw params\n");
return;
}
if (set_hwpar (_play_handle, _play_hwpar, "playback", _play_nfrag, &_play_nchan) < 0) return;
if (set_swpar (_play_handle, _play_swpar, "playback") < 0) return;
}
/* devices are configured, now confirm settings and setup format conversion */
if (_play_handle)
{
if (snd_pcm_hw_params_get_rate (_play_hwpar, &fsamp, &dir) || (fsamp != _fsamp) || dir)