X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcontent.cc;h=af85e0ff08d17fcbf7fd4111ce27988d9fe405dd;hb=bb9d1f9e0f1aa818d1ac2145f05563e4c95d41b1;hp=2b4f02b903c90d8027d48c1f0fe1fbb36ac49380;hpb=fe771b1f0ed9f794bc98faa4cca2a15651f28e87;p=dcpomatic.git diff --git a/src/lib/content.cc b/src/lib/content.cc index 2b4f02b90..af85e0ff0 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -28,10 +28,12 @@ #include "film.h" #include "safe_stringstream.h" #include "job.h" +#include "compose.hpp" #include "raw_convert.h" #include #include #include +#include #include "i18n.h" @@ -88,9 +90,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 +103,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 +174,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 +185,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,11 +223,11 @@ Content::technical_summary () const DCPTime Content::length_after_trim () const { - return max (DCPTime (), full_length() - trim_start() - trim_end()); + 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 - * its playlist. +/** @return string which changes when something about this content changes which affects + * the appearance of its video. */ string Content::identifier () const @@ -285,3 +287,11 @@ Content::properties () const add_properties (p); return p; } + +shared_ptr +Content::film () const +{ + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + return film; +}