summaryrefslogtreecommitdiff
path: root/src/lib/cover_sheet.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-08-22 23:50:28 +0200
committerCarl Hetherington <cth@carlh.net>2025-08-25 11:22:27 +0200
commit6ea9b75c5fc4736f19a424796a3d2c7550fb16dc (patch)
treefc826b31fc5bc5edab88ff1b4c5759e95afd4cef /src/lib/cover_sheet.cc
parentb02325ff69686381f40fee39df35666e58df367e (diff)
Add cover sheet magic strings for marker positions (#3076).
Diffstat (limited to 'src/lib/cover_sheet.cc')
-rw-r--r--src/lib/cover_sheet.cc46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lib/cover_sheet.cc b/src/lib/cover_sheet.cc
index 52296fac7..b0450dbd0 100644
--- a/src/lib/cover_sheet.cc
+++ b/src/lib/cover_sheet.cc
@@ -33,6 +33,7 @@
using std::shared_ptr;
using std::string;
+using std::vector;
void
@@ -105,6 +106,51 @@ dcpomatic::write_cover_sheet(shared_ptr<const Film> film, boost::filesystem::pat
boost::algorithm::replace_all(text, "$LENGTH", length);
+ auto const markers = film->markers();
+
+ auto marker = [&markers, &text, film](dcp::Marker marker) {
+ auto iter = markers.find(marker);
+ auto const tag = "$" + marker_to_string(marker);
+ auto const tag_line = tag + "_LINE";
+
+ if (iter != markers.end()) {
+ auto const timecode = time_to_hmsf(iter->second, film->video_frame_rate());
+ boost::algorithm::replace_all(text, tag_line, timecode);
+ boost::algorithm::replace_all(text, tag, timecode);
+ } else {
+ vector<string> before_lines;
+ vector<string> after_lines;
+ boost::algorithm::split(before_lines, text, boost::is_any_of("\n"));
+ if (!before_lines.empty()) {
+ before_lines.pop_back();
+ }
+ for (auto& line: before_lines) {
+ if (line.find(tag_line) == std::string::npos) {
+ after_lines.push_back(line);
+ }
+ }
+ text.clear();
+ for (auto const& line: after_lines) {
+ text += line + "\n";
+ }
+
+ boost::algorithm::replace_all(text, tag, _("Unknown"));
+ }
+ };
+
+ marker(dcp::Marker::FFOC);
+ marker(dcp::Marker::LFOC);
+ marker(dcp::Marker::FFTC);
+ marker(dcp::Marker::LFTC);
+ marker(dcp::Marker::FFOI);
+ marker(dcp::Marker::LFOI);
+ marker(dcp::Marker::FFEC);
+ marker(dcp::Marker::LFEC);
+ marker(dcp::Marker::FFMC);
+ marker(dcp::Marker::LFMC);
+ marker(dcp::Marker::FFOB);
+ marker(dcp::Marker::LFOB);
+
file.checked_write(text.c_str(), text.length());
}