summaryrefslogtreecommitdiff
path: root/src/lib/dcp_content.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-07-09 20:22:38 +0200
committerCarl Hetherington <cth@carlh.net>2022-07-11 12:22:11 +0200
commit8b9888ed8247109dc3c09492302e865fa4731460 (patch)
tree1ff1c09074decfc44a1bff77d050f908d6542dda /src/lib/dcp_content.cc
parent5a5f6d3ac42668017141469fd0e5cd14e3bebe88 (diff)
Fix font handling for DCP subtitles.
Diffstat (limited to 'src/lib/dcp_content.cc')
-rw-r--r--src/lib/dcp_content.cc39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc
index f8639cef9..2e89adff0 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -268,6 +268,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
for (int i = 0; i < examiner->text_count(TextType::OPEN_SUBTITLE); ++i) {
auto c = make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE);
c->set_language (examiner->open_subtitle_language());
+ add_fonts_from_examiner(c, examiner->fonts());
new_text.push_back (c);
}
@@ -820,3 +821,41 @@ DCPContent::resolution () const
return Resolution::TWO_K;
}
+
+void
+add_fonts_from_examiner(shared_ptr<TextContent> text, vector<vector<shared_ptr<Font>>> const & all_fonts)
+{
+ int reel_number = 0;
+ for (auto reel_fonts: all_fonts) {
+ for (auto font: reel_fonts) {
+ /* Each reel could have its own font with the same ID, so we disambiguate them here
+ * by prepending the reel number. We do the same disambiguation when emitting the
+ * subtitles in the DCP decoder.
+ */
+ font->set_id(id_for_font_in_reel(font->id(), reel_number));
+ text->add_font(font);
+ }
+ ++reel_number;
+ }
+
+}
+
+
+string
+id_for_font_in_reel(string id, int reel)
+{
+ return String::compose("%1_%2", reel, id);
+}
+
+
+void
+DCPContent::check_font_ids()
+{
+ if (text.empty()) {
+ return;
+ }
+
+ DCPExaminer examiner(shared_from_this(), true);
+ add_fonts_from_examiner(text.front(), examiner.fonts());
+}
+