X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Ftime_calculation_test.cc;h=968138f96adb35be43578c83c99ef98fcbb8c9b6;hp=353a97dd0ec8b4d990a41ee94ef7475d7a1bf1a5;hb=95f4d8740de74cdecf6658ab2607c0af9732904e;hpb=2d5beb0d6794df13ad1df47e84fd7a57d1d1c64d diff --git a/test/time_calculation_test.cc b/test/time_calculation_test.cc index 353a97dd0..968138f96 100644 --- a/test/time_calculation_test.cc +++ b/test/time_calculation_test.cc @@ -1,32 +1,40 @@ /* Copyright (C) 2015-2016 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ +/** @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" #include "lib/player.h" +#include "lib/audio_content.h" #include "test.h" #include using std::string; using std::list; using boost::shared_ptr; +using namespace dcpomatic; static string const xml = "" "FFmpeg" @@ -41,7 +49,7 @@ static string const xml = "" "1280" "720" "25" - "0" + "2d" "0" "0" "0" @@ -80,8 +88,9 @@ static string const xml = "" "" "1" "und; 2 channels" - "2" + "1" "44100" + "44100" "2" "0" "" @@ -124,23 +133,48 @@ 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(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(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(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(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(film).get(), DCPTime::from_seconds(content->video->length() * (50.0 / 60) / 25.0).get()); + + /* Make the content audio-only */ + content->video.reset (); + /* 24fps content, 24fps DCP */ + film->set_video_frame_rate (24); + content->set_video_frame_rate (24); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(1).get()); /* 25fps content, 25fps DCP */ film->set_video_frame_rate (25); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds (content->video->length() / 25.0)); + content->set_video_frame_rate (25); + 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_EQUAL (content->full_length(), DCPTime::from_seconds (content->video->length() / 24.0)); + 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 (content->video->length() / 30.0)); + 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 (content->video->length() / 25.0)); + 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 (content->video->length() * (50.0 / 60) / 25.0)); + BOOST_CHECK_EQUAL (content->full_length(film).get(), DCPTime::from_seconds(50.0 / 60).get()); + } /** Test Player::dcp_to_content_video */ @@ -152,16 +186,16 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -171,9 +205,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -185,9 +219,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -202,9 +236,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -214,9 +248,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -228,11 +262,12 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -241,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 @@ -249,9 +284,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -261,9 +296,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -275,9 +310,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -293,9 +328,9 @@ 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->video->set_frame_rate (48); + content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -305,9 +340,9 @@ 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->video->set_frame_rate (48); + content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -319,9 +354,9 @@ 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->video->set_frame_rate (48); + content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -333,9 +368,9 @@ 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->video->set_frame_rate (29.9978733); + content->set_video_frame_rate (29.9978733); film->set_video_frame_rate (30); player->setup_pieces (); BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); @@ -357,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->video->set_frame_rate (24); + 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->video->set_frame_rate (24); + 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->video->set_frame_rate (24); + 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->video->set_frame_rate (24); + 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->video->set_frame_rate (24); + 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->video->set_frame_rate (24); + 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 @@ -446,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->video->set_frame_rate (24); + 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->video->set_frame_rate (24); + 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->video->set_frame_rate (24); + 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->video->set_frame_rate (48); + 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->video->set_frame_rate (48); + 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->video->set_frame_rate (48); + 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 */ @@ -533,17 +568,17 @@ 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)); - AudioStreamPtr stream = content->audio_streams().front(); + shared_ptr content (new FFmpegContent(doc, film->state_version(), notes)); + AudioStreamPtr stream = content->audio->streams().front(); film->set_sequence (false); film->add_content (content); 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces (); @@ -554,9 +589,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces (); @@ -569,9 +604,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces (); @@ -584,9 +619,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (25); stream->_frame_rate = 48000; player->setup_pieces (); @@ -597,9 +632,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (25); stream->_frame_rate = 48000; player->setup_pieces (); @@ -614,9 +649,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (25); stream->_frame_rate = 48000; player->setup_pieces (); @@ -624,18 +659,18 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (48); stream->_frame_rate = 48000; player->setup_pieces (); @@ -646,9 +681,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces (); @@ -661,9 +696,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces (); @@ -679,9 +714,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (48); stream->_frame_rate = 48000; player->setup_pieces (); @@ -692,9 +727,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces (); @@ -707,9 +742,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces (); @@ -722,9 +757,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 44100; player->setup_pieces (); @@ -735,9 +770,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 44100; player->setup_pieces (); @@ -750,9 +785,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 44100; player->setup_pieces (); @@ -765,9 +800,9 @@ 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->video->set_frame_rate (24); + content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; player->setup_pieces ();