mirror of https://github.com/mpv-player/mpv
ao_alsa: set fallback if format unknown
The snd_pcm_hw_params_test_format() call actually crashes in alsa-lib if called with SND_PCM_FORMAT_UNKNOWN, so the already existing fallback code won't work in this case.
This commit is contained in:
parent
ecc6e379b2
commit
f5aec5a2a7
|
@ -444,8 +444,6 @@ static int init(struct ao *ao, char *params)
|
||||||
|
|
||||||
snd_lib_error_set_handler(alsa_error_handler);
|
snd_lib_error_set_handler(alsa_error_handler);
|
||||||
|
|
||||||
p->alsa_fmt = find_alsa_format(ao->format);
|
|
||||||
|
|
||||||
//subdevice parsing
|
//subdevice parsing
|
||||||
// set defaults
|
// set defaults
|
||||||
block = 1;
|
block = 1;
|
||||||
|
@ -516,8 +514,12 @@ static int init(struct ao *ao, char *params)
|
||||||
(p->alsa, alsa_hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
|
(p->alsa, alsa_hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
|
||||||
CHECK_ALSA_ERROR("Unable to set access type");
|
CHECK_ALSA_ERROR("Unable to set access type");
|
||||||
|
|
||||||
/* workaround for nonsupported formats
|
p->alsa_fmt = find_alsa_format(ao->format);
|
||||||
sets default format to S16_LE if the given formats aren't supported */
|
if (p->alsa_fmt == SND_PCM_FORMAT_UNKNOWN) {
|
||||||
|
p->alsa_fmt = SND_PCM_FORMAT_S16;
|
||||||
|
ao->format = AF_FORMAT_S16_NE;
|
||||||
|
}
|
||||||
|
|
||||||
err = snd_pcm_hw_params_test_format(p->alsa, alsa_hwparams, p->alsa_fmt);
|
err = snd_pcm_hw_params_test_format(p->alsa, alsa_hwparams, p->alsa_fmt);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
mp_tmsg(MSGT_AO, MSGL_INFO, "[AO_ALSA] Format %s is not supported "
|
mp_tmsg(MSGT_AO, MSGL_INFO, "[AO_ALSA] Format %s is not supported "
|
||||||
|
|
Loading…
Reference in New Issue