diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-07-15 00:14:28 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-07-15 00:14:28 +0100 |
| commit | bb767c7e338414beee132af3e96829c1448e214b (patch) | |
| tree | bec2858dcc7225a9bcc2acd8170c25508f6df6cb /src/lib/imagemagick_decoder.cc | |
| parent | 66c9be6bdb1361e5681e094a0c8170d268aa9518 (diff) | |
Move things round a bit.
Diffstat (limited to 'src/lib/imagemagick_decoder.cc')
| -rw-r--r-- | src/lib/imagemagick_decoder.cc | 55 |
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; +} + |
