ao_coreaudio_chmap: allow stereo as fallback; avoid mono fallback

If no channel layouts were determined (which can actually happen with
some "strange" devices), the selection code was falling back to mono,
because mono is always added as a fallback. This doesn't seem quite
right.

Allow a fallback to stereo too, if no channel layout could be retrieved
at all. So we always assume that mono and stereo work, if no other
layouts are available.

(I still don't know what the CoreAudio stereo layout is supposed to do.
It could be used to swap left and right channels. It could also be used
to pad/move the channels, but I have never seen that. And it can be set
to non-stereo channels, which breaks mpv. Whatever.)
This commit is contained in:
wm4 2015-10-26 15:54:45 +01:00
parent 9ed289ef90
commit c971fefd41
1 changed files with 5 additions and 2 deletions

View File

@ -242,8 +242,6 @@ bool ca_init_chmap(struct ao *ao, AudioDeviceID device)
struct mp_chmap_sel chmap_sel = {.tmp = ta_ctx}; struct mp_chmap_sel chmap_sel = {.tmp = ta_ctx};
struct mp_chmap chmap = {0}; struct mp_chmap chmap = {0};
mp_chmap_sel_add_map(&chmap_sel, &(struct mp_chmap)MP_CHMAP_INIT_MONO);
AudioChannelLayout *ml = ca_query_layout(ao, device, ta_ctx); AudioChannelLayout *ml = ca_query_layout(ao, device, ta_ctx);
if (ml && ca_layout_to_mp_chmap(ao, ml, &chmap)) if (ml && ca_layout_to_mp_chmap(ao, ml, &chmap))
mp_chmap_sel_add_map(&chmap_sel, &chmap); mp_chmap_sel_add_map(&chmap_sel, &chmap);
@ -252,6 +250,11 @@ bool ca_init_chmap(struct ao *ao, AudioDeviceID device)
if (sl && ca_layout_to_mp_chmap(ao, sl, &chmap)) if (sl && ca_layout_to_mp_chmap(ao, sl, &chmap))
mp_chmap_sel_add_map(&chmap_sel, &chmap); mp_chmap_sel_add_map(&chmap_sel, &chmap);
if (!chmap_sel.num_chmaps)
mp_chmap_sel_add_map(&chmap_sel, &(struct mp_chmap)MP_CHMAP_INIT_STEREO);
mp_chmap_sel_add_map(&chmap_sel, &(struct mp_chmap)MP_CHMAP_INIT_MONO);
if (!ao_chmap_sel_adjust(ao, &chmap_sel, &ao->channels)) { if (!ao_chmap_sel_adjust(ao, &chmap_sel, &ao->channels)) {
MP_ERR(ao, "could not select a suitable channel map among the " MP_ERR(ao, "could not select a suitable channel map among the "
"hardware supported ones. Make sure to configure your " "hardware supported ones. Make sure to configure your "