summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-11-24 01:29:11 +0100
committerCarl Hetherington <cth@carlh.net>2020-11-26 01:49:33 +0100
commit4bee9f40969db94aa7edc7816e1b12a7db3cab07 (patch)
tree81548723ac4e6c7a043e5e139b50f98673251f6c /src/lib
parent6e5dec71bf4e7a5ff81ecc115c04e8ec2b540c67 (diff)
Calculate hashes for any referenced assets that do not already have one.
This is necessary so that we always include <Hash> in CPLs even when referencing DCPs that do not have it.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/writer.cc19
-rw-r--r--src/lib/writer.h1
2 files changed, 19 insertions, 1 deletions
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index a9700f4f5..4915fe68d 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -38,6 +38,7 @@
#include "text_content.h"
#include <dcp/cpl.h>
#include <dcp/locale_convert.h>
+#include <dcp/reel_mxf.h>
#include <boost/foreach.hpp>
#include <fstream>
#include <cerrno>
@@ -557,10 +558,11 @@ Writer::finish ()
pool.create_thread (boost::bind (&boost::asio::io_service::run, &service));
}
+ boost::function<void (float)> set_progress = boost::bind (&Writer::set_digest_progress, this, job.get(), _1);
BOOST_FOREACH (ReelWriter& i, _reels) {
- boost::function<void (float)> set_progress = boost::bind (&Writer::set_digest_progress, this, job.get(), _1);
service.post (boost::bind (&ReelWriter::calculate_digests, &i, set_progress));
}
+ service.post (boost::bind (&Writer::calculate_referenced_digests, this, set_progress));
work.reset ();
pool.join_all ();
@@ -849,3 +851,18 @@ Writer::set_digest_progress (Job* job, float progress)
Waker waker;
waker.nudge ();
}
+
+
+/** Calculate hashes for any referenced MXF assets which do not already have one */
+void
+Writer::calculate_referenced_digests (boost::function<void (float)> set_progress)
+{
+ BOOST_FOREACH (ReferencedReelAsset const& i, _reel_assets) {
+ shared_ptr<dcp::ReelMXF> mxf = dynamic_pointer_cast<dcp::ReelMXF>(i.asset);
+ if (mxf && !mxf->hash()) {
+ mxf->asset_ref().asset()->hash (set_progress);
+ mxf->set_hash (mxf->asset_ref().asset()->hash());
+ }
+ }
+}
+
diff --git a/src/lib/writer.h b/src/lib/writer.h
index 459bc5a88..4c22ef48e 100644
--- a/src/lib/writer.h
+++ b/src/lib/writer.h
@@ -125,6 +125,7 @@ private:
size_t video_reel (int frame) const;
void set_digest_progress (Job* job, float progress);
void write_cover_sheet ();
+ void calculate_referenced_digests (boost::function<void (float)> set_progress);
/** our Film */
boost::shared_ptr<const Film> _film;