X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Ftime_calculation_test.cc;h=968138f96adb35be43578c83c99ef98fcbb8c9b6;hp=ddd685d0c33f2bb789ef1cce5567421c863958a8;hb=d0555983d175e76585b2409d982e09f444eab391;hpb=6b9c1b3bdec2b4396314ccf6bf2d5aeaa5402ae6 diff --git a/test/time_calculation_test.cc b/test/time_calculation_test.cc index ddd685d0c..968138f96 100644 --- a/test/time_calculation_test.cc +++ b/test/time_calculation_test.cc @@ -18,6 +18,11 @@ */ +/** @file test/time_calculation_test.cc + * @brief Test calculation of timings when frame rates change. + * @ingroup specific + */ + #include "lib/film.h" #include "lib/ffmpeg_content.h" #include "lib/video_content.h" @@ -29,6 +34,7 @@ using std::string; using std::list; using boost::shared_ptr; +using namespace dcpomatic; static string const xml = "" "FFmpeg" @@ -82,7 +88,7 @@ static string const xml = "" "" "1" "und; 2 channels" - "2" + "1" "44100" "44100" "2" @@ -127,23 +133,23 @@ BOOST_AUTO_TEST_CASE (ffmpeg_time_calculation_test) doc->read_string (xml); list notes; - shared_ptr content (new FFmpegContent (film, doc, film->state_version(), notes)); + shared_ptr content (new FFmpegContent(doc, film->state_version(), notes)); /* 25fps content, 25fps DCP */ film->set_video_frame_rate (25); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (content->video->length() / 25.0)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(content->video->length() / 25.0).get()); /* 25fps content, 24fps DCP; length should be increased */ film->set_video_frame_rate (24); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (content->video->length() / 24.0)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(content->video->length() / 24.0).get()); /* 25fps content, 30fps DCP; length should be decreased */ film->set_video_frame_rate (30); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (content->video->length() / 30.0)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(content->video->length() / 30.0).get()); /* 25fps content, 50fps DCP; length should be the same */ film->set_video_frame_rate (50); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (content->video->length() / 25.0)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(content->video->length() / 25.0).get()); /* 25fps content, 60fps DCP; length should be decreased */ film->set_video_frame_rate (60); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (content->video->length() * (50.0 / 60) / 25.0)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(content->video->length() * (50.0 / 60) / 25.0).get()); /* Make the content audio-only */ content->video.reset (); @@ -151,23 +157,23 @@ BOOST_AUTO_TEST_CASE (ffmpeg_time_calculation_test) /* 24fps content, 24fps DCP */ film->set_video_frame_rate (24); content->set_video_frame_rate (24); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (1)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(1).get()); /* 25fps content, 25fps DCP */ film->set_video_frame_rate (25); content->set_video_frame_rate (25); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (1)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(1).get()); /* 25fps content, 24fps DCP; length should be increased */ film->set_video_frame_rate (24); - BOOST_CHECK_SMALL (abs (content->full_length().get() - DCPTime::from_seconds(25.0 / 24).get()), 2); + BOOST_CHECK_SMALL (labs (content->full_length(film).get() - DCPTime::from_seconds(25.0 / 24).get()), 2L); /* 25fps content, 30fps DCP; length should be decreased */ film->set_video_frame_rate (30); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (25.0 / 30)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(25.0 / 30).get()); /* 25fps content, 50fps DCP; length should be the same */ film->set_video_frame_rate (50); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (1)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(1).get()); /* 25fps content, 60fps DCP; length should be decreased */ film->set_video_frame_rate (60); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (50.0 / 60)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(50.0 / 60).get()); } @@ -180,14 +186,14 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) doc->read_string (xml); list notes; - shared_ptr content (new FFmpegContent (film, doc, film->state_version(), notes)); + shared_ptr content (new FFmpegContent(doc, film->state_version(), notes)); film->set_sequence (false); film->add_content (content); shared_ptr player (new Player (film, film->playlist ())); /* Position 0, no trim, content rate = DCP rate */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -199,7 +205,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (3.0)), 72); /* Position 3s, no trim, content rate = DCP rate */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -213,7 +219,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 162); /* Position 3s, 1.5s trim, content rate = DCP rate */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -230,7 +236,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) Now, for example, a DCPTime position of 3s means 3s at 25fps. Since we run the video fast (at 25fps) in this case, this means 75 frames of content video will be used. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); @@ -242,7 +248,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (3.0)), 75); /* Position 3s, no trim, content rate 24, DCP rate 25 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); @@ -256,9 +262,10 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 168); /* Position 3s, 1.6s trim, content rate 24, DCP rate 25. Here the trim is in ContentTime, - so it's 1.6s at 24fps. + so it's 1.6s at 24fps. Note that trims are rounded to the nearest video frame, so + some of these results are not quite what you'd perhaps expect. */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.6)); content->set_video_frame_rate (24); film->set_video_frame_rate (25); @@ -269,7 +276,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (0.60)), 0); BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (3.00)), 38); BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (4.60)), 78); - BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 207); + BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 206); /* Position 0, no trim, content rate 24, DCP rate 48 Now, for example, a DCPTime position of 3s means 3s at 48fps. Since we run the video @@ -277,7 +284,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) be used to make 3 * 48 frames of DCP video. The results should be the same as the content rate = DCP rate case. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); @@ -289,7 +296,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (3.0)), 72); /* Position 3s, no trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); @@ -303,7 +310,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 162); /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (48); @@ -321,7 +328,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) with skipped frames in this case, 3 * 48 frames of content video will be used to make 3 * 24 frames of DCP video. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); @@ -333,7 +340,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (3.0)), 144); /* Position 3s, no trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); @@ -347,7 +354,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 324); /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (48); film->set_video_frame_rate (24); @@ -361,7 +368,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 396); /* Position 0s, no trim, content rate 29.9978733, DCP rate 30 */ - content->set_position (DCPTime::from_seconds (0)); + content->set_position (film, DCPTime::from_seconds(0)); content->set_trim_start (ContentTime::from_seconds (0)); content->set_video_frame_rate (29.9978733); film->set_video_frame_rate (30); @@ -385,88 +392,88 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) doc->read_string (xml); list notes; - shared_ptr content (new FFmpegContent (film, doc, film->state_version(), notes)); + shared_ptr content (new FFmpegContent(doc, film->state_version(), notes)); film->set_sequence (false); film->add_content (content); shared_ptr player (new Player (film, film->playlist ())); /* Position 0, no trim, content rate = DCP rate */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); shared_ptr piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime ()); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 12), DCPTime::from_seconds (0.5)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72), DCPTime::from_seconds (3.0)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0).get(), 0); + BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 12).get(), DCPTime::from_seconds(0.5).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72).get(), DCPTime::from_seconds(3.0).get()); /* Position 3s, no trim, content rate = DCP rate */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 36), DCPTime::from_seconds (4.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 162), DCPTime::from_seconds (9.75)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(4.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 162).get(), DCPTime::from_seconds(9.75).get()); /* Position 3s, 1.5s trim, content rate = DCP rate */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (1.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 36), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72), DCPTime::from_seconds (4.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 198), DCPTime::from_seconds (9.75)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(3.00).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 198).get(), DCPTime::from_seconds(9.75).get()); /* Position 0, no trim, content rate 24, DCP rate 25. Now, for example, a DCPTime position of 3s means 3s at 25fps. Since we run the video fast (at 25fps) in this case, this means 75 frames of content video will be used. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime ()); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 15), DCPTime::from_seconds (0.6)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 75), DCPTime::from_seconds (3.0)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 15).get(), DCPTime::from_seconds(0.6).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 75).get(), DCPTime::from_seconds(3.0).get()); /* Position 3s, no trim, content rate 24, DCP rate 25 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 40), DCPTime::from_seconds (4.60)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 169), DCPTime::from_seconds (9.76)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 40).get(), DCPTime::from_seconds(4.60).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 169).get(), DCPTime::from_seconds(9.76).get()); /* Position 3s, 1.6s trim, content rate 24, DCP rate 25, so the 1.6s trim is at 24fps */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.6)); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (1.464)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 40), DCPTime::from_seconds (3.064)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 80), DCPTime::from_seconds (4.664)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 209), DCPTime::from_seconds (9.824)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 142080); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 40).get(), 295680); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 80).get(), 449280); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 209).get(), 944640); /* Position 0, no trim, content rate 24, DCP rate 48 Now, for example, a DCPTime position of 3s means 3s at 48fps. Since we run the video @@ -474,82 +481,82 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) be used to make 3 * 48 frames of DCP video. The results should be the same as the content rate = DCP rate case. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime ()); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 12), DCPTime::from_seconds (0.5)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72), DCPTime::from_seconds (3.0)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 12).get(), DCPTime::from_seconds(0.5).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(3.0).get()); /* Position 3s, no trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 36), DCPTime::from_seconds (4.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 162), DCPTime::from_seconds (9.75)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(4.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 162).get(), DCPTime::from_seconds(9.75).get()); /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (1.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 36), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72), DCPTime::from_seconds (4.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 198), DCPTime::from_seconds (9.75)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(3.00).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 198).get(), DCPTime::from_seconds(9.75).get()); /* Position 0, no trim, content rate 48, DCP rate 24 Now, for example, a DCPTime position of 3s means 3s at 24fps. Since we run the video with skipped frames in this case, 3 * 48 frames of content video will be used to make 3 * 24 frames of DCP video. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime ()); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 24), DCPTime::from_seconds (0.5)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 144), DCPTime::from_seconds (3.0)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 24).get(), DCPTime::from_seconds(0.5).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 144).get(), DCPTime::from_seconds(3.0).get()); /* Position 3s, no trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72), DCPTime::from_seconds (4.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 324), DCPTime::from_seconds (9.75)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 324).get(), DCPTime::from_seconds(9.75).get()); /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0), DCPTime::from_seconds (1.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 144), DCPTime::from_seconds (4.50)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 396), DCPTime::from_seconds (9.75)); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(3.00).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 144).get(), DCPTime::from_seconds(4.50).get()); + BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 396).get(), DCPTime::from_seconds(9.75).get()); } /** Test Player::dcp_to_content_audio */ @@ -561,7 +568,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) doc->read_string (xml); list notes; - shared_ptr content (new FFmpegContent (film, doc, film->state_version(), notes)); + shared_ptr content (new FFmpegContent(doc, film->state_version(), notes)); AudioStreamPtr stream = content->audio->streams().front(); film->set_sequence (false); film->add_content (content); @@ -569,7 +576,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) shared_ptr player (new Player (film, film->playlist ())); /* Position 0, no trim, video/audio content rate = video/audio DCP rate */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -582,7 +589,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (3.0)), 144000); /* Position 3s, no trim, video/audio content rate = video/audio DCP rate */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds (3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -597,7 +604,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 324000); /* Position 3s, 1.5s trim, video/audio content rate = video/audio DCP rate */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds (3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -612,7 +619,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 396000); /* Position 0, no trim, content video rate 24, DCP video rate 25, both audio rates still 48k */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); @@ -625,7 +632,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (3.0)), 144000); /* Position 3s, no trim, content video rate 24, DCP rate 25, both audio rates still 48k. */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); @@ -642,7 +649,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, 1.6s trim, content rate 24, DCP rate 25, both audio rates still 48k. 1s of content is 46080 samples after resampling. */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.6)); content->set_video_frame_rate (24); film->set_video_frame_rate (25); @@ -652,16 +659,16 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) piece = player->_pieces.front (); BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime ()), 0); BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (0.60)), 0); - BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (3.00)), 73728); - BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (4.60)), 150528); - BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 397728); + BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (3.00)), 72960); + BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (4.60)), 149760); + BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 396960); /* Position 0, no trim, content rate 24, DCP rate 48, both audio rates still 48k. Now, for example, a DCPTime position of 3s means 3s at 48fps. Since we run the video with repeated frames in this case, audio samples will map straight through. The results should be the same as the content rate = DCP rate case. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); @@ -674,7 +681,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (3.0)), 144000); /* Position 3s, no trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -689,7 +696,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 324000); /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -707,7 +714,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) Now, for example, a DCPTime position of 3s means 3s at 24fps. Since we run the video with skipped frames in this case, audio samples should map straight through. */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); @@ -720,7 +727,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (3.0)), 144000); /* Position 3s, no trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -735,7 +742,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 324000); /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -750,7 +757,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 396000); /* Position 0, no trim, video content rate = video DCP rate, content audio rate = 44.1k */ - content->set_position (DCPTime ()); + content->set_position (film, DCPTime()); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -763,7 +770,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (3.0)), 144000); /* Position 3s, no trim, video content rate = video DCP rate, content audio rate = 44.1k */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -778,7 +785,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 324000); /* Position 3s, 1.5s trim, video content rate = video DCP rate, content audio rate = 44.1k */ - content->set_position (DCPTime::from_seconds (3)); + content->set_position (film, DCPTime::from_seconds(3)); content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); @@ -793,7 +800,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_resampled_audio (piece, DCPTime::from_seconds (9.75)), 396000); /* Check with a large start trim */ - content->set_position (DCPTime::from_seconds (0)); + content->set_position (film, DCPTime::from_seconds(0)); content->set_trim_start (ContentTime::from_seconds (54143)); content->set_video_frame_rate (24); film->set_video_frame_rate (24);