Support for keeping video in sequence when changing lengths; tie selection in timelin...
[dcpomatic.git] / src / lib / imagemagick_content.cc
index 9e5f00ba0c7dbf78f4daa9e4295552d9acb1f095..a4777e3cda11350c5823384fb5022c4b8c702e7b 100644 (file)
@@ -29,16 +29,16 @@ using std::string;
 using std::stringstream;
 using boost::shared_ptr;
 
-ImageMagickContent::ImageMagickContent (boost::filesystem::path f)
-       : Content (f)
-       , VideoContent (f)
+ImageMagickContent::ImageMagickContent (shared_ptr<const Film> f, boost::filesystem::path p)
+       : Content (f, p)
+       , VideoContent (f, p)
 {
 
 }
 
-ImageMagickContent::ImageMagickContent (shared_ptr<const cxml::Node> node)
-       : Content (node)
-       , VideoContent (node)
+ImageMagickContent::ImageMagickContent (shared_ptr<const Film> f, shared_ptr<const cxml::Node> node)
+       : Content (f, node)
+       , VideoContent (f, node)
 {
        
 }
@@ -66,20 +66,17 @@ ImageMagickContent::as_xml (xmlpp::Node* node) const
 }
 
 void
-ImageMagickContent::examine (shared_ptr<Film> film, shared_ptr<Job> job, bool quick)
+ImageMagickContent::examine (shared_ptr<Job> job)
 {
-       Content::examine (film, job, quick);
-       shared_ptr<ImageMagickDecoder> decoder (new ImageMagickDecoder (film, shared_from_this()));
+       Content::examine (job);
 
-       {
-               boost::mutex::scoped_lock lm (_mutex);
-               /* Initial length */
-               _video_length = Config::instance()->default_still_length() * 24;
-       }
+       shared_ptr<const Film> film = _film.lock ();
+       assert (film);
        
+       shared_ptr<ImageMagickDecoder> decoder (new ImageMagickDecoder (film, shared_from_this()));
+
+       set_video_length (Config::instance()->default_still_length() * 24);
        take_from_video_decoder (decoder);
-       
-        signal_changed (VideoContentProperty::VIDEO_LENGTH);
 }
 
 shared_ptr<Content>
@@ -96,5 +93,15 @@ ImageMagickContent::set_video_length (ContentVideoFrame len)
                _video_length = len;
        }
 
-       signal_changed (VideoContentProperty::VIDEO_LENGTH);
+       signal_changed (ContentProperty::LENGTH);
+}
+
+Time
+ImageMagickContent::length () const
+{
+       shared_ptr<const Film> film = _film.lock ();
+       assert (film);
+       
+       FrameRateConversion frc (24, film->dcp_video_frame_rate ());
+       return video_length() * frc.factor() * TIME_HZ / film->dcp_video_frame_rate ();
 }