Add --j2k-bandwidth to dcpomatic_create. v2.13.158
authorCarl Hetherington <cth@carlh.net>
Tue, 30 Apr 2019 09:41:04 +0000 (09:41 +0000)
committerCarl Hetherington <cth@carlh.net>
Tue, 30 Apr 2019 09:41:04 +0000 (09:41 +0000)
src/lib/create_cli.cc
src/lib/create_cli.h
src/tools/dcpomatic_create.cc
test/create_cli_test.cc

index e1c5f1233cc45790fa12e918c23109cdd0cf6fca..ff0ba765401cb502bd6602e599490ac07f380316 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>
@@ -50,6 +51,7 @@ string CreateCLI::_help =
        "      --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";
 
@@ -93,6 +95,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;
@@ -139,6 +142,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) == "--") {
@@ -172,6 +176,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);
@@ -212,4 +220,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;
+       }
 }
index d0c81590cc87e9d97f2a500db2c4ea7ffda91208..a9d9daa22e2e0bbdc3d6a6e92d68f4f41240b9f8 100644 (file)
@@ -55,6 +55,7 @@ public:
        boost::optional<std::string> error;
        std::vector<Content> content;
        bool fourk;
+       boost::optional<int> j2k_bandwidth;
 
 private:
        static std::string _help;
index 6d36735e1e271baa81058f613fba391ec1ba9676..40d764c2b64e430e8c6fb6521d3fa760fd39571f 100644 (file)
@@ -101,6 +101,9 @@ main (int argc, char* argv[])
                film->set_encrypted (cc.encrypt);
                film->set_three_d (cc.threed);
                film->set_resolution (cc.fourk ? RESOLUTION_4K : RESOLUTION_2K);
+               if (cc.j2k_bandwidth) {
+                       film->set_j2k_bandwidth (*cc.j2k_bandwidth);
+               }
 
                BOOST_FOREACH (CreateCLI::Content i, cc.content) {
                        boost::filesystem::path const can = boost::filesystem::canonical (i.path);
index 7bb21546e5799a46da15935b86305018c8433e46..b92cb284b9e8532ba9efbfb16005e67580ad3b71 100644 (file)
@@ -151,4 +151,11 @@ BOOST_AUTO_TEST_CASE (create_cli_test)
        BOOST_CHECK_EQUAL (cc.content[0].path, "foo.mp4");
        BOOST_CHECK_EQUAL (cc.fourk, true);
        BOOST_CHECK (!cc.error);
+
+       cc = run ("dcpomatic2_create --j2k-bandwidth 120 --content-ratio 185 foo.mp4");
+       BOOST_REQUIRE_EQUAL (cc.content.size(), 1);
+       BOOST_CHECK_EQUAL (cc.content[0].path, "foo.mp4");
+       BOOST_REQUIRE (cc.j2k_bandwidth);
+       BOOST_CHECK_EQUAL (*cc.j2k_bandwidth, 120000000);
+       BOOST_CHECK (!cc.error);
 }