summaryrefslogtreecommitdiff
path: root/src/lib/image_proxy.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-06-12 22:27:11 +0100
committerCarl Hetherington <cth@carlh.net>2014-06-12 22:27:11 +0100
commit4e411ea97b4dab8a5fa282d1d4cf7971ef1e24ad (patch)
tree06db8731e77dfeaf537f2814d73c7a599035b95c /src/lib/image_proxy.cc
parent8102046b2f29e0c7b234c29bf204b056cb30e64f (diff)
parent66162217d93baa3fd50594bb013a44bbd779d02a (diff)
Merge master.
Diffstat (limited to 'src/lib/image_proxy.cc')
-rw-r--r--src/lib/image_proxy.cc19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/lib/image_proxy.cc b/src/lib/image_proxy.cc
index 16bd92f6e..1eb9c169c 100644
--- a/src/lib/image_proxy.cc
+++ b/src/lib/image_proxy.cc
@@ -55,7 +55,7 @@ RawImageProxy::RawImageProxy (shared_ptr<cxml::Node> xml, shared_ptr<Socket> soc
xml->number_child<int> ("Width"), xml->number_child<int> ("Height")
);
- _image.reset (new Image (PIX_FMT_RGB24, size, true));
+ _image.reset (new Image (static_cast<AVPixelFormat> (xml->number_child<int> ("PixelFormat")), size, true));
_image->read_from_socket (socket);
}
@@ -71,6 +71,7 @@ RawImageProxy::add_metadata (xmlpp::Node* node) const
node->add_child("Type")->add_child_text (N_("Raw"));
node->add_child("Width")->add_child_text (dcp::raw_convert<string> (_image->size().width));
node->add_child("Height")->add_child_text (dcp::raw_convert<string> (_image->size().height));
+ node->add_child("PixelFormat")->add_child_text (dcp::raw_convert<string> (_image->pixel_format ()));
}
void
@@ -132,22 +133,14 @@ MagickImageProxy::image () const
_image.reset (new Image (PIX_FMT_RGB24, size, true));
- using namespace MagickCore;
-
+ /* Write line-by-line here as _image must be aligned, and write() cannot be told about strides */
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;
- }
+ for (int i = 0; i < size.height; ++i) {
+ using namespace MagickCore;
+ magick_image->write (0, i, size.width, 1, "RGB", CharPixel, p);
p += _image->stride()[0];
}
- delete magick_image;
-
LOG_TIMING ("[%1] MagickImageProxy completes decode and convert of %2 bytes", boost::this_thread::get_id(), _blob.length());
return _image;