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 = {};
}
}