operator bool on Time is a really bad idea; removed it and fixed lots of bugs.
[dcpomatic.git] / test / ffmpeg_seek_test.cc
index e66a1918cd1ec1aa00349af5c691124680e6f4a1..c25a071deedb9fd082cfe8919ab4448baa5c50a3 100644 (file)
 
 */
 
+/** @file  test/ffmpeg_seek_test.cc
+ *  @brief Test seek using Player with an FFmpegDecoder; note that the player
+ *  can hide problems with FFmpegDecoder seeking as it will skip frames / insert
+ *  black as it sees fit.
+ */
+
 #include <boost/test/unit_test.hpp>
 #include "lib/player.h"
 #include "lib/ffmpeg_decoder.h"
@@ -56,7 +62,7 @@ static string
 print_time (DCPTime t, float fps)
 {
        stringstream s;
-       s << t << " " << (float(t) / TIME_HZ) << "s " << (float(t) * fps / TIME_HZ) << "f";
+       s << t.seconds() << "s " << t.frames (fps) << "f";
        return s.str ();
 }
 
@@ -84,17 +90,18 @@ check (shared_ptr<Player> p, DCPTime t)
        BOOST_CHECK (first_video.get() >= t);
        BOOST_CHECK (first_audio.get() >= t);
        /* And should be rounded to frame boundaries */
-       BOOST_CHECK ((first_video.get() % (TIME_HZ / film->video_frame_rate())) == 0);
-       BOOST_CHECK ((first_audio.get() % (TIME_HZ / film->audio_frame_rate())) == 0);
+       BOOST_CHECK_EQUAL (first_video.get(), first_video.get().round_up (film->video_frame_rate()));
+       BOOST_CHECK_EQUAL (first_audio.get(), first_audio.get().round_up (film->audio_frame_rate()));
 }
 
+/* Test basic seeking */
 BOOST_AUTO_TEST_CASE (ffmpeg_seek_test)
 {
-       film = new_test_film ("ffmpeg_audio_test");
-       film->set_name ("ffmpeg_audio_test");
+       film = new_test_film ("ffmpeg_seek_test");
+       film->set_name ("ffmpeg_seek_test");
        film->set_container (Ratio::from_id ("185"));
        shared_ptr<FFmpegContent> c (new FFmpegContent (film, "test/data/staircase.mov"));
-       c->set_ratio (Ratio::from_id ("185"));
+       c->set_scale (VideoContentScale (Ratio::from_id ("185")));
        film->examine_and_add_content (c);
 
        wait_for_jobs ();
@@ -103,10 +110,8 @@ BOOST_AUTO_TEST_CASE (ffmpeg_seek_test)
        player->Video.connect (boost::bind (&process_video, _1, _2, _3, _4, _5));
        player->Audio.connect (boost::bind (&process_audio, _1, _2));
 
-       check (player, 0);
-       check (player, 0.1 * TIME_HZ);
-       check (player, 0.2 * TIME_HZ);
-       check (player, 0.3 * TIME_HZ);
+       check (player, DCPTime::from_seconds (0));
+       check (player, DCPTime::from_seconds (0.1));
+       check (player, DCPTime::from_seconds (0.2));
+       check (player, DCPTime::from_seconds (0.3));
 }
-
-