diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-11-12 22:09:48 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-11-20 07:29:15 +0100 |
| commit | db4fde2e8983eaa0b76c49a189e059d6c9f5720d (patch) | |
| tree | d19f2cbd88fa4bb23a3a18213f24cf06964e1b75 /src/lib/reel_writer.cc | |
| parent | 796ac1e76ff47b2e4dad2b3ef10458d8befac5d8 (diff) | |
Improve progress reporting of digest calculations (might help with #2643).
Diffstat (limited to 'src/lib/reel_writer.cc')
| -rw-r--r-- | src/lib/reel_writer.cc | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc index ca4a2dbb1..1b33cae85 100644 --- a/src/lib/reel_writer.cc +++ b/src/lib/reel_writer.cc @@ -773,21 +773,39 @@ ReelWriter::create_reel ( return reel; } + +/** @param set_progress Method to call with progress; first parameter is the number of bytes + * done, second parameter is the number of bytes in total. + */ void -ReelWriter::calculate_digests (std::function<void (float)> set_progress) +ReelWriter::calculate_digests(std::function<void (int64_t, int64_t)> set_progress) try { + vector<shared_ptr<const dcp::Asset>> assets; + if (_picture_asset) { - _picture_asset->hash (set_progress); + assets.push_back(_picture_asset); } - if (_sound_asset) { - _sound_asset->hash (set_progress); + assets.push_back(_sound_asset); } - if (_atmos_asset) { - _atmos_asset->hash (set_progress); + assets.push_back(_atmos_asset); } + + int64_t total_size = 0; + for (auto asset: assets) { + total_size += asset->file() ? boost::filesystem::file_size(*asset->file()) : 0; + } + + int64_t total_done = 0; + for (auto asset: assets) { + asset->hash([&total_done, total_size, set_progress](int64_t done, int64_t) { + set_progress(total_done + done, total_size); + }); + total_done += asset->file() ? boost::filesystem::file_size(*asset->file()) : 0; + } + } catch (boost::thread_interrupted) { /* set_progress contains an interruption_point, so any of these methods * may throw thread_interrupted, at which point we just give up. |
