From: Carl Hetherington Date: Thu, 10 Jul 2014 19:38:28 +0000 (+0100) Subject: Merge master. X-Git-Tag: v2.0.48~734 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=8d58a7c5f4320ad5c111e336c45e44d6b51ab509;hp=-c Merge master. --- 8d58a7c5f4320ad5c111e336c45e44d6b51ab509 diff --combined ChangeLog index b59b94c8c,fee8a50f3..61f558dcc --- a/ChangeLog +++ b/ChangeLog @@@ -1,7 -1,16 +1,20 @@@ +2014-03-07 Carl Hetherington + + * Add subtitle view. + + 2014-07-10 Carl Hetherington + + * Try to fix corruption of KDM email setting in + some cases. + + * Version 1.72.1 released. + + 2014-07-08 Carl Hetherington + + * Fix various problems with seek and content + being trimmed when its video frame rate is + overridden. + 2014-07-02 Carl Hetherington * Updated de_DE translation from Carsten Kurz. diff --combined src/lib/playlist.cc index 1c65d1326,8b874aae6..16c740943 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@@ -80,20 -80,20 +80,20 @@@ Playlist::maybe_sequence_video ( _sequencing_video = true; ContentList cl = _content; - Time next_left = 0; - Time next_right = 0; + DCPTime next_left; + DCPTime next_right; for (ContentList::iterator i = _content.begin(); i != _content.end(); ++i) { shared_ptr vc = dynamic_pointer_cast (*i); if (!vc) { continue; } - + if (vc->video_frame_type() == VIDEO_FRAME_TYPE_3D_RIGHT) { vc->set_position (next_right); - next_right = vc->end() + 1; + next_right = vc->end() + DCPTime::delta (); } else { vc->set_position (next_left); - next_left = vc->end() + 1; + next_left = vc->end() + DCPTime::delta (); } } @@@ -121,7 -121,7 +121,7 @@@ Playlist::video_identifier () cons /** @param node node */ void -Playlist::set_from_xml (shared_ptr film, shared_ptr node, int version, list& notes) +Playlist::set_from_xml (shared_ptr film, cxml::ConstNodePtr node, int version, list& notes) { list c = node->node_children ("Content"); for (list::iterator i = c.begin(); i != c.end(); ++i) { @@@ -186,6 -186,19 +186,6 @@@ Playlist::remove (ContentList c Changed (); } -bool -Playlist::has_subtitles () const -{ - for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) { - shared_ptr fc = dynamic_pointer_cast (*i); - if (fc && !fc->subtitle_streams().empty()) { - return true; - } - } - - return false; -} - class FrameRateCandidate { public: @@@ -249,12 -262,12 +249,12 @@@ Playlist::best_dcp_frame_rate () cons return best->dcp; } -Time +DCPTime Playlist::length () const { - Time len = 0; + DCPTime len; for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) { - len = max (len, (*i)->end() + 1); + len = max (len, (*i)->end() + DCPTime::delta ()); } return len; @@@ -274,10 -287,10 +274,10 @@@ Playlist::reconnect ( } } -Time +DCPTime Playlist::video_end () const { - Time end = 0; + DCPTime end; for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) { if (dynamic_pointer_cast (*i)) { end = max (end, (*i)->end ()); @@@ -287,23 -300,6 +287,23 @@@ return end; } +FrameRateChange +Playlist::active_frame_rate_change (DCPTime t, int dcp_video_frame_rate) const +{ + for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) { + shared_ptr vc = dynamic_pointer_cast (*i); + if (!vc) { + continue; + } + + if (vc->position() >= t && t < vc->end()) { + return FrameRateChange (vc->video_frame_rate(), dcp_video_frame_rate); + } + } + + return FrameRateChange (dcp_video_frame_rate, dcp_video_frame_rate); +} + void Playlist::set_sequence_video (bool s) { @@@ -326,7 -322,7 +326,7 @@@ Playlist::content () cons void Playlist::repeat (ContentList c, int n) { - pair range (TIME_MAX, 0); + pair range (DCPTime::max (), DCPTime ()); for (ContentList::iterator i = c.begin(); i != c.end(); ++i) { range.first = min (range.first, (*i)->position ()); range.second = max (range.second, (*i)->position ()); @@@ -334,7 -330,7 +334,7 @@@ range.second = max (range.second, (*i)->end ()); } - Time pos = range.second; + DCPTime pos = range.second; for (int i = 0; i < n; ++i) { for (ContentList::iterator i = c.begin(); i != c.end(); ++i) { shared_ptr copy = (*i)->clone (); @@@ -368,7 -364,7 +368,7 @@@ Playlist::move_earlier (shared_ptrposition (); + DCPTime const p = (*previous)->position (); (*previous)->set_position (p + c->length_after_trim ()); c->set_position (p); sort (_content.begin(), _content.end(), ContentSorter ()); @@@ -393,8 -389,24 +393,7 @@@ Playlist::move_later (shared_ptrposition (); (*next)->set_position (c->position ()); c->set_position (c->position() + c->length_after_trim ()); sort (_content.begin(), _content.end(), ContentSorter ()); } - -FrameRateChange -Playlist::active_frame_rate_change (Time t, int dcp_video_frame_rate) const -{ - for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) { - shared_ptr vc = dynamic_pointer_cast (*i); - if (!vc) { - continue; - } - - if (vc->position() >= t && t < vc->end()) { - return FrameRateChange (vc->video_frame_rate(), dcp_video_frame_rate); - } - } - - return FrameRateChange (dcp_video_frame_rate, dcp_video_frame_rate); -} diff --combined src/wx/config_dialog.cc index b25b470c1,ff2588253..fc77b42a2 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@@ -28,14 -28,13 +28,14 @@@ #include #include #include -#include +#include #include "lib/config.h" #include "lib/ratio.h" #include "lib/scaler.h" #include "lib/filter.h" #include "lib/dcp_content_type.h" #include "lib/colour_conversion.h" +#include "lib/log.h" #include "config_dialog.h" #include "wx_util.h" #include "editable_list.h" @@@ -396,14 -395,14 +396,14 @@@ private void issuer_changed () { - libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + dcp::XMLMetadata m = Config::instance()->dcp_metadata (); m.issuer = wx_to_std (_issuer->GetValue ()); Config::instance()->set_dcp_metadata (m); } void creator_changed () { - libdcp::XMLMetadata m = Config::instance()->dcp_metadata (); + dcp::XMLMetadata m = Config::instance()->dcp_metadata (); m.creator = wx_to_std (_creator->GetValue ()); Config::instance()->set_dcp_metadata (m); } @@@ -697,7 -696,7 +697,7 @@@ public _kdm_cc->SetValue (std_to_wx (config->kdm_cc ())); _kdm_cc->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_cc_changed, this)); _kdm_email->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_email_changed, this)); - _kdm_email->SetValue (wx_to_std (Config::instance()->kdm_email ())); + _kdm_email->SetValue (std_to_wx (Config::instance()->kdm_email ())); _reset_kdm_email->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMEmailPage::reset_kdm_email, this)); return panel;