X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcreate_cli.cc;h=26f3dbcae0b80b2ba9cc7235658590fd1eb857c8;hb=09f8b57ac237c98eae648fc31093cf22495db740;hp=8ea4e143f4efd381a46d1f5089698638c0d6f0c4;hpb=fa8110dfc53d53e33fffb4bda717ba154a3d8afd;p=dcpomatic.git diff --git a/src/lib/create_cli.cc b/src/lib/create_cli.cc index 8ea4e143f..26f3dbcae 100644 --- a/src/lib/create_cli.cc +++ b/src/lib/create_cli.cc @@ -49,12 +49,15 @@ string CreateCLI::_help = " --no-use-isdcf-name do not use an ISDCF name; use the specified name unmodified\n" " --no-sign do not sign the DCP\n" " --config directory containing config.xml and cinemas.xml\n" - " --fourk make a 4K DCP rather than a 2K one\n" + " --twok make a 2K DCP instead of choosing a resolution based on the content\n" + " --fourk make a 4K DCP instead of choosing a resolution based on the content\n" " -o, --output output directory\n" " --threed make a 3D DCP\n" " --j2k-bandwidth J2K bandwidth in Mbit/s\n" " --left-eye next piece of content is for the left eye\n" - " --right-eye next piece of content is for the right eye\n"; + " --right-eye next piece of content is for the right eye\n" + " --channel next piece of content should be mapped to audio channel L, R, C, Lfe, Ls or Rs\n" + " --gain next piece of content should have the given audio gain (in dB)\n"; template @@ -100,7 +103,15 @@ argument_option ( return; } - *out = convert(argv[++n]); + auto const arg = argv[++n]; + auto const value = convert(arg); + if (!value) { + *error = String::compose("%1: %2 is not valid for %3", argv[0], arg, long_name); + *claimed = true; + return; + } + + *out = value; *claimed = true; } @@ -114,6 +125,7 @@ CreateCLI::CreateCLI (int argc, char* argv[]) , still_length (10) , standard (dcp::Standard::SMPTE) , no_use_isdcf_name (false) + , twok (false) , fourk (false) { string dcp_content_type_string = "TST"; @@ -123,6 +135,8 @@ CreateCLI::CreateCLI (int argc, char* argv[]) string template_name_string; int j2k_bandwidth_int = 0; auto next_frame_type = VideoFrameType::TWO_D; + optional channel; + optional gain; int i = 1; while (i < argc) { @@ -151,6 +165,9 @@ CreateCLI::CreateCLI (int argc, char* argv[]) } else if (a == "--right-eye") { next_frame_type = VideoFrameType::THREE_D_RIGHT; claimed = true; + } else if (a == "--twok") { + twok = true; + claimed = true; } else if (a == "--fourk") { fourk = true; claimed = true; @@ -171,6 +188,27 @@ CreateCLI::CreateCLI (int argc, char* argv[]) argument_option(i, argc, argv, "-o", "--output", &claimed, &error, &output_dir, string_to_path); argument_option(i, argc, argv, "", "--j2k-bandwidth", &claimed, &error, &j2k_bandwidth_int); + std::function (string)> convert_channel = [](string channel) -> optional{ + 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); + if (!claimed) { if (a.length() > 2 && a.substr(0, 2) == "--") { error = String::compose("%1: unrecognised option '%2'", argv[0], a) + String::compose(_help, argv[0]); @@ -179,8 +217,12 @@ CreateCLI::CreateCLI (int argc, char* argv[]) Content c; c.path = a; c.frame_type = next_frame_type; + c.channel = channel; + c.gain = gain; content.push_back (c); next_frame_type = VideoFrameType::TWO_D; + channel = {}; + gain = {}; } }