Add --kdm option to dcpomatic_create
authorCarl Hetherington <cth@carlh.net>
Fri, 28 Jan 2022 19:36:26 +0000 (20:36 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 9 Mar 2022 16:04:02 +0000 (17:04 +0100)
src/lib/create_cli.cc
src/lib/create_cli.h
src/tools/dcpomatic_create.cc

index 311e936900ab0bbcfc8f6fb07e117329ac7ad420..2ca17f91b002ba4b8339c5afb2945a04a48f3165 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2019-2021 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2019-2022 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -56,7 +56,8 @@ string CreateCLI::_help =
        "      --left-eye                next piece of content is for the left eye\n"
        "      --right-eye               next piece of content is for the right eye\n"
        "      --channel <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";
+       "      --gain                    next piece of content should have the given audio gain (in dB)\n"
+       "      --kdm <file>              KDM for next piece of content\n";
 
 
 template <class T>
@@ -136,6 +137,7 @@ CreateCLI::CreateCLI (int argc, char* argv[])
        auto next_frame_type = VideoFrameType::TWO_D;
        optional<dcp::Channel> channel;
        optional<float> gain;
+       optional<boost::filesystem::path> kdm;
 
        int i = 1;
        while (i < argc) {
@@ -207,6 +209,7 @@ CreateCLI::CreateCLI (int argc, char* argv[])
 
                argument_option(i, argc, argv, "", "--channel", &claimed, &error, &channel, convert_channel);
                argument_option(i, argc, argv, "", "--gain", &claimed, &error, &gain);
+               argument_option(i, argc, argv, "", "--kdm", &claimed, &error, &kdm, string_to_path);
 
                if (!claimed) {
                        if (a.length() > 2 && a.substr(0, 2) == "--") {
@@ -218,6 +221,7 @@ CreateCLI::CreateCLI (int argc, char* argv[])
                                c.frame_type = next_frame_type;
                                c.channel = channel;
                                c.gain = gain;
+                               c.kdm = kdm;
                                content.push_back (c);
                                next_frame_type = VideoFrameType::TWO_D;
                                channel = {};
index 177d56f7b908c83d16efec67b51e3c93ae40e05d..e6fa69378b479455e36a8d8a3444f78343651793 100644 (file)
@@ -40,6 +40,7 @@ public:
                VideoFrameType frame_type;
                boost::optional<dcp::Channel> channel;
                boost::optional<float> gain;
+               boost::optional<boost::filesystem::path> kdm;
        };
 
        bool version;
index e4452b19a431229beac4d9b08aca1303af67213c..44c7987bcd661eed59d2085b5be1a8ce65842a3e 100644 (file)
@@ -120,7 +120,9 @@ main (int argc, char* argv[])
                        list<shared_ptr<Content>> film_content_list;
 
                        if (boost::filesystem::exists (can / "ASSETMAP") || (boost::filesystem::exists (can / "ASSETMAP.xml"))) {
-                               film_content_list.push_back (make_shared<DCPContent>(can));
+                               auto dcp = make_shared<DCPContent>(can);
+                               film_content_list.push_back (dcp);
+                               dcp->add_kdm (dcp::EncryptedKDM(dcp::file_to_string(*cli_content.kdm)));
                        } else {
                                /* I guess it's not a DCP */
                                film_content_list = content_factory (can);