Preserve export video settings in the config (#2259).
[dcpomatic.git] / test / player_test.cc
index 60bfee1a4490fe6dae1037075f472618e402b2ee..e78e0ee355329035c5124beec2ff5df3cbb2cbac 100644 (file)
@@ -210,7 +210,7 @@ BOOST_AUTO_TEST_CASE (player_interleave_test)
        player->Audio.connect (bind (&audio, _1, _2));
        video_frames = audio_frames = 0;
        while (!player->pass ()) {
-               BOOST_CHECK (abs(video_frames - (audio_frames / 2000)) < 8);
+               BOOST_CHECK (abs(video_frames - (audio_frames / 2000)) <= 8);
        }
 }
 
@@ -233,15 +233,16 @@ 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, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::COMPACT, 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);
                butler->seek (t, true);
-               auto video = butler->get_video(true, 0);
+               auto video = butler->get_video(Butler::Behaviour::BLOCKING, 0);
                BOOST_CHECK_EQUAL(video.second.get(), t.get());
-               write_image(video.first->image(bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, true), String::compose("build/test/player_seek_test_%1.png", i));
+               write_image(video.first->image(bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, true), String::compose("build/test/player_seek_test_%1.png", i));
                /* This 14.08 is empirically chosen (hopefully) to accept changes in rendering between the reference and a test machine
                   (17.10 and 16.04 seem to anti-alias a little differently) but to reject gross errors e.g. missing fonts or missing
                   text altogether.
@@ -265,18 +266,19 @@ 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, _1, 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);
 
        for (int i = 0; i < 10; ++i) {
                auto t = DCPTime::from_seconds(5) + DCPTime::from_frames (i, 24);
                butler->seek (t, true);
-               auto video = butler->get_video(true, 0);
+               auto video = butler->get_video(Butler::Behaviour::BLOCKING, 0);
                BOOST_CHECK_EQUAL(video.second.get(), t.get());
                write_image(
-                       video.first->image(bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, true), String::compose("build/test/player_seek_test2_%1.png", i)
+                       video.first->image(bind(PlayerVideo::force, AV_PIX_FMT_RGB24), VideoRange::FULL, true), String::compose("build/test/player_seek_test2_%1.png", i)
                        );
                check_image(TestPaths::private_data() / String::compose("player_seek_test2_%1.png", i), String::compose("build/test/player_seek_test2_%1.png", i), 14.08);
        }
@@ -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, _1, 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);
@@ -466,3 +470,34 @@ BOOST_AUTO_TEST_CASE (player_silence_at_end_crash)
        film2->set_video_frame_rate (24);
        make_and_verify_dcp (film2);
 }
+
+
+/** #2257 */
+BOOST_AUTO_TEST_CASE (encrypted_dcp_with_no_kdm_gives_no_butler_error)
+{
+       auto content = content_factory("test/data/flat_red.png").front();
+       auto film = new_test_film2 ("encrypted_dcp_with_no_kdm_gives_no_butler_error", { content });
+       int constexpr length = 24 * 25;
+       content->video->set_length(length);
+       film->set_encrypted (true);
+       make_and_verify_dcp (
+               film,
+               {
+                       dcp::VerificationNote::Code::MISSING_CPL_METADATA,
+               });
+
+       auto content2 = std::make_shared<DCPContent>(film->dir(film->dcp_name()));
+       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::Audio::ENABLED);
+
+       float buffer[2000 * 6];
+       for (int i = 0; i < length; ++i) {
+               butler.get_video(Butler::Behaviour::BLOCKING, 0);
+               butler.get_audio(Butler::Behaviour::BLOCKING, buffer, 2000);
+       }
+
+       BOOST_CHECK_NO_THROW(butler.rethrow());
+}
+