diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-08-22 23:50:28 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-08-25 11:22:27 +0200 |
| commit | 6ea9b75c5fc4736f19a424796a3d2c7550fb16dc (patch) | |
| tree | fc826b31fc5bc5edab88ff1b4c5759e95afd4cef /src/lib/cover_sheet.cc | |
| parent | b02325ff69686381f40fee39df35666e58df367e (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.cc | 46 |
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()); } |
