summaryrefslogtreecommitdiff
path: root/src/lib/imagemagick_decoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/imagemagick_decoder.cc')
-rw-r--r--src/lib/imagemagick_decoder.cc33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/lib/imagemagick_decoder.cc b/src/lib/imagemagick_decoder.cc
index d68c1648f..5713e68f9 100644
--- a/src/lib/imagemagick_decoder.cc
+++ b/src/lib/imagemagick_decoder.cc
@@ -29,7 +29,7 @@ using std::cout;
using boost::shared_ptr;
ImageMagickDecoder::ImageMagickDecoder (
- boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j)
+ boost::shared_ptr<Film> f, boost::shared_ptr<const DecodeOptions> o, Job* j)
: Decoder (f, o, j)
, VideoDecoder (f, o, j)
{
@@ -73,13 +73,13 @@ ImageMagickDecoder::pass ()
return true;
}
- using namespace MagickCore;
-
Magick::Image* magick_image = new Magick::Image (_film->content_path ());
Size size = native_size ();
- shared_ptr<CompactImage> image (new CompactImage (PIX_FMT_RGB24, size));
+ shared_ptr<Image> image (new SimpleImage (PIX_FMT_RGB24, size, false));
+ using namespace MagickCore;
+
uint8_t* p = image->data()[0];
for (int y = 0; y < size.height; ++y) {
for (int x = 0; x < size.width; ++x) {
@@ -91,8 +91,10 @@ ImageMagickDecoder::pass ()
}
delete magick_image;
+
+ image = image->crop (_film->crop(), false);
- emit_video (image);
+ emit_video (image, 0);
++_iter;
return false;
@@ -105,3 +107,24 @@ ImageMagickDecoder::pixel_format () const
return PIX_FMT_RGB24;
}
+bool
+ImageMagickDecoder::seek (SourceFrame f)
+{
+ _iter = _files.begin ();
+ for (int i = 0; i < f; ++i) {
+ if (_iter == _files.end()) {
+ return true;
+ }
+ ++_iter;
+ }
+
+ return false;
+}
+
+void
+ImageMagickDecoder::film_changed (Film::Property p)
+{
+ if (p == Film::CROP) {
+ OutputChanged ();
+ }
+}