From 3ae21bc7e7e0278a1ee15d365971eeb3dcabcbf6 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 14 Jun 2016 12:11:50 +0100 Subject: [PATCH] Set correct video frame type when importing DCPs (part of #806). --- ChangeLog | 4 ++++ src/lib/dcp_content.cc | 6 ++++++ src/lib/dcp_content.h | 1 + src/lib/dcp_examiner.cc | 3 +++ src/lib/dcp_examiner.h | 5 +++++ 5 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1f230c134..e564e7a8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2016-06-14 c.hetherington + + * Select correct video frame type when importing DCPs (part of #806). + 2016-06-13 Carl Hetherington * Give better error messages when subtitles fail to load. 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 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 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) _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 _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 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 content) } _standard = dcp.standard (); + _three_d = !reels.empty() && reels.front()->main_picture() && + dynamic_pointer_cast (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 _video_frame_rate; boost::optional _video_size; @@ -92,4 +96,5 @@ private: bool _encrypted; bool _kdm_valid; boost::optional _standard; + bool _three_d; }; -- 2.30.2