summaryrefslogtreecommitdiff
path: root/src/lib/imagemagick_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-07-15 00:14:28 +0100
committerCarl Hetherington <cth@carlh.net>2012-07-15 00:14:28 +0100
commitbb767c7e338414beee132af3e96829c1448e214b (patch)
treebec2858dcc7225a9bcc2acd8170c25508f6df6cb /src/lib/imagemagick_decoder.cc
parent66c9be6bdb1361e5681e094a0c8170d268aa9518 (diff)
Move things round a bit.
Diffstat (limited to 'src/lib/imagemagick_decoder.cc')
-rw-r--r--src/lib/imagemagick_decoder.cc55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/lib/imagemagick_decoder.cc b/src/lib/imagemagick_decoder.cc
new file mode 100644
index 000000000..7cee01ec5
--- /dev/null
+++ b/src/lib/imagemagick_decoder.cc
@@ -0,0 +1,55 @@
+#include <iostream>
+#include <Magick++/Image.h>
+#include "imagemagick_decoder.h"
+#include "film_state.h"
+#include "image.h"
+
+using namespace std;
+
+ImageMagickDecoder::ImageMagickDecoder (
+ boost::shared_ptr<const FilmState> s, boost::shared_ptr<const Options> o, Job* j, Log* l, bool minimal, bool ignore_length)
+ : Decoder (s, o, j, l, minimal, ignore_length)
+ , _done (false)
+{
+ _magick_image = new Magick::Image (_fs->content_path ());
+}
+
+Size
+ImageMagickDecoder::native_size () const
+{
+ return Size (_magick_image->columns(), _magick_image->rows());
+}
+
+bool
+ImageMagickDecoder::do_pass ()
+{
+ if (_done) {
+ return true;
+ }
+
+ Size size = native_size ();
+ RGBFrameImage image (size);
+
+ uint8_t* p = image.data()[0];
+ for (int y = 0; y < size.height; ++y) {
+ for (int x = 0; x < size.width; ++x) {
+ Magick::Color c = _magick_image->pixelColor (x, y);
+ *p++ = c.redQuantum() * 255 / MaxRGB;
+ *p++ = c.greenQuantum() * 255 / MaxRGB;
+ *p++ = c.blueQuantum() * 255 / MaxRGB;
+ }
+
+ }
+
+ process_video (image.frame ());
+
+ _done = true;
+ return false;
+}
+
+PixelFormat
+ImageMagickDecoder::pixel_format () const
+{
+ return PIX_FMT_RGB24;
+}
+