From d6e7451225ededfc352b3e17b50f91afccca03a3 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 30 Apr 2019 09:41:04 +0000 Subject: [PATCH] Add --j2k-bandwidth to dcpomatic_create. --- src/lib/create_cli.cc | 13 +++++++++++++ src/lib/create_cli.h | 1 + src/tools/dcpomatic_create.cc | 3 +++ test/create_cli_test.cc | 7 +++++++ 4 files changed, 24 insertions(+) diff --git a/src/lib/create_cli.cc b/src/lib/create_cli.cc index e1c5f1233..ff0ba7654 100644 --- a/src/lib/create_cli.cc +++ b/src/lib/create_cli.cc @@ -21,6 +21,7 @@ #include "create_cli.h" #include "dcp_content_type.h" #include "ratio.h" +#include "config.h" #include "compose.hpp" #include #include @@ -50,6 +51,7 @@ string CreateCLI::_help = " --fourk make a 4K DCP rather than a 2K one\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"; @@ -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; + } } diff --git a/src/lib/create_cli.h b/src/lib/create_cli.h index d0c81590c..a9d9daa22 100644 --- a/src/lib/create_cli.h +++ b/src/lib/create_cli.h @@ -55,6 +55,7 @@ public: boost::optional error; std::vector content; bool fourk; + boost::optional j2k_bandwidth; private: static std::string _help; diff --git a/src/tools/dcpomatic_create.cc b/src/tools/dcpomatic_create.cc index 6d36735e1..40d764c2b 100644 --- a/src/tools/dcpomatic_create.cc +++ b/src/tools/dcpomatic_create.cc @@ -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); diff --git a/test/create_cli_test.cc b/test/create_cli_test.cc index 7bb21546e..b92cb284b 100644 --- a/test/create_cli_test.cc +++ b/test/create_cli_test.cc @@ -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); } -- 2.30.2