Merge branch 'master' into 12bit
[dcpomatic.git] / src / lib / playlist.cc
index eb9a49d30b3947cca95da47328b30c5bd0335bbe..c3e430082ecacd2a51db12edb1e5ee536b577fc6 100644 (file)
@@ -30,6 +30,7 @@
 #include "job.h"
 #include "config.h"
 #include "util.h"
+#include "md5_digester.h"
 
 #include "i18n.h"
 
@@ -39,7 +40,6 @@ using std::vector;
 using std::min;
 using std::max;
 using std::string;
-using std::stringstream;
 using std::pair;
 using boost::optional;
 using boost::shared_ptr;
@@ -113,7 +113,9 @@ Playlist::video_identifier () const
                }
        }
 
-       return md5_digest (t.c_str(), t.length());
+       MD5Digester digester;
+       digester.add (t.c_str(), t.length());
+       return digester.get ();
 }
 
 /** @param node <Playlist> node */
@@ -359,13 +361,12 @@ Playlist::move_earlier (shared_ptr<Content> c)
        if (previous == _content.end ()) {
                return;
        }
+
        
        Time const p = (*previous)->position ();
        (*previous)->set_position (p + c->length_after_trim ());
        c->set_position (p);
        sort (_content.begin(), _content.end(), ContentSorter ());
-       
-       Changed ();
 }
 
 void
@@ -387,10 +388,24 @@ Playlist::move_later (shared_ptr<Content> c)
                return;
        }
 
-       Time const p = (*next)->position ();
        (*next)->set_position (c->position ());
-       c->set_position (p + c->length_after_trim ());
+       c->set_position (c->position() + c->length_after_trim ());
        sort (_content.begin(), _content.end(), ContentSorter ());
-       
-       Changed ();
+}
+
+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<const VideoContent> vc = dynamic_pointer_cast<const VideoContent> (*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);
 }