From 6a18a737ef8dfbfbe909afe8266f104a2125b5fb Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 1 Jun 2016 22:45:58 +0100 Subject: Store video frame rate in XML (#883). --- src/lib/content.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/lib/content.cc') diff --git a/src/lib/content.cc b/src/lib/content.cc index 7afbf924f..66b0d477e 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -95,6 +95,7 @@ Content::Content (shared_ptr film, cxml::ConstNodePtr node) _position = DCPTime (node->number_child ("Position")); _trim_start = ContentTime (node->number_child ("TrimStart")); _trim_end = ContentTime (node->number_child ("TrimEnd")); + _video_frame_rate = node->optional_number_child ("VideoFrameRate"); } Content::Content (shared_ptr film, vector > c) @@ -102,6 +103,7 @@ Content::Content (shared_ptr film, vector > c) , _position (c.front()->position ()) , _trim_start (c.front()->trim_start ()) , _trim_end (c.back()->trim_end ()) + , _video_frame_rate (c.front()->video_frame_rate()) , _change_signals_frequent (false) { for (size_t i = 0; i < c.size(); ++i) { @@ -113,6 +115,17 @@ Content::Content (shared_ptr film, vector > c) throw JoinError (_("Only the last piece of content to be joined can have an end trim.")); } + if ( + (_video_frame_rate && !c[i]->_video_frame_rate) || + (!_video_frame_rate && c[i]->_video_frame_rate) + ) { + throw JoinError (_("Content to be joined must have the same video frame rate")); + } + + if (_video_frame_rate && fabs (_video_frame_rate.get() - c[i]->_video_frame_rate.get()) > VIDEO_FRAME_RATE_EPSILON) { + throw JoinError (_("Content to be joined must have the same video frame rate")); + } + for (size_t j = 0; j < c[i]->number_of_paths(); ++j) { _paths.push_back (c[i]->path (j)); } @@ -131,6 +144,9 @@ Content::as_xml (xmlpp::Node* node) const node->add_child("Position")->add_child_text (raw_convert (_position.get ())); node->add_child("TrimStart")->add_child_text (raw_convert (_trim_start.get ())); node->add_child("TrimEnd")->add_child_text (raw_convert (_trim_end.get ())); + if (_video_frame_rate) { + node->add_child("VideoFrameRate")->add_child_text (raw_convert (_video_frame_rate.get())); + } } void -- cgit v1.2.3