From 23b69b228ed5b34b59e1789de4bff052bc905ae4 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 14 Jul 2015 14:23:50 +0100 Subject: [PATCH] Express trims using ContentTime so that they do not change when DCP frame rate is changed (#637). --- ChangeLog | 4 ++ src/lib/content.cc | 18 +++--- src/lib/content.h | 12 ++-- src/lib/dcpomatic_time.cc | 30 ++++++++++ src/lib/dcpomatic_time.h | 3 + src/lib/player.cc | 35 ++++------- src/lib/playlist.cc | 7 ++- src/wx/timing_panel.cc | 20 ++++--- src/wx/timing_panel.h | 4 +- test/time_calculation_test.cc | 108 +++++++++++++++++----------------- 10 files changed, 138 insertions(+), 103 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9d652be49..66d20b4b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-07-14 c.hetherington + + * Fix trim point movement when changing DCP frame rate (#637). + 2015-07-14 Carl Hetherington * Version 2.1.21 released. diff --git a/src/lib/content.cc b/src/lib/content.cc index 2b4f02b90..65c005157 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -88,9 +88,9 @@ Content::Content (shared_ptr film, cxml::ConstNodePtr node) _paths.push_back ((*i)->content ()); } _digest = node->optional_string_child ("Digest").get_value_or ("X"); - _position = DCPTime (node->number_child ("Position")); - _trim_start = DCPTime (node->number_child ("TrimStart")); - _trim_end = DCPTime (node->number_child ("TrimEnd")); + _position = DCPTime (node->number_child ("Position")); + _trim_start = ContentTime (node->number_child ("TrimStart")); + _trim_end = ContentTime (node->number_child ("TrimEnd")); } Content::Content (shared_ptr film, vector > c) @@ -101,11 +101,11 @@ Content::Content (shared_ptr film, vector > c) , _change_signals_frequent (false) { for (size_t i = 0; i < c.size(); ++i) { - if (i > 0 && c[i]->trim_start() > DCPTime()) { + if (i > 0 && c[i]->trim_start() > ContentTime ()) { throw JoinError (_("Only the first piece of content to be joined can have a start trim.")); } - if (i < (c.size() - 1) && c[i]->trim_end () > DCPTime()) { + if (i < (c.size() - 1) && c[i]->trim_end () > ContentTime ()) { throw JoinError (_("Only the last piece of content to be joined can have an end trim.")); } @@ -172,7 +172,7 @@ Content::set_position (DCPTime p) } void -Content::set_trim_start (DCPTime t) +Content::set_trim_start (ContentTime t) { { boost::mutex::scoped_lock lm (_mutex); @@ -183,7 +183,7 @@ Content::set_trim_start (DCPTime t) } void -Content::set_trim_end (DCPTime t) +Content::set_trim_end (ContentTime t) { { boost::mutex::scoped_lock lm (_mutex); @@ -221,7 +221,9 @@ Content::technical_summary () const DCPTime Content::length_after_trim () const { - return max (DCPTime (), full_length() - trim_start() - trim_end()); + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + return max (DCPTime (), full_length() - DCPTime (trim_start() - trim_end(), film->active_frame_rate_change (position ()))); } /** @return string which includes everything about how this content affects diff --git a/src/lib/content.h b/src/lib/content.h index 2deee9763..b7f7987ef 100644 --- a/src/lib/content.h +++ b/src/lib/content.h @@ -128,16 +128,16 @@ public: return _position; } - void set_trim_start (DCPTime); + void set_trim_start (ContentTime); - DCPTime trim_start () const { + ContentTime trim_start () const { boost::mutex::scoped_lock lm (_mutex); return _trim_start; } - void set_trim_end (DCPTime); + void set_trim_end (ContentTime); - DCPTime trim_end () const { + ContentTime trim_end () const { boost::mutex::scoped_lock lm (_mutex); return _trim_end; } @@ -176,8 +176,8 @@ protected: private: std::string _digest; DCPTime _position; - DCPTime _trim_start; - DCPTime _trim_end; + ContentTime _trim_start; + ContentTime _trim_end; bool _change_signals_frequent; }; diff --git a/src/lib/dcpomatic_time.cc b/src/lib/dcpomatic_time.cc index 4541ced7d..3d4ed1139 100644 --- a/src/lib/dcpomatic_time.cc +++ b/src/lib/dcpomatic_time.cc @@ -45,6 +45,36 @@ min (DCPTime a, DCPTime b) return b; } +DCPTime +max (DCPTime a, DCPTime b) +{ + if (a > b) { + return a; + } + + return b; +} + +ContentTime +min (ContentTime a, ContentTime b) +{ + if (a < b) { + return a; + } + + return b; +} + +ContentTime +max (ContentTime a, ContentTime b) +{ + if (a > b) { + return a; + } + + return b; +} + ostream & operator<< (ostream& s, ContentTime t) { diff --git a/src/lib/dcpomatic_time.h b/src/lib/dcpomatic_time.h index 698815957..437b78f62 100644 --- a/src/lib/dcpomatic_time.h +++ b/src/lib/dcpomatic_time.h @@ -241,6 +241,9 @@ public: }; DCPTime min (DCPTime a, DCPTime b); +DCPTime max (DCPTime a, DCPTime b); +ContentTime min (ContentTime a, ContentTime b); +ContentTime max (ContentTime a, ContentTime b); std::ostream& operator<< (std::ostream& s, ContentTime t); std::ostream& operator<< (std::ostream& s, DCPTime t); diff --git a/src/lib/player.cc b/src/lib/player.cc index c551c9886..a289c3d92 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -522,48 +522,33 @@ Frame Player::dcp_to_content_video (shared_ptr piece, DCPTime t) const { shared_ptr vc = dynamic_pointer_cast (piece->content); - - DCPTime s = t - piece->content->position () + piece->content->trim_start (); - s = DCPTime (max (DCPTime::Type (0), s.get ())); - s = DCPTime (min (piece->content->length_after_trim().get(), s.get())); - - return ContentTime (s, piece->frc).frames (vc->video_frame_rate ()); + DCPTime s = t - piece->content->position (); + s = min (piece->content->length_after_trim(), s); + return max (ContentTime (), ContentTime (s, piece->frc) + piece->content->trim_start ()).frames (vc->video_frame_rate ()); } DCPTime Player::content_video_to_dcp (shared_ptr piece, Frame f) const { shared_ptr vc = dynamic_pointer_cast (piece->content); - - ContentTime const c = ContentTime::from_frames (f, vc->video_frame_rate ()); - DCPTime t = DCPTime (c, piece->frc) - piece->content->trim_start () + piece->content->position (); - - if (t < DCPTime ()) { - t = DCPTime (); - } - - return t; + ContentTime const c = ContentTime::from_frames (f, vc->video_frame_rate ()) - piece->content->trim_start (); + return max (DCPTime (), DCPTime (c, piece->frc) + piece->content->position ()); } Frame Player::dcp_to_content_audio (shared_ptr piece, AudioStreamPtr stream, DCPTime t) const { - DCPTime s = t - piece->content->position () + piece->content->trim_start (); - s = DCPTime (max (DCPTime::Type (0), s.get ())); - s = DCPTime (min (piece->content->length_after_trim().get(), s.get())); - - return ContentTime (s, piece->frc).frames (stream->frame_rate ()); + DCPTime s = t - piece->content->position (); + s = min (piece->content->length_after_trim(), s); + return max (ContentTime (), ContentTime (s, piece->frc) + piece->content->trim_start ()).frames (stream->frame_rate ()); } ContentTime Player::dcp_to_content_subtitle (shared_ptr piece, DCPTime t) const { - /* s is the offset of t from the start position of this content */ DCPTime s = t - piece->content->position (); - s = DCPTime (max (DCPTime::Type (0), s.get ())); - s = DCPTime (min (piece->content->length_after_trim().get(), s.get())); - - return ContentTime (s + piece->content->trim_start(), piece->frc); + s = min (piece->content->length_after_trim(), s); + return max (ContentTime (), ContentTime (s, piece->frc) + piece->content->trim_start()); } void diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index e2135a60e..4e46fdbdf 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -303,13 +303,16 @@ Playlist::video_end () const FrameRateChange Playlist::active_frame_rate_change (DCPTime t, int dcp_video_frame_rate) const { - for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) { + for (ContentList::const_reverse_iterator i = _content.rbegin(); i != _content.rend(); ++i) { shared_ptr vc = dynamic_pointer_cast (*i); if (!vc) { continue; } - if (vc->position() >= t && t < vc->end()) { + if (vc->position() <= t) { + /* This is the first piece of content (going backwards...) that starts before t, + so it's the active one. + */ return FrameRateChange (vc->video_frame_rate(), dcp_video_frame_rate); } } diff --git a/src/wx/timing_panel.cc b/src/wx/timing_panel.cc index 4baafe9db..8ce64777b 100644 --- a/src/wx/timing_panel.cc +++ b/src/wx/timing_panel.cc @@ -83,13 +83,13 @@ TimingPanel::TimingPanel (ContentPanel* p, FilmViewer* viewer) _full_length = new Timecode (this); grid->Add (_full_length); add_label_to_sizer (grid, this, _("Trim from start"), true); - _trim_start = new Timecode (this); + _trim_start = new Timecode (this); grid->Add (_trim_start); _trim_start_to_playhead = new wxButton (this, wxID_ANY, _("Trim up to current position")); grid->AddSpacer (0); grid->Add (_trim_start_to_playhead); add_label_to_sizer (grid, this, _("Trim from end"), true); - _trim_end = new Timecode (this); + _trim_end = new Timecode (this); grid->Add (_trim_end); _trim_end_to_playhead = new wxButton (this, wxID_ANY, _("Trim after current position")); grid->AddSpacer (0); @@ -211,7 +211,7 @@ TimingPanel::film_content_changed (int property) } else if (property == ContentProperty::TRIM_START) { - set check; + set check; for (ContentList::const_iterator i = cl.begin (); i != cl.end(); ++i) { check.insert ((*i)->trim_start ()); } @@ -224,7 +224,7 @@ TimingPanel::film_content_changed (int property) } else if (property == ContentProperty::TRIM_END) { - set check; + set check; for (ContentList::const_iterator i = cl.begin (); i != cl.end(); ++i) { check.insert ((*i)->trim_end ()); } @@ -325,7 +325,11 @@ TimingPanel::play_length_changed () { ContentList c = _parent->selected (); for (ContentList::iterator i = c.begin(); i != c.end(); ++i) { - (*i)->set_trim_end ((*i)->full_length() - _play_length->get (_parent->film()->video_frame_rate()) - (*i)->trim_start()); + FrameRateChange const frc = _parent->film()->active_frame_rate_change ((*i)->position ()); + (*i)->set_trim_end ( + ContentTime ((*i)->full_length() - _play_length->get (_parent->film()->video_frame_rate()), frc) + - (*i)->trim_start () + ); } } @@ -382,7 +386,8 @@ TimingPanel::trim_start_to_playhead_clicked () DCPTime const ph = _viewer->position (); BOOST_FOREACH (shared_ptr i, _parent->selected ()) { if (i->position() < ph && ph < i->end ()) { - i->set_trim_start (i->trim_start() + ph - i->position ()); + FrameRateChange const frc = _parent->film()->active_frame_rate_change (i->position ()); + i->set_trim_start (i->trim_start() + ContentTime (ph - i->position (), frc)); } } } @@ -393,7 +398,8 @@ TimingPanel::trim_end_to_playhead_clicked () DCPTime const ph = _viewer->position (); BOOST_FOREACH (shared_ptr i, _parent->selected ()) { if (i->position() < ph && ph < i->end ()) { - i->set_trim_end (i->position() + i->full_length() - i->trim_start() - ph); + FrameRateChange const frc = _parent->film()->active_frame_rate_change (i->position ()); + i->set_trim_end (ContentTime (i->position() + i->full_length() - ph, frc) - i->trim_start()); } } diff --git a/src/wx/timing_panel.h b/src/wx/timing_panel.h index 100945731..d1f5ea549 100644 --- a/src/wx/timing_panel.h +++ b/src/wx/timing_panel.h @@ -48,10 +48,10 @@ private: Timecode* _position; Timecode* _full_length; - Timecode* _trim_start; + Timecode* _trim_start; wxButton* _trim_start_to_playhead; wxButton* _trim_end_to_playhead; - Timecode* _trim_end; + Timecode* _trim_end; Timecode* _play_length; wxTextCtrl* _video_frame_rate; wxButton* _set_video_frame_rate; diff --git a/test/time_calculation_test.cc b/test/time_calculation_test.cc index 92e7b15ec..6598e4633 100644 --- a/test/time_calculation_test.cc +++ b/test/time_calculation_test.cc @@ -159,7 +159,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 0, no trim, content rate = DCP rate */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); @@ -171,7 +171,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 3s, no trim, content rate = DCP rate */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); @@ -185,7 +185,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 3s, 1.5s trim, content rate = DCP rate */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); @@ -202,7 +202,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) fast (at 25fps) in this case, this means 75 frames of content video will be used. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); @@ -214,7 +214,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 3s, no trim, content rate 24, DCP rate 25 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); @@ -226,9 +226,11 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (4.60)), 40); BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 169); - /* Position 3s, 1.6s trim, content rate 24, DCP rate 25 */ + /* Position 3s, 1.6s trim, content rate 24, DCP rate 25. Here the trim is in ContentTime, + so it's 1.6s at 24fps. + */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.6)); + content->set_trim_start (ContentTime::from_seconds (1.6)); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); @@ -236,9 +238,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) piece = player->_pieces.front (); BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime ()), 0); 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)), 40); - BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (4.60)), 80); - BOOST_CHECK_EQUAL (player->dcp_to_content_video (piece, DCPTime::from_seconds (9.75)), 209); + 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); /* 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 @@ -247,7 +249,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) content rate = DCP rate case. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); @@ -259,7 +261,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 3s, no trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); @@ -273,7 +275,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); @@ -291,7 +293,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) be used to make 3 * 24 frames of DCP video. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); @@ -303,7 +305,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 3s, no trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); @@ -317,7 +319,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1) /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); @@ -347,7 +349,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 0, no trim, content rate = DCP rate */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); @@ -359,7 +361,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 3s, no trim, content rate = DCP rate */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); @@ -371,7 +373,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 3s, 1.5s trim, content rate = DCP rate */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); player->setup_pieces (); @@ -387,7 +389,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) fast (at 25fps) in this case, this means 75 frames of content video will be used. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); @@ -399,7 +401,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 3s, no trim, content rate 24, DCP rate 25 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); player->setup_pieces (); @@ -409,18 +411,18 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) 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)); - /* Position 3s, 1.6s trim, content rate 24, DCP rate 25 */ + /* 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_trim_start (DCPTime::from_seconds (1.6)); + 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.4)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 40), DCPTime::from_seconds (3.00)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 80), DCPTime::from_seconds (4.60)); - BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 209), DCPTime::from_seconds (9.76)); + 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)); /* 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 @@ -429,7 +431,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) content rate = DCP rate case. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); @@ -441,7 +443,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 3s, no trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); @@ -453,7 +455,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (48); player->setup_pieces (); @@ -470,7 +472,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) be used to make 3 * 24 frames of DCP video. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); @@ -482,7 +484,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 3s, no trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); @@ -494,7 +496,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2) /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (48); film->set_video_frame_rate (24); player->setup_pieces (); @@ -524,7 +526,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 0, no trim, video/audio content rate = video/audio DCP rate */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; @@ -537,7 +539,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, no trim, video/audio content rate = video/audio DCP rate */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; @@ -552,7 +554,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, 1.5s trim, video/audio content rate = video/audio DCP rate */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; @@ -571,7 +573,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) so that they run fast. Hence 1 second in the DCP uses (25/24) * 48000 content samples. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); stream->_frame_rate = 48000; @@ -584,7 +586,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* 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_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (25); stream->_frame_rate = 48000; @@ -597,9 +599,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (4.60)), 80000); BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (9.75)), 337500); - /* Position 3s, 1.6s trim, content rate 24, DCP rate 25, both audio rates still 48k. */ + /* Position 3s, 1.6s trim, content rate 24, DCP rate 25, both audio rates still 48k */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.6)); + content->set_trim_start (ContentTime::from_seconds (1.6)); content->set_video_frame_rate (24); film->set_video_frame_rate (25); stream->_frame_rate = 48000; @@ -607,10 +609,10 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1); piece = player->_pieces.front (); BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime ()), 0); - BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (0.60)), 0); - BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (3.00)), 80000); - BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (4.60)), 160000); - BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (9.75)), 417500); + BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (0.60)), 0); + BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (3.00)), 76800); + BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (4.60)), 156800); + BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime::from_seconds (9.75)), 414300); /* 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 @@ -618,7 +620,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) The results should be the same as the content rate = DCP rate case. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); stream->_frame_rate = 48000; @@ -631,7 +633,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, no trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; @@ -646,7 +648,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; @@ -664,7 +666,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) with skipped frames in this case, audio samples should map straight through. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (48); stream->_frame_rate = 48000; @@ -677,7 +679,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, no trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; @@ -692,7 +694,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 48000; @@ -709,7 +711,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) Now 44100 content samples correspond to 1s. */ content->set_position (DCPTime ()); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 44100; @@ -722,7 +724,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* Position 3s, no trim, video content rate = video DCP rate, content audio rate = 44.1k */ content->set_position (DCPTime::from_seconds (3)); - content->set_trim_start (DCPTime ()); + content->set_trim_start (ContentTime ()); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 44100; @@ -737,7 +739,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3) /* 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_trim_start (DCPTime::from_seconds (1.5)); + content->set_trim_start (ContentTime::from_seconds (1.5)); content->set_video_frame_rate (24); film->set_video_frame_rate (24); stream->_frame_rate = 44100; -- 2.30.2