Support for keeping video in sequence when changing lengths; tie selection in timelin...
[dcpomatic.git] / src / lib / imagemagick_content.cc
index f9572b518fccf8a369b984423e855ed2e7e943a3..a4777e3cda11350c5823384fb5022c4b8c702e7b 100644 (file)
 #include <libcxml/cxml.h>
 #include "imagemagick_content.h"
 #include "imagemagick_decoder.h"
+#include "config.h"
 #include "compose.hpp"
 
 #include "i18n.h"
 
 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)
 {
        
 }
@@ -44,7 +46,7 @@ ImageMagickContent::ImageMagickContent (shared_ptr<const cxml::Node> node)
 string
 ImageMagickContent::summary () const
 {
-       return String::compose (_("Image: %1"), file().filename ());
+       return String::compose (_("Image: %1"), file().filename().string());
 }
 
 bool
@@ -64,16 +66,42 @@ 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);
+       Content::examine (job);
+
+       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);
+}
+
+shared_ptr<Content>
+ImageMagickContent::clone () const
+{
+       return shared_ptr<Content> (new ImageMagickContent (*this));
+}
+
+void
+ImageMagickContent::set_video_length (ContentVideoFrame len)
+{
        {
                boost::mutex::scoped_lock lm (_mutex);
-               /* XXX */
-               _video_length = 10 * 24;
+               _video_length = len;
        }
+
+       signal_changed (ContentProperty::LENGTH);
+}
+
+Time
+ImageMagickContent::length () const
+{
+       shared_ptr<const Film> film = _film.lock ();
+       assert (film);
        
-       take_from_video_decoder (decoder);
+       FrameRateConversion frc (24, film->dcp_video_frame_rate ());
+       return video_length() * frc.factor() * TIME_HZ / film->dcp_video_frame_rate ();
 }