bool ca_init_chmap(struct ao *ao, AudioDeviceID device) { void *ta_ctx = talloc_new(NULL); struct mp_chmap_sel chmap_sel = {.tmp = ta_ctx}; struct mp_chmap chmap = {0}; AudioChannelLayout *ml = ca_query_layout(ao, device, ta_ctx); if (ml && ca_layout_to_mp_chmap(ao, ml, &chmap)) mp_chmap_sel_add_map(&chmap_sel, &chmap); AudioChannelLayout *sl = ca_query_stereo_layout(ao, device, ta_ctx); if (sl && ca_layout_to_mp_chmap(ao, sl, &chmap)) mp_chmap_sel_add_map(&chmap_sel, &chmap); if (!ao_chmap_sel_adjust(ao, &chmap_sel, &ao->channels)) { MP_ERR(ao, "could not select a suitable channel map among the " "hardware supported ones. Make sure to configure your " "output device correctly in 'Audio MIDI Setup.app'\n"); goto coreaudio_error; } talloc_free(ta_ctx); return true; coreaudio_error: talloc_free(ta_ctx); return false; }
static void ca_retrieve_layouts(struct ao *ao, struct mp_chmap_sel *s, AudioDeviceID device) { void *ta_ctx = talloc_new(NULL); struct mp_chmap chmap; AudioChannelLayout *ml = ca_query_layout(ao, device, ta_ctx); if (ml && ca_layout_to_mp_chmap(ao, ml, &chmap)) mp_chmap_sel_add_map(s, &chmap); AudioChannelLayout *sl = ca_query_stereo_layout(ao, device, ta_ctx); if (sl && ca_layout_to_mp_chmap(ao, sl, &chmap)) mp_chmap_sel_add_map(s, &chmap); talloc_free(ta_ctx); }