}
-/** @param output_dcp Path to DCP folder to write */
void
-Writer::finish (boost::filesystem::path output_dcp)
+Writer::calculate_digests ()
{
- if (_thread.joinable()) {
- LOG_GENERAL_NC ("Terminating writer thread");
- terminate_thread (true);
- }
-
- LOG_GENERAL_NC ("Finishing ReelWriters");
-
- for (auto& i: _reels) {
- write_hanging_text (i);
- i.finish (output_dcp);
- }
-
- LOG_GENERAL_NC ("Writing XML");
-
- dcp::DCP dcp (output_dcp);
-
- auto cpl = make_shared<dcp::CPL>(
- film()->dcp_name(),
- film()->dcp_content_type()->libdcp_kind(),
- film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE
- );
-
- dcp.add (cpl);
-
- /* Calculate digests for each reel in parallel */
-
auto job = _job.lock ();
if (job) {
job->sub (_("Computing digests"));
auto work = make_shared<boost::asio::io_service::work>(service);
- int const threads = max (1, Config::instance()->master_encoding_threads ());
+ int const threads = max (1, Config::instance()->master_encoding_threads());
for (int i = 0; i < threads; ++i) {
pool.create_thread (boost::bind (&boost::asio::io_service::run, &service));
service.post (boost::bind (&Writer::calculate_referenced_digests, this, set_progress));
work.reset ();
- pool.join_all ();
+
+ {
+ pool.join_all ();
+ }
+
service.stop ();
+}
+
+
+/** @param output_dcp Path to DCP folder to write */
+void
+Writer::finish (boost::filesystem::path output_dcp)
+{
+ if (_thread.joinable()) {
+ LOG_GENERAL_NC ("Terminating writer thread");
+ terminate_thread (true);
+ }
+
+ LOG_GENERAL_NC ("Finishing ReelWriters");
+
+ for (auto& i: _reels) {
+ write_hanging_text (i);
+ i.finish (output_dcp);
+ }
+
+ LOG_GENERAL_NC ("Writing XML");
+
+ dcp::DCP dcp (output_dcp);
+
+ auto cpl = make_shared<dcp::CPL>(
+ film()->dcp_name(),
+ film()->dcp_content_type()->libdcp_kind(),
+ film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE
+ );
+
+ dcp.add (cpl);
+
+ calculate_digests ();
/* Add reels */