X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fimage_decoder.cc;h=7a9acd9e4960e611bda76e912e4837738e94dc59;hb=4265db19ba68a995fca42bdd5fa815aead9c5c50;hp=a7999c02a86b5270b09dd50fd118c00280ef5761;hpb=af3e8ed8382cdc35e361cdca1f735a379fce1317;p=dcpomatic.git diff --git a/src/lib/image_decoder.cc b/src/lib/image_decoder.cc index a7999c02a..7a9acd9e4 100644 --- a/src/lib/image_decoder.cc +++ b/src/lib/image_decoder.cc @@ -23,6 +23,7 @@ #include "image_content.h" #include "image_decoder.h" #include "image.h" +#include "image_proxy.h" #include "film.h" #include "exceptions.h" @@ -52,34 +53,10 @@ ImageDecoder::pass () return; } - Magick::Image* magick_image = 0; - boost::filesystem::path const path = _image_content->path (_image_content->still() ? 0 : _video_position); - try { - magick_image = new Magick::Image (path.string ()); - } catch (...) { - throw OpenFileError (path); - } - - libdcp::Size size (magick_image->columns(), magick_image->rows()); - - _image.reset (new Image (PIX_FMT_RGB24, size, true)); - - using namespace MagickCore; - - uint8_t* p = _image->data()[0]; - for (int y = 0; y < size.height; ++y) { - uint8_t* q = p; - for (int x = 0; x < size.width; ++x) { - Magick::Color c = magick_image->pixelColor (x, y); - *q++ = c.redQuantum() * 255 / QuantumRange; - *q++ = c.greenQuantum() * 255 / QuantumRange; - *q++ = c.blueQuantum() * 255 / QuantumRange; - } - p += _image->stride()[0]; - } - - delete magick_image; + shared_ptr film = _film.lock (); + assert (film); + _image.reset (new MagickImageProxy (_image_content->path (_image_content->still() ? 0 : _video_position), film->log ())); video (_image, false, _video_position); }