diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-11-24 01:29:11 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-11-26 01:49:33 +0100 |
| commit | 4bee9f40969db94aa7edc7816e1b12a7db3cab07 (patch) | |
| tree | 81548723ac4e6c7a043e5e139b50f98673251f6c /src/lib | |
| parent | 6e5dec71bf4e7a5ff81ecc115c04e8ec2b540c67 (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.cc | 19 | ||||
| -rw-r--r-- | src/lib/writer.h | 1 |
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; |
