/*
- Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
-#include <libcxml/cxml.h>
-#include <dcp/raw_convert.h>
-#include <dcp/mono_picture_frame.h>
-#include <dcp/stereo_picture_frame.h>
#include "j2k_image_proxy.h"
#include "dcpomatic_socket.h"
#include "image.h"
#include "encoded_data.h"
+#include <dcp/raw_convert.h>
+#include <dcp/mono_picture_frame.h>
+#include <dcp/stereo_picture_frame.h>
+#include <dcp/colour_conversion.h>
+#include <dcp/rgb_xyz.h>
+#include <libcxml/cxml.h>
#include "i18n.h"
shared_ptr<Image>
J2KImageProxy::image (optional<dcp::NoteHandler> note) const
{
- shared_ptr<Image> image (new Image (PIX_FMT_RGB48LE, _size, false));
+ shared_ptr<Image> image (new Image (PIX_FMT_RGB48LE, _size, true));
if (_mono) {
- _mono->rgb_frame (reinterpret_cast<uint16_t*> (image->data()[0]), note);
+ dcp::xyz_to_rgb (_mono->xyz_image (), dcp::ColourConversion::xyz_to_srgb(), image->data()[0], image->stride()[0], note);
} else {
- _stereo->rgb_frame (_eye, reinterpret_cast<uint16_t*> (image->data()[0]));
+ dcp::xyz_to_rgb (_stereo->xyz_image (_eye.get ()), dcp::ColourConversion::xyz_to_srgb(), image->data()[0], image->stride()[0], note);
}
- return shared_ptr<Image> (new Image (image, true));
+ return image;
}
void
node->add_child("Width")->add_child_text (dcp::raw_convert<string> (_size.width));
node->add_child("Height")->add_child_text (dcp::raw_convert<string> (_size.height));
if (_stereo) {
- node->add_child("Eye")->add_child_text (dcp::raw_convert<string> (_eye));
+ node->add_child("Eye")->add_child_text (dcp::raw_convert<string> (_eye.get ()));
node->add_child("LeftSize")->add_child_text (dcp::raw_convert<string> (_stereo->left_j2k_size ()));
node->add_child("RightSize")->add_child_text (dcp::raw_convert<string> (_stereo->right_j2k_size ()));
} else {
if (_mono) {
return shared_ptr<EncodedData> (new EncodedData (_mono->j2k_data(), _mono->j2k_size()));
} else {
- if (_eye == dcp::EYE_LEFT) {
+ if (_eye.get() == dcp::EYE_LEFT) {
return shared_ptr<EncodedData> (new EncodedData (_stereo->left_j2k_data(), _stereo->left_j2k_size()));
} else {
return shared_ptr<EncodedData> (new EncodedData (_stereo->right_j2k_data(), _stereo->right_j2k_size()));