Move things round a bit.
[dcpomatic.git] / src / lib / imagemagick_decoder.cc
1 #include <iostream>
2 #include <Magick++/Image.h>
3 #include "imagemagick_decoder.h"
4 #include "film_state.h"
5 #include "image.h"
6
7 using namespace std;
8
9 ImageMagickDecoder::ImageMagickDecoder (
10         boost::shared_ptr<const FilmState> s, boost::shared_ptr<const Options> o, Job* j, Log* l, bool minimal, bool ignore_length)
11         : Decoder (s, o, j, l, minimal, ignore_length)
12         , _done (false)
13 {
14         _magick_image = new Magick::Image (_fs->content_path ());
15 }
16
17 Size
18 ImageMagickDecoder::native_size () const
19 {
20         return Size (_magick_image->columns(), _magick_image->rows());
21 }
22
23 bool
24 ImageMagickDecoder::do_pass ()
25 {
26         if (_done) {
27                 return true;
28         }
29
30         Size size = native_size ();
31         RGBFrameImage image (size);
32
33         uint8_t* p = image.data()[0];
34         for (int y = 0; y < size.height; ++y) {
35                 for (int x = 0; x < size.width; ++x) {
36                         Magick::Color c = _magick_image->pixelColor (x, y);
37                         *p++ = c.redQuantum() * 255 / MaxRGB;
38                         *p++ = c.greenQuantum() * 255 / MaxRGB;
39                         *p++ = c.blueQuantum() * 255 / MaxRGB;
40                 }
41
42         }
43         
44         process_video (image.frame ());
45
46         _done = true;
47         return false;
48 }
49
50 PixelFormat
51 ImageMagickDecoder::pixel_format () const
52 {
53         return PIX_FMT_RGB24;
54 }
55