Merge master.
[dcpomatic.git] / src / lib / image_decoder.cc
index 204849ecf8bd1ddc3ca415d5152eb4085863816e..58ba732bb57b09abdc113f6ae3646e2ebde0ea61 100644 (file)
 
 using std::cout;
 using boost::shared_ptr;
-using libdcp::Size;
+using dcp::Size;
 
-ImageDecoder::ImageDecoder (shared_ptr<const Film> f, shared_ptr<const ImageContent> c)
-       : Decoder (f)
-       , VideoDecoder (f, c)
+ImageDecoder::ImageDecoder (shared_ptr<const ImageContent> c)
+       : VideoDecoder (c)
        , _image_content (c)
-       , _video_position (0)
 {
 
 }
@@ -50,19 +48,23 @@ ImageDecoder::pass ()
 
        if (_image && _image_content->still ()) {
                video (_image, true, _video_position);
-               ++_video_position;
+               _video_position += ContentTime::from_frames (1, _image_content->video_frame_rate ());
                return false;
        }
 
        Magick::Image* magick_image = 0;
-       boost::filesystem::path const path = _image_content->path (_image_content->still() ? 0 : _video_position);
+
+       boost::filesystem::path const path = _image_content->path (
+               _image_content->still() ? 0 : _video_position.frames (_image_content->video_frame_rate ())
+               );
+       
        try {
                magick_image = new Magick::Image (path.string ());
        } catch (...) {
                throw OpenFileError (path);
        }
        
-       libdcp::Size size (magick_image->columns(), magick_image->rows());
+       dcp::Size size (magick_image->columns(), magick_image->rows());
 
        _image.reset (new Image (PIX_FMT_RGB24, size, true));
 
@@ -83,7 +85,7 @@ ImageDecoder::pass ()
        delete magick_image;
 
        video (_image, false, _video_position);
-       ++_video_position;
+       _video_position += ContentTime::from_frames (1, _image_content->video_frame_rate ());
 
        return false;
 }
@@ -92,6 +94,5 @@ void
 ImageDecoder::seek (ContentTime time, bool accurate)
 {
        Decoder::seek (time, accurate);
-       
-       _video_position = rint (time * _video_content->video_frame_rate() / TIME_HZ);
+       _video_position = time;
 }