diff options
author | wm4 <wm4@nowhere> | 2015-04-27 23:18:54 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-04-27 23:21:58 +0200 |
commit | 570f4b136f43c60a16a433715768828a864f0e0a (patch) | |
tree | 040d6a702ca498acd0fe8f7cbea80a27054c5d6a /audio/out | |
parent | d2292c179c62fed462acf7ae428c0ba8a26ef07e (diff) | |
download | mpv-570f4b136f43c60a16a433715768828a864f0e0a.tar.bz2 mpv-570f4b136f43c60a16a433715768828a864f0e0a.tar.xz |
ao_null: add an option for testing channel layout selection
Diffstat (limited to 'audio/out')
-rw-r--r-- | audio/out/ao_null.c | 18 |
1 files changed, 16 insertions, 2 deletions
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} }, }; |