Support alpha blend onto YUV444P9LE and YUV444P10LE (68 and 70).
[dcpomatic.git] / src / lib / film.cc
index 5b6b44892427131b024b82d53d10e4efb674c1cb..0bba13e2802c369504e973262b7140f0b306c8d4 100644 (file)
@@ -776,16 +776,27 @@ 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()) {
+               auto dcp = dynamic_pointer_cast<DCPContent>(i);
                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();
+                       auto const use = text->use() || (dcp && dcp->reference_text(TextType::OPEN_SUBTITLE));
+                       if (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 +966,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);