summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-06-14 12:11:50 +0100
committerCarl Hetherington <cth@carlh.net>2016-06-14 12:11:50 +0100
commit3ae21bc7e7e0278a1ee15d365971eeb3dcabcbf6 (patch)
treedc231aeb0f9d31e6e3e04888b4302130953385e4 /src
parentb19543a036c389c9970a65f77606afb55d9fd11d (diff)
Set correct video frame type when importing DCPs (part of #806).
Diffstat (limited to 'src')
-rw-r--r--src/lib/dcp_content.cc6
-rw-r--r--src/lib/dcp_content.h1
-rw-r--r--src/lib/dcp_examiner.cc3
-rw-r--r--src/lib/dcp_examiner.h5
4 files changed, 15 insertions, 0 deletions
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc
index b46b3dab7..295f33b3c 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -63,6 +63,7 @@ DCPContent::DCPContent (shared_ptr<const Film> film, boost::filesystem::path p)
, _reference_video (false)
, _reference_audio (false)
, _reference_subtitle (false)
+ , _three_d (false)
{
video.reset (new VideoContent (this));
audio.reset (new AudioContent (this));
@@ -108,6 +109,7 @@ DCPContent::DCPContent (shared_ptr<const Film> film, cxml::ConstNodePtr node, in
DCPOMATIC_ASSERT (false);
}
}
+ _three_d = node->optional_bool_child("ThreeD").get_value_or (false);
}
void
@@ -155,11 +157,14 @@ DCPContent::examine (shared_ptr<Job> job)
_encrypted = examiner->encrypted ();
_kdm_valid = examiner->kdm_valid ();
_standard = examiner->standard ();
+ _three_d = examiner->three_d ();
}
if (could_be_played != can_be_played ()) {
signal_changed (DCPContentProperty::CAN_BE_PLAYED);
}
+
+ video->set_frame_type (_three_d ? VIDEO_FRAME_TYPE_3D : VIDEO_FRAME_TYPE_2D);
}
string
@@ -221,6 +226,7 @@ DCPContent::as_xml (xmlpp::Node* node) const
DCPOMATIC_ASSERT (false);
}
}
+ node->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0");
}
DCPTime
diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h
index 255cfa19a..cb9279706 100644
--- a/src/lib/dcp_content.h
+++ b/src/lib/dcp_content.h
@@ -141,6 +141,7 @@ private:
bool _reference_subtitle;
boost::optional<dcp::Standard> _standard;
+ bool _three_d;
};
#endif
diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc
index fa05f6e64..e3b0fb6ee 100644
--- a/src/lib/dcp_examiner.cc
+++ b/src/lib/dcp_examiner.cc
@@ -52,6 +52,7 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content)
, _has_subtitles (false)
, _encrypted (false)
, _kdm_valid (false)
+ , _three_d (false)
{
dcp::DCP dcp (content->directory ());
dcp.read (false, 0, true);
@@ -139,4 +140,6 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content)
}
_standard = dcp.standard ();
+ _three_d = !reels.empty() && reels.front()->main_picture() &&
+ dynamic_pointer_cast<dcp::StereoPictureAsset> (reels.front()->main_picture()->asset());
}
diff --git a/src/lib/dcp_examiner.h b/src/lib/dcp_examiner.h
index 708d2e0ad..6fc041cc6 100644
--- a/src/lib/dcp_examiner.h
+++ b/src/lib/dcp_examiner.h
@@ -80,6 +80,10 @@ public:
return _standard;
}
+ bool three_d () const {
+ return _three_d;
+ }
+
private:
boost::optional<double> _video_frame_rate;
boost::optional<dcp::Size> _video_size;
@@ -92,4 +96,5 @@ private:
bool _encrypted;
bool _kdm_valid;
boost::optional<dcp::Standard> _standard;
+ bool _three_d;
};