Move burnt subtitle checks into ::subtitle_languages().
authorCarl Hetherington <cth@carlh.net>
Wed, 17 Jan 2024 22:41:23 +0000 (23:41 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 17 Jan 2024 22:41:23 +0000 (23:41 +0100)
src/lib/film.cc
src/lib/film.h

index 5b6b44892427131b024b82d53d10e4efb674c1cb..27d23b1850a9f7c0dc14e2a5514ad0b42f112522 100644 (file)
@@ -776,16 +776,25 @@ Film::mapped_audio_channels () const
 
 
 pair<optional<dcp::LanguageTag>, vector<dcp::LanguageTag>>
-Film::subtitle_languages () const
+Film::subtitle_languages(bool* burnt_in) const
 {
+       if (burnt_in) {
+               *burnt_in = true;
+       }
+
        pair<optional<dcp::LanguageTag>, vector<dcp::LanguageTag>> result;
        for (auto i: content()) {
                for (auto const& text: i->text) {
-                       if (text->use() && text->type() == TextType::OPEN_SUBTITLE && text->language()) {
-                               if (text->language_is_additional()) {
-                                       result.second.push_back(text->language().get());
-                               } else {
-                                       result.first = text->language().get();
+                       if (text->use() && text->type() == TextType::OPEN_SUBTITLE) {
+                               if (!text->burn() && burnt_in) {
+                                       *burnt_in = false;
+                               }
+                               if (text->language()) {
+                                       if (text->language_is_additional()) {
+                                               result.second.push_back(text->language().get());
+                                       } else {
+                                               result.first = text->language().get();
+                                       }
                                }
                        }
                }
@@ -955,16 +964,8 @@ Film::isdcf_name (bool if_created_now) const
 
        isdcf_name += "_" + to_upper (audio_language);
 
-       auto burnt_in = true;
-       for (auto i: content_list) {
-               for (auto text: i->text) {
-                       if (text->type() == TextType::OPEN_SUBTITLE && text->use() && !text->burn()) {
-                               burnt_in = false;
-                       }
-               }
-       }
-
-       auto sub_langs = subtitle_languages();
+       bool burnt_in;
+       auto sub_langs = subtitle_languages(&burnt_in);
        auto ccap_langs = closed_caption_languages();
        if (sub_langs.first && sub_langs.first->language()) {
                auto lang = entry_for_language(*sub_langs.first);
index 1341be8a354594f40c54739dcdf52a06cc291f35..13be4b8db5e84270ac6c1a602b3a4b839c7063eb 100644 (file)
@@ -192,8 +192,10 @@ public:
                return _audio_language;
        }
 
-       /** @return pair containing the main subtitle language, and additional languages */
-       std::pair<boost::optional<dcp::LanguageTag>, std::vector<dcp::LanguageTag>> subtitle_languages () const;
+       /** @param burnt_in If non-null, filled with true if all subtitles are burnt in, otherwise false.
+        *  @return pair containing the main subtitle language, and additional languages
+        */
+       std::pair<boost::optional<dcp::LanguageTag>, std::vector<dcp::LanguageTag>> subtitle_languages(bool* burnt_in = nullptr) const;
        /** @return all closed caption languages in the film */
        std::vector<dcp::LanguageTag> closed_caption_languages() const;