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;
}
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
{
return _next_video;
}
+
+
+bool
+ImageMagickDecoder::done () const
+{
+ return video_done ();
+}
+