Fill test disk partitions with random noise to expose more bugs.
[dcpomatic.git] / test / player_test.cc
index 03f2eb6e655d977f0910c3338e15f94cbd13675c..80c7cf9eb44fc5509c7dd33a9fc1eb3493c08449 100644 (file)
@@ -233,8 +233,9 @@ BOOST_AUTO_TEST_CASE (player_seek_test)
        player->set_always_burn_open_subtitles ();
        player->set_play_referenced ();
 
-       auto butler = std::make_shared<Butler>(film, player, AudioMapping(), 2, bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::PADDED, true, false);
-       butler->disable_audio();
+       auto butler = std::make_shared<Butler>(
+               film, player, AudioMapping(), 2, bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::PADDED, true, false, Butler::Audio::DISABLED
+               );
 
        for (int i = 0; i < 10; ++i) {
                auto t = DCPTime::from_frames (i, 24);
@@ -265,8 +266,9 @@ BOOST_AUTO_TEST_CASE (player_seek_test2)
        player->set_always_burn_open_subtitles ();
        player->set_play_referenced ();
 
-       auto butler = std::make_shared<Butler>(film, player, AudioMapping(), 2, bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::PADDED, true, false);
-       butler->disable_audio();
+       auto butler = std::make_shared<Butler>
+               (film, player, AudioMapping(), 2, bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::PADDED, true, false, Butler::Audio::DISABLED
+                );
 
        butler->seek(DCPTime::from_seconds(5), true);
 
@@ -356,7 +358,9 @@ BOOST_AUTO_TEST_CASE (player_trim_crash)
 
        auto player = std::make_shared<Player>(film, Image::Alignment::COMPACT);
        player->set_fast ();
-       auto butler = std::make_shared<Butler>(film, player, AudioMapping(), 6, bind(&PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::COMPACT, true, false);
+       auto butler = std::make_shared<Butler>(
+               film, player, AudioMapping(), 6, bind(&PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::COMPACT, true, false, Butler::Audio::ENABLED
+               );
 
        /* Wait for the butler to fill */
        dcpomatic_sleep_seconds (5);
@@ -486,7 +490,7 @@ BOOST_AUTO_TEST_CASE (encrypted_dcp_with_no_kdm_gives_no_butler_error)
        auto film2 = new_test_film2 ("encrypted_dcp_with_no_kdm_gives_no_butler_error2", { content2 });
 
        auto player = std::make_shared<Player>(film2, Image::Alignment::COMPACT);
-       Butler butler(film2, player, AudioMapping(), 2, bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::PADDED, true, false);
+       Butler butler(film2, player, AudioMapping(), 2, bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::PADDED, true, false, Butler::Audio::ENABLED);
 
        float buffer[2000 * 6];
        for (int i = 0; i < length; ++i) {
@@ -497,3 +501,40 @@ BOOST_AUTO_TEST_CASE (encrypted_dcp_with_no_kdm_gives_no_butler_error)
        BOOST_CHECK_NO_THROW(butler.rethrow());
 }
 
+
+BOOST_AUTO_TEST_CASE (interleaved_subtitle_are_emitted_correctly)
+{
+       boost::filesystem::path paths[2] = {
+               "build/test/interleaved_subtitle_are_emitted_correctly1.srt",
+               "build/test/interleaved_subtitle_are_emitted_correctly2.srt"
+       };
+
+       dcp::File subs_file[2] = { dcp::File(paths[0], "w"), dcp::File(paths[1], "w") };
+
+       fprintf(subs_file[0].get(), "1\n00:00:01,000 -> 00:00:02,000\nSub 1/1\n\n");
+       fprintf(subs_file[0].get(), "2\n00:00:05,000 -> 00:00:06,000\nSub 1/2\n\n");
+
+       fprintf(subs_file[1].get(), "1\n00:00:00,500 -> 00:00:01,500\nSub 2/1\n\n");
+       fprintf(subs_file[1].get(), "2\n00:00:02,000 -> 00:00:03,000\nSub 2/2\n\n");
+
+       subs_file[0].close();
+       subs_file[1].close();
+
+       auto subs1 = content_factory(paths[0]).front();
+       auto subs2 = content_factory(paths[1]).front();
+       auto film = new_test_film2("interleaved_subtitle_are_emitted_correctly", { subs1, subs2 });
+       film->set_sequence(false);
+       subs1->set_position(film, DCPTime());
+       subs2->set_position(film, DCPTime());
+
+       auto player = std::make_shared<Player>(film, Image::Alignment::COMPACT);
+       dcp::Time last;
+       player->Text.connect([&last](PlayerText text, TextType, optional<DCPTextTrack>, dcpomatic::DCPTimePeriod) {
+               for (auto sub: text.string) {
+                       BOOST_CHECK(sub.in() >= last);
+                       last = sub.in();
+               }
+       });
+       while (!player->pass()) {}
+}
+