+ std::function<optional<dcp::Channel> (string)> convert_channel = [](string channel) -> optional<dcp::Channel>{
+ if (channel == "L") {
+ return dcp::Channel::LEFT;
+ } else if (channel == "R") {
+ return dcp::Channel::RIGHT;
+ } else if (channel == "C") {
+ return dcp::Channel::CENTRE;
+ } else if (channel == "Lfe") {
+ return dcp::Channel::LFE;
+ } else if (channel == "Ls") {
+ return dcp::Channel::LS;
+ } else if (channel == "Rs") {
+ return dcp::Channel::RS;
+ } else {
+ return {};
+ }
+ };
+
+ argument_option(i, argc, argv, "", "--channel", &claimed, &error, &channel, convert_channel);
+ argument_option(i, argc, argv, "", "--gain", &claimed, &error, &gain);
+ argument_option(i, argc, argv, "", "--kdm", &claimed, &error, &kdm, string_to_path);
+ /* It shouldn't be necessary to use this string_to_string here, but using the other argument_option()
+ * causes an odd compile error on Ubuntu 18.04.
+ */
+ argument_option(i, argc, argv, "", "--cpl", &claimed, &error, &cpl, string_to_string);
+