Even more logging when reading DCPs.
[dcpomatic.git] / src / lib / dcp_content.cc
index 6df0588e972fb439f6eb0b501bc9e1c7b5d99ea4..62b74be90cb7765db19ad34a2ad51656da271abf 100644 (file)
@@ -95,7 +95,7 @@ DCPContent::DCPContent (boost::filesystem::path p)
 DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
        : Content (node)
 {
-       video = VideoContent::from_xml (this, node, version);
+       video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
        audio = AudioContent::from_xml (this, node, version);
        list<string> notes;
        text = TextContent::from_xml (this, node, version, notes);
@@ -206,6 +206,8 @@ DCPContent::read_sub_directory (boost::filesystem::path p)
                } else if (boost::filesystem::is_directory(i.path()) && i.path().filename() != ".AppleDouble") {
                        LOG_GENERAL ("Inside there's directory %1", i.path().string());
                        read_sub_directory (i.path());
+               } else {
+                       LOG_GENERAL("Ignoring %1 from inside: status is %2", i.path().string(), static_cast<int>(boost::filesystem::status(i.path()).type()));
                }
        }
 }
@@ -268,6 +270,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 +823,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());
+}
+