Fix refusal to reference overlapping but different text content (#2599).
authorCarl Hetherington <cth@carlh.net>
Sat, 26 Aug 2023 22:17:58 +0000 (00:17 +0200)
committerCarl Hetherington <cth@carlh.net>
Sat, 26 Aug 2023 22:17:58 +0000 (00:17 +0200)
src/lib/dcp_content.cc
test/vf_test.cc

index 928ba33818a65e6b6b8f141632b54f2d6121e521..770e5bfad0a7a3e503f2c0a951f43bf01d502c68 100644 (file)
@@ -787,8 +787,8 @@ DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, stri
        /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
        return can_reference(
                film,
-               [](shared_ptr<const Content> c) {
-                       return !c->text.empty();
+               [type](shared_ptr<const Content> c) {
+                       return std::find_if(c->text.begin(), c->text.end(), [type](shared_ptr<const TextContent> t) { return t->type() == type; }) != c->text.end();
                },
                _("they overlap other text content; remove the other content."),
                why_not
index 3705635c2f2f018b6c31ea96d97b93ab2657c444..ecd615d98c31b66f2e7f2068aa9b4f6a932bb324 100644 (file)
@@ -31,6 +31,7 @@
 #include "lib/ffmpeg_content.h"
 #include "lib/film.h"
 #include "lib/player.h"
+#include "lib/text_content.h"
 #include "lib/referenced_reel_asset.h"
 #include "lib/video_content.h"
 #include "test.h"
@@ -397,3 +398,28 @@ BOOST_AUTO_TEST_CASE (test_vf_with_trimmed_multi_reel_dcp)
        make_and_verify_dcp (vf, { dcp::VerificationNote::Code::EXTERNAL_ASSET });
 }
 
+
+/** Test bug #2599: unable to reference open subtitles in an OV when creating a VF that adds closed captions */
+BOOST_AUTO_TEST_CASE(test_referencing_ov_with_subs_when_adding_ccaps)
+{
+       string const name("test_referencing_ov_with_subs_when_adding_ccaps");
+       auto subs = content_factory("test/data/15s.srt");
+       auto ov = new_test_film2(name + "_ov", subs);
+       make_and_verify_dcp(
+               ov,
+               {
+                       dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE,
+                       dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME,
+                       dcp::VerificationNote::Code::MISSING_CPL_METADATA
+               });
+
+       auto ccaps = content_factory("test/data/15s.srt")[0];
+       auto ov_dcp = make_shared<DCPContent>(ov->dir(ov->dcp_name(false)));
+       auto vf = new_test_film2(name + "_vf", { ov_dcp, ccaps });
+       ccaps->text[0]->set_type(TextType::CLOSED_CAPTION);
+
+       string why_not;
+       BOOST_CHECK(ov_dcp->can_reference_text(vf, TextType::OPEN_SUBTITLE, why_not));
+       std::cout << why_not << "\n";
+}
+