--- /dev/null
+/*
+ Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcp_digest_file.h"
+#include "warnings.h"
+#include <dcp/cpl.h>
+#include <dcp/mxf.h>
+#include <dcp/reel.h>
+#include <dcp/reel_picture_asset.h>
+#include <dcp/reel_sound_asset.h>
+#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_smpte_subtitle_asset.h>
+DCPOMATIC_DISABLE_WARNINGS
+#include <libxml++/libxml++.h>
+DCPOMATIC_ENABLE_WARNINGS
+
+
+using std::dynamic_pointer_cast;
+using std::shared_ptr;
+using std::string;
+
+
+template <class R, class A>
+void add_asset(string key, shared_ptr<R> reel_asset, shared_ptr<A> asset, xmlpp::Element* reel, string name)
+{
+ if (asset) {
+ auto out = reel->add_child(name);
+ out->add_child("Id")->add_child_text("urn:uuid:" + asset->id());
+ if (reel_asset->annotation_text()) {
+ out->add_child("AnnotationText")->add_child_text(reel_asset->annotation_text().get());
+ }
+ if (asset->key_id()) {
+ out->add_child("KeyId")->add_child_text("urn:uuid:" + asset->key_id().get());
+ out->add_child("Key")->add_child_text(key);
+ }
+ }
+};
+
+
+void
+write_dcp_digest_file (
+ boost::filesystem::path path,
+ shared_ptr<dcp::CPL> cpl,
+ string key
+ )
+{
+ xmlpp::Document doc;
+ auto root = doc.create_root_node("FHG_DCP_DIGEST", "http://www.fhg.de/2009/04/02/dcpdig");
+ root->add_child("InteropMode")->add_child_text(cpl->standard() == dcp::Standard::INTEROP ? "true" : "false");
+ auto composition = root->add_child("CompositionList")->add_child("Composition");
+ composition->add_child("Id")->add_child_text("urn:uuid:" + cpl->id());
+ composition->add_child("AnnotationText")->add_child_text(cpl->annotation_text().get_value_or(""));
+ composition->add_child("ContentTitleText")->add_child_text(cpl->content_title_text());
+ auto reel_list = composition->add_child("ReelList");
+ for (auto in_reel: cpl->reels()) {
+ auto out_reel = reel_list->add_child("Reel");
+ out_reel->add_child("Id")->add_child_text("urn:uuid:" + in_reel->id());
+ out_reel->add_child("AnnotationText");
+ if (in_reel->main_picture()) {
+ add_asset(key, in_reel->main_picture(), in_reel->main_picture()->asset(), out_reel, "MainPicture");
+ }
+ if (in_reel->main_sound()) {
+ add_asset(key, in_reel->main_sound(), in_reel->main_sound()->asset(), out_reel, "MainSound");
+ }
+ if (auto smpte_sub = dynamic_pointer_cast<dcp::ReelSMPTESubtitleAsset>(in_reel->main_subtitle())) {
+ add_asset(key, smpte_sub, smpte_sub->smpte_asset(), out_reel, "MainSubtitle");
+ }
+ }
+ doc.write_to_file_formatted(path.string());
+}
+
--- /dev/null
+/*
+ Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include <dcp/dcp.h>
+#include <boost/filesystem.hpp>
+
+
+extern void write_dcp_digest_file (boost::filesystem::path filename, std::shared_ptr<dcp::CPL> cpl, std::string key);
+
/*
- Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2021-2022 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "config.h"
+#include "dcp_content.h"
+#include "dcp_digest_file.h"
#include "dcp_transcode_job.h"
#include "film.h"
#include "job_manager.h"
#include "upload_job.h"
+#include <dcp/cpl.h>
+#include <dcp/search.h>
using std::make_shared;
if (Config::instance()->upload_after_make_dcp()) {
JobManager::instance()->add(make_shared<UploadJob>(_film));
}
+
+ dcp::DCP dcp(_film->dir(_film->dcp_name()));
+ dcp.read();
+
+ for (auto cpl: dcp.cpls()) {
+ write_dcp_digest_file (_film->file(cpl->annotation_text().get_value_or(cpl->id()) + ".dcpdig"), cpl, _film->key().hex());
+ }
}
+
--- /dev/null
+/*
+ Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "lib/content_factory.h"
+#include "lib/dcp_digest_file.h"
+#include "lib/film.h"
+#include "test.h"
+#include <dcp/dcp.h>
+#include <boost/test/unit_test.hpp>
+
+
+BOOST_AUTO_TEST_CASE (dcp_digest_file_test)
+{
+ dcp::DCP dcp("test/data/dcp_digest_test_dcp");
+ dcp.read ();
+ BOOST_REQUIRE_EQUAL (dcp.cpls().size(), 1U);
+
+ write_dcp_digest_file ("build/test/digest.xml", dcp.cpls()[0], "e684e49e89182e907dabe5d9b3bd81ba");
+
+ check_xml ("test/data/digest.xml", "build/test/digest.xml", {});
+}
+