Run premultiply filter on still images that have alpha channels (more of #2681).
[dcpomatic.git] / test / vf_test.cc
index f3ba156a10518454f66eb85dcb0a2704b08bbbff..249f9c5b043a6967dfb79e2e55e6adbb04b2b5d5 100644 (file)
 #include "lib/content_factory.h"
 #include "lib/dcp_content.h"
 #include "lib/dcp_content_type.h"
+#include "lib/examine_content_job.h"
 #include "lib/ffmpeg_content.h"
 #include "lib/film.h"
+#include "lib/job_manager.h"
+#include "lib/make_dcp.h"
 #include "lib/player.h"
+#include "lib/text_content.h"
 #include "lib/referenced_reel_asset.h"
 #include "lib/video_content.h"
 #include "test.h"
@@ -180,7 +184,7 @@ BOOST_AUTO_TEST_CASE (vf_test3)
        vf->set_reel_type (ReelType::BY_VIDEO_CONTENT);
        auto dcp = make_shared<DCPContent>(ov->dir(ov->dcp_name()));
        BOOST_REQUIRE (dcp);
-       dcp->set_trim_start (ContentTime::from_seconds (1));
+       dcp->set_trim_start(vf, ContentTime::from_seconds (1));
        dcp->set_trim_end (ContentTime::from_seconds (1));
        vf->examine_and_add_content (dcp);
        BOOST_REQUIRE (!wait_for_jobs());
@@ -291,8 +295,7 @@ BOOST_AUTO_TEST_CASE (vf_test5)
        make_and_verify_dcp (vf, {dcp::VerificationNote::Code::EXTERNAL_ASSET});
 
        /* Check that the selected reel assets are right */
-       auto player = make_shared<Player>(vf, Image::Alignment::COMPACT);
-       auto a = player->get_reel_assets();
+       auto a = get_referenced_reel_assets(vf, vf->playlist());
        BOOST_REQUIRE_EQUAL (a.size(), 4U);
        auto i = a.begin();
        BOOST_CHECK (i->period == DCPTimePeriod(DCPTime(0), DCPTime(960000)));
@@ -393,8 +396,77 @@ BOOST_AUTO_TEST_CASE (test_vf_with_trimmed_multi_reel_dcp)
        vf->set_reel_type(ReelType::BY_VIDEO_CONTENT);
        vf_dcp->set_reference_video(true);
        vf_dcp->set_reference_audio(true);
-       vf_dcp->set_trim_start(ContentTime::from_seconds(10));
+       vf_dcp->set_trim_start(vf, ContentTime::from_seconds(10));
        vf_dcp->set_position(vf, DCPTime::from_seconds(10));
        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";
+}
+
+
+BOOST_AUTO_TEST_CASE(test_duplicate_font_id_in_vf)
+{
+       string const name("test_duplicate_font_id_in_vf");
+       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 });
+       ov_dcp->set_reference_audio(true);
+       ov_dcp->set_reference_video(true);
+       ov_dcp->text[0]->set_use(true);
+       ccaps->text[0]->set_type(TextType::CLOSED_CAPTION);
+       string why_not;
+       BOOST_CHECK_MESSAGE(ov_dcp->can_reference_text(vf, TextType::OPEN_SUBTITLE, why_not), why_not);
+       ov_dcp->set_reference_text(TextType::OPEN_SUBTITLE, true);
+       vf->write_metadata();
+       make_dcp(vf, TranscodeJob::ChangedBehaviour::IGNORE);
+       BOOST_REQUIRE(!wait_for_jobs());
+
+       auto vf_dcp = make_shared<DCPContent>(vf->dir(vf->dcp_name(false)));
+
+       auto test = new_test_film2(name + "_test", { vf_dcp });
+       vf_dcp->add_ov(ov->dir(ov->dcp_name(false)));
+       JobManager::instance()->add(make_shared<ExamineContentJob>(test, vf_dcp));
+       BOOST_CHECK(!wait_for_jobs());
+
+       make_and_verify_dcp(
+               test,
+               {
+                       dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE,
+                       dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME,
+                       dcp::VerificationNote::Code::MISSING_CPL_METADATA,
+               });
+}
+