From 570f4b136f43c60a16a433715768828a864f0e0a Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 27 Apr 2015 23:18:54 +0200 Subject: ao_null: add an option for testing channel layout selection --- audio/out/ao_null.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'audio') diff --git a/audio/out/ao_null.c b/audio/out/ao_null.c index 0b5ff34ba2..0af0a97b96 100644 --- a/audio/out/ao_null.c +++ b/audio/out/ao_null.c @@ -56,6 +56,8 @@ struct priv { // called with sizes not aligned to this, a rounded size will be returned. // (This is not needed by the AO API, but many AOs behave this way.) int outburst; // samples + + char **channel_layouts; }; static void drain(struct ao *ao) @@ -88,8 +90,19 @@ static int init(struct ao *ao) ao->untimed = priv->untimed; - struct mp_chmap_sel sel = {0}; - mp_chmap_sel_add_any(&sel); + struct mp_chmap_sel sel = {.tmp = ao}; + if (priv->channel_layouts) { + for (int n = 0; priv->channel_layouts[n]; n++) { + struct mp_chmap map = {0}; + if (!mp_chmap_from_str(&map, bstr0(priv->channel_layouts[n]))) { + MP_FATAL(ao, "Invalid channel map in option.\n"); + return -1; + } + mp_chmap_sel_add_map(&sel, &map); + } + } else { + mp_chmap_sel_add_any(&sel); + } if (!ao_chmap_sel_adjust(ao, &sel, &ao->channels)) mp_chmap_from_channels(&ao->channels, 2); @@ -231,6 +244,7 @@ const struct ao_driver audio_out_null = { OPT_FLOATRANGE("latency", latency_sec, 0, 0, 100), OPT_FLAG("broken-eof", broken_eof, 0), OPT_FLAG("broken-delay", broken_delay, 0), + OPT_STRINGLIST("channel-layouts", channel_layouts, 0), {0} }, }; -- cgit v1.2.3