Extract common code out into kdm_for_screen()
[dcpomatic.git] / src / lib / create_cli.cc
index 94e984fcf81ef1ee6347e5e01fc732188eef0725..878ee6fddd7fb7ce8ff6719366028164a577b802 100644 (file)
@@ -21,6 +21,7 @@
 #include "create_cli.h"
 #include "dcp_content_type.h"
 #include "ratio.h"
+#include "config.h"
 #include "compose.hpp"
 #include <dcp/raw_convert.h>
 #include <string>
@@ -47,8 +48,10 @@ 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 <dir>            directory containing config.xml and cinemas.xml\n"
+       "      --fourk                   make a 4K DCP rather than a 2K one\n"
        "  -o, --output <dir>            output directory\n"
        "      --threed                  make a 3D DCP\n"
+       "      --j2k-bandwidth <Mbit/s>  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";
 
@@ -75,13 +78,13 @@ CreateCLI::CreateCLI (int argc, char* argv[])
        , encrypt (false)
        , threed (false)
        , dcp_content_type (0)
-       , dcp_frame_rate (24)
        , container_ratio (0)
        , content_ratio (0)
        , still_length (10)
        , standard (dcp::SMPTE)
        , no_use_isdcf_name (false)
        , no_sign (false)
+       , fourk (false)
 {
        string dcp_content_type_string = "TST";
        string content_ratio_string;
@@ -91,6 +94,7 @@ CreateCLI::CreateCLI (int argc, char* argv[])
        string template_name_string;
        string config_dir_string;
        string output_dir_string;
+       int j2k_bandwidth_int = 0;
        VideoFrameType next_frame_type = VIDEO_FRAME_TYPE_2D;
 
        int i = 1;
@@ -122,6 +126,9 @@ CreateCLI::CreateCLI (int argc, char* argv[])
                } else if (a == "--right-eye") {
                        next_frame_type = VIDEO_FRAME_TYPE_3D_RIGHT;
                        claimed = true;
+               } else if (a == "--fourk") {
+                       fourk = true;
+                       claimed = true;
                }
 
                argument_option(i, argc, argv, "-n", "--name",             &claimed, &error, &name);
@@ -134,6 +141,7 @@ CreateCLI::CreateCLI (int argc, char* argv[])
                argument_option(i, argc, argv, "",   "--standard",         &claimed, &error, &standard_string);
                argument_option(i, argc, argv, "",   "--config",           &claimed, &error, &config_dir_string);
                argument_option(i, argc, argv, "-o", "--output",           &claimed, &error, &output_dir_string);
+               argument_option(i, argc, argv, "",   "--j2k-bandwidth",    &claimed, &error, &j2k_bandwidth_int);
 
                if (!claimed) {
                        if (a.length() > 2 && a.substr(0, 2) == "--") {
@@ -167,6 +175,10 @@ CreateCLI::CreateCLI (int argc, char* argv[])
                dcp_frame_rate = dcp_frame_rate_int;
        }
 
+       if (j2k_bandwidth_int) {
+               j2k_bandwidth = j2k_bandwidth_int * 1000000;
+       }
+
        dcp_content_type = DCPContentType::from_isdcf_name(dcp_content_type_string);
        if (!dcp_content_type) {
                error = String::compose("%1: unrecognised DCP content type '%2'", argv[0], dcp_content_type_string);
@@ -207,4 +219,9 @@ CreateCLI::CreateCLI (int argc, char* argv[])
        if (name.empty()) {
                name = content[0].path.leaf().string();
        }
+
+       if (j2k_bandwidth && (*j2k_bandwidth < 10000000 || *j2k_bandwidth > Config::instance()->maximum_j2k_bandwidth())) {
+               error = String::compose("%1: j2k-bandwidth must be between 10 and %2 Mbit/s", argv[0], (Config::instance()->maximum_j2k_bandwidth() / 1000000));
+               return;
+       }
 }