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:
parent
b00baa8ac2
commit
c87ef15e82
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user