when DCP frame rate is changed (#637).
+2015-07-14 c.hetherington <cth@carlh.net>
+
+ * Fix trim point movement when changing DCP frame rate (#637).
+
2015-07-14 Carl Hetherington <cth@carlh.net>
* Version 2.1.21 released.
2015-07-14 Carl Hetherington <cth@carlh.net>
* Version 2.1.21 released.
_paths.push_back ((*i)->content ());
}
_digest = node->optional_string_child ("Digest").get_value_or ("X");
_paths.push_back ((*i)->content ());
}
_digest = node->optional_string_child ("Digest").get_value_or ("X");
- _position = DCPTime (node->number_child<double> ("Position"));
- _trim_start = DCPTime (node->number_child<double> ("TrimStart"));
- _trim_end = DCPTime (node->number_child<double> ("TrimEnd"));
+ _position = DCPTime (node->number_child<DCPTime::Type> ("Position"));
+ _trim_start = ContentTime (node->number_child<ContentTime::Type> ("TrimStart"));
+ _trim_end = ContentTime (node->number_child<ContentTime::Type> ("TrimEnd"));
}
Content::Content (shared_ptr<const Film> film, vector<shared_ptr<Content> > c)
}
Content::Content (shared_ptr<const Film> film, vector<shared_ptr<Content> > c)
, _change_signals_frequent (false)
{
for (size_t i = 0; i < c.size(); ++i) {
, _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."));
}
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."));
}
throw JoinError (_("Only the last piece of content to be joined can have an end trim."));
}
-Content::set_trim_start (DCPTime t)
+Content::set_trim_start (ContentTime t)
{
{
boost::mutex::scoped_lock lm (_mutex);
{
{
boost::mutex::scoped_lock lm (_mutex);
-Content::set_trim_end (DCPTime t)
+Content::set_trim_end (ContentTime t)
{
{
boost::mutex::scoped_lock lm (_mutex);
{
{
boost::mutex::scoped_lock lm (_mutex);
DCPTime
Content::length_after_trim () const
{
DCPTime
Content::length_after_trim () const
{
- return max (DCPTime (), full_length() - trim_start() - trim_end());
+ shared_ptr<const Film> 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
}
/** @return string which includes everything about how this content affects
- 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;
}
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;
}
boost::mutex::scoped_lock lm (_mutex);
return _trim_end;
}
private:
std::string _digest;
DCPTime _position;
private:
std::string _digest;
DCPTime _position;
- DCPTime _trim_start;
- DCPTime _trim_end;
+ ContentTime _trim_start;
+ ContentTime _trim_end;
bool _change_signals_frequent;
};
bool _change_signals_frequent;
};
+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)
{
ostream &
operator<< (ostream& s, ContentTime t)
{
};
DCPTime min (DCPTime a, DCPTime b);
};
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);
std::ostream& operator<< (std::ostream& s, ContentTime t);
std::ostream& operator<< (std::ostream& s, DCPTime t);
Player::dcp_to_content_video (shared_ptr<const Piece> piece, DCPTime t) const
{
shared_ptr<const VideoContent> vc = dynamic_pointer_cast<const VideoContent> (piece->content);
Player::dcp_to_content_video (shared_ptr<const Piece> piece, DCPTime t) const
{
shared_ptr<const VideoContent> vc = dynamic_pointer_cast<const VideoContent> (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<const Piece> piece, Frame f) const
{
shared_ptr<const VideoContent> vc = dynamic_pointer_cast<const VideoContent> (piece->content);
}
DCPTime
Player::content_video_to_dcp (shared_ptr<const Piece> piece, Frame f) const
{
shared_ptr<const VideoContent> vc = dynamic_pointer_cast<const VideoContent> (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<const Piece> piece, AudioStreamPtr stream, DCPTime t) const
{
}
Frame
Player::dcp_to_content_audio (shared_ptr<const Piece> 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<const Piece> piece, DCPTime t) const
{
}
ContentTime
Player::dcp_to_content_subtitle (shared_ptr<const Piece> piece, DCPTime t) const
{
- /* s is the offset of t from the start position of this content */
DCPTime s = t - piece->content->position ();
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());
FrameRateChange
Playlist::active_frame_rate_change (DCPTime t, int dcp_video_frame_rate) 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<const VideoContent> vc = dynamic_pointer_cast<const VideoContent> (*i);
if (!vc) {
continue;
}
shared_ptr<const VideoContent> vc = dynamic_pointer_cast<const VideoContent> (*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);
}
}
return FrameRateChange (vc->video_frame_rate(), dcp_video_frame_rate);
}
}
_full_length = new Timecode<DCPTime> (this);
grid->Add (_full_length);
add_label_to_sizer (grid, this, _("Trim from start"), true);
_full_length = new Timecode<DCPTime> (this);
grid->Add (_full_length);
add_label_to_sizer (grid, this, _("Trim from start"), true);
- _trim_start = new Timecode<DCPTime> (this);
+ _trim_start = new Timecode<ContentTime> (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);
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<DCPTime> (this);
+ _trim_end = new Timecode<ContentTime> (this);
grid->Add (_trim_end);
_trim_end_to_playhead = new wxButton (this, wxID_ANY, _("Trim after current position"));
grid->AddSpacer (0);
grid->Add (_trim_end);
_trim_end_to_playhead = new wxButton (this, wxID_ANY, _("Trim after current position"));
grid->AddSpacer (0);
} else if (property == ContentProperty::TRIM_START) {
} else if (property == ContentProperty::TRIM_START) {
+ set<ContentTime> check;
for (ContentList::const_iterator i = cl.begin (); i != cl.end(); ++i) {
check.insert ((*i)->trim_start ());
}
for (ContentList::const_iterator i = cl.begin (); i != cl.end(); ++i) {
check.insert ((*i)->trim_start ());
}
} else if (property == ContentProperty::TRIM_END) {
} else if (property == ContentProperty::TRIM_END) {
+ set<ContentTime> check;
for (ContentList::const_iterator i = cl.begin (); i != cl.end(); ++i) {
check.insert ((*i)->trim_end ());
}
for (ContentList::const_iterator i = cl.begin (); i != cl.end(); ++i) {
check.insert ((*i)->trim_end ());
}
{
ContentList c = _parent->selected ();
for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
{
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 ()
+ );
DCPTime const ph = _viewer->position ();
BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) {
if (i->position() < ph && ph < i->end ()) {
DCPTime const ph = _viewer->position ();
BOOST_FOREACH (shared_ptr<Content> 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));
DCPTime const ph = _viewer->position ();
BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) {
if (i->position() < ph && ph < i->end ()) {
DCPTime const ph = _viewer->position ();
BOOST_FOREACH (shared_ptr<Content> 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());
Timecode<DCPTime>* _position;
Timecode<DCPTime>* _full_length;
Timecode<DCPTime>* _position;
Timecode<DCPTime>* _full_length;
- Timecode<DCPTime>* _trim_start;
+ Timecode<ContentTime>* _trim_start;
wxButton* _trim_start_to_playhead;
wxButton* _trim_end_to_playhead;
wxButton* _trim_start_to_playhead;
wxButton* _trim_end_to_playhead;
- Timecode<DCPTime>* _trim_end;
+ Timecode<ContentTime>* _trim_end;
Timecode<DCPTime>* _play_length;
wxTextCtrl* _video_frame_rate;
wxButton* _set_video_frame_rate;
Timecode<DCPTime>* _play_length;
wxTextCtrl* _video_frame_rate;
wxButton* _set_video_frame_rate;
/* Position 0, no trim, content rate = DCP rate */
content->set_position (DCPTime ());
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, no trim, content rate = DCP rate */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, 1.5s trim, content rate = DCP rate */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
player->setup_pieces ();
fast (at 25fps) in this case, this means 75 frames of content video will be used.
*/
content->set_position (DCPTime ());
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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
player->setup_pieces ();
/* Position 3s, no trim, content rate 24, DCP rate 25 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
player->setup_pieces ();
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);
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_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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
player->setup_pieces ();
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);
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
/* 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
content rate = DCP rate case.
*/
content->set_position (DCPTime ());
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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
player->setup_pieces ();
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
player->setup_pieces ();
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
player->setup_pieces ();
be used to make 3 * 24 frames of DCP video.
*/
content->set_position (DCPTime ());
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 ();
content->set_video_frame_rate (48);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (48);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (48);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 0, no trim, content rate = DCP rate */
content->set_position (DCPTime ());
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, no trim, content rate = DCP rate */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, 1.5s trim, content rate = DCP rate */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
player->setup_pieces ();
fast (at 25fps) in this case, this means 75 frames of content video will be used.
*/
content->set_position (DCPTime ());
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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
player->setup_pieces ();
/* Position 3s, no trim, content rate 24, DCP rate 25 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
player->setup_pieces ();
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, 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_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 ();
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
/* 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
content rate = DCP rate case.
*/
content->set_position (DCPTime ());
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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
player->setup_pieces ();
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
player->setup_pieces ();
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
player->setup_pieces ();
be used to make 3 * 24 frames of DCP video.
*/
content->set_position (DCPTime ());
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 ();
content->set_video_frame_rate (48);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (48);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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 ();
content->set_video_frame_rate (48);
film->set_video_frame_rate (24);
player->setup_pieces ();
/* Position 0, no trim, video/audio content rate = video/audio DCP rate */
content->set_position (DCPTime ());
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 48000;
/* Position 3s, no trim, video/audio content rate = video/audio DCP rate */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 48000;
/* Position 3s, 1.5s trim, video/audio content rate = video/audio DCP rate */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 48000;
so that they run fast. Hence 1 second in the DCP uses (25/24) * 48000 content samples.
*/
content->set_position (DCPTime ());
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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
stream->_frame_rate = 48000;
/* Position 3s, no trim, content video rate 24, DCP rate 25, both audio rates still 48k. */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
stream->_frame_rate = 48000;
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);
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_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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (25);
stream->_frame_rate = 48000;
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1);
piece = player->_pieces.front ();
BOOST_CHECK_EQUAL (player->dcp_to_content_audio (piece, stream, DCPTime ()), 0);
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
/* 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
The results should be the same as the content rate = DCP rate case.
*/
content->set_position (DCPTime ());
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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
stream->_frame_rate = 48000;
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 48000;
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 48000;
with skipped frames in this case, audio samples should map straight through.
*/
content->set_position (DCPTime ());
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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (48);
stream->_frame_rate = 48000;
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 48000;
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 48000;
Now 44100 content samples correspond to 1s.
*/
content->set_position (DCPTime ());
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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 44100;
/* Position 3s, no trim, video content rate = video DCP rate, content audio rate = 44.1k */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 44100;
/* Position 3s, 1.5s trim, video content rate = video DCP rate, content audio rate = 44.1k */
content->set_position (DCPTime::from_seconds (3));
/* 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;
content->set_video_frame_rate (24);
film->set_video_frame_rate (24);
stream->_frame_rate = 44100;