Test filling of stuff with black.
[dcpomatic.git] / src / lib / imagemagick_decoder.cc
index bea4fafa6223ee3e400a110dc7c610c7c2da54ae..7da0ed551e3a86960dd7183c222241ece9318f90 100644 (file)
@@ -73,13 +73,12 @@ ImageMagickDecoder::video_frame_rate () const
 void
 ImageMagickDecoder::pass ()
 {
-       if (_position < 0 || _position >= _imagemagick_content->video_length ()) {
+       if (_next_video >= _imagemagick_content->length ()) {
                return;
        }
 
        if (_image) {
-               video (_image, true, double (_position) / video_frame_rate());
-               _position++;
+               video (_image, true, _next_video);
                return;
        }
 
@@ -103,31 +102,35 @@ ImageMagickDecoder::pass ()
        delete magick_image;
 
        _image = _image->crop (_imagemagick_content->crop(), true);
-       video (_image, false, double (_position) / 24);
-
-       ++_position;
-       return false;
+       video (_image, false, _next_video);
 }
 
-PixelFormat
-ImageMagickDecoder::pixel_format () const
+void
+ImageMagickDecoder::seek (Time t)
 {
-       /* XXX: always true? */
-       return PIX_FMT_RGB24;
+       _next_video = t;
 }
 
-bool
-ImageMagickDecoder::seek (double t)
+void
+ImageMagickDecoder::seek_back ()
 {
-       int const f = t * _imagemagick_content->video_frame_rate ();
-
-       if (f >= _imagemagick_content->video_length()) {
-               _position = 0;
-               return true;
+       boost::shared_ptr<const Film> f = _film.lock ();
+       if (!f) {
+               return;
        }
+       
+       _next_video -= f->video_frames_to_time (2);
+}
 
-       _position = f;
-       return false;
+void
+ImageMagickDecoder::seek_forward ()
+{
+       boost::shared_ptr<const Film> f = _film.lock ();
+       if (!f) {
+               return;
+       }
+       
+       _next_video += f->video_frames_to_time (1);
 }
 
 Time
@@ -135,3 +138,11 @@ ImageMagickDecoder::next () const
 {
        return _next_video;
 }
+
+
+bool
+ImageMagickDecoder::done () const
+{
+       return video_done ();
+}
+