summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-08-24 09:59:25 +0200
committerCarl Hetherington <cth@carlh.net>2020-08-24 09:59:25 +0200
commit9f3fbc936a2b152142d5fadf7cefef42b59eb09d (patch)
treea765bbc9bc5f2e7e2847a3a82bc5fcc5db9ce8f9 /src/lib
parent5d3c9573914a61db10b24ce7e0cef00902c2912c (diff)
Add trim type property to Content; by content or by playlist.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/content.cc24
-rw-r--r--src/lib/content.h15
2 files changed, 38 insertions, 1 deletions
diff --git a/src/lib/content.cc b/src/lib/content.cc
index 4242477d4..3ac2bc051 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -59,12 +59,14 @@ int const ContentProperty::POSITION = 401;
int const ContentProperty::LENGTH = 402;
int const ContentProperty::TRIM_START = 403;
int const ContentProperty::TRIM_END = 404;
-int const ContentProperty::VIDEO_FRAME_RATE = 405;
+int const ContentProperty::TRIM_BEHAVIOUR = 405;
+int const ContentProperty::VIDEO_FRAME_RATE = 406;
Content::Content ()
: _position (0)
, _trim_start (0)
, _trim_end (0)
+ , _trim_behaviour (TRIM_CONTENT)
, _change_signals_frequent (false)
{
@@ -74,6 +76,7 @@ Content::Content (DCPTime p)
: _position (p)
, _trim_start (0)
, _trim_end (0)
+ , _trim_behaviour (TRIM_CONTENT)
, _change_signals_frequent (false)
{
@@ -83,6 +86,7 @@ Content::Content (boost::filesystem::path p)
: _position (0)
, _trim_start (0)
, _trim_end (0)
+ , _trim_behaviour (TRIM_CONTENT)
, _change_signals_frequent (false)
{
add_path (p);
@@ -107,6 +111,7 @@ Content::Content (cxml::ConstNodePtr node)
_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"));
+ _trim_behaviour = node->optional_string_child("TrimBehaviour").get_value_or("content") == "content" ? TRIM_CONTENT : TRIM_PLAYLIST;
_video_frame_rate = node->optional_number_child<double> ("VideoFrameRate");
}
@@ -126,6 +131,10 @@ Content::Content (vector<shared_ptr<Content> > c)
throw JoinError (_("Only the last piece of content to be joined can have an end trim."));
}
+ if (_trim_behaviour != c[i]->_trim_behaviour) {
+ throw JoinError (_("Content to be joined must ahve the same trim behaviour setting"));
+ }
+
if (
(_video_frame_rate && !c[i]->_video_frame_rate) ||
(!_video_frame_rate && c[i]->_video_frame_rate)
@@ -160,6 +169,7 @@ Content::as_xml (xmlpp::Node* node, bool with_paths) const
node->add_child("Position")->add_child_text (raw_convert<string> (_position.get ()));
node->add_child("TrimStart")->add_child_text (raw_convert<string> (_trim_start.get ()));
node->add_child("TrimEnd")->add_child_text (raw_convert<string> (_trim_end.get ()));
+ node->add_child("TrimBehaviour")->add_child_text (_trim_behaviour == TRIM_CONTENT ? N_("content") : N_("playlist"));
if (_video_frame_rate) {
node->add_child("VideoFrameRate")->add_child_text (raw_convert<string> (_video_frame_rate.get()));
}
@@ -277,6 +287,18 @@ Content::set_trim_end (ContentTime t)
}
+void
+Content::set_trim_behaviour (TrimBehaviour t)
+{
+ ChangeSignaller<Content> cc (this, ContentProperty::TRIM_BEHAVIOUR);
+
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ _trim_behaviour = t;
+ }
+}
+
+
shared_ptr<Content>
Content::clone () const
{
diff --git a/src/lib/content.h b/src/lib/content.h
index 5f8e9f53d..440d42a79 100644
--- a/src/lib/content.h
+++ b/src/lib/content.h
@@ -56,6 +56,7 @@ public:
static int const LENGTH;
static int const TRIM_START;
static int const TRIM_END;
+ static int const TRIM_BEHAVIOUR;
static int const VIDEO_FRAME_RATE;
};
@@ -160,6 +161,19 @@ public:
return _trim_end;
}
+ enum TrimBehaviour
+ {
+ TRIM_CONTENT,
+ TRIM_PLAYLIST
+ };
+
+ void set_trim_behaviour (TrimBehaviour b);
+
+ TrimBehaviour trim_behaviour () const {
+ boost::mutex::scoped_lock lm (_mutex);
+ return _trim_behaviour;
+ }
+
/** @return Time immediately after the last thing in this content */
dcpomatic::DCPTime end (boost::shared_ptr<const Film> film) const {
return position() + length_after_trim(film);
@@ -224,6 +238,7 @@ private:
dcpomatic::DCPTime _position;
dcpomatic::ContentTime _trim_start;
dcpomatic::ContentTime _trim_end;
+ TrimBehaviour _trim_behaviour;
/** The video frame rate that this content is or was prepared to be used with,
* or empty if the effective rate of this content should be dictated by something
* else (either some video happening at the same time, or the rate of the DCP).