X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fj2k_image_proxy.cc;h=144da396d24ee619970c679de49731378a69963c;hp=fcd1689cbf2df23190fbe5f10ae46d64d8075968;hb=8963f0007af1a312017b9627c18b82ec2a577591;hpb=29f84e2b8785585885e0658bdf9938967547460f diff --git a/src/lib/j2k_image_proxy.cc b/src/lib/j2k_image_proxy.cc index fcd1689cb..144da396d 100644 --- a/src/lib/j2k_image_proxy.cc +++ b/src/lib/j2k_image_proxy.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014-2015 Carl Hetherington + Copyright (C) 2014-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,6 +18,7 @@ */ + #include "j2k_image_proxy.h" #include "dcpomatic_socket.h" #include "image.h" @@ -38,17 +39,20 @@ DCPOMATIC_ENABLE_WARNINGS #include "i18n.h" -using std::string; + using std::cout; +using std::dynamic_pointer_cast; +using std::make_pair; +using std::make_shared; using std::max; using std::pair; -using std::make_pair; using std::shared_ptr; +using std::string; using boost::optional; -using std::dynamic_pointer_cast; using dcp::ArrayData; using dcp::raw_convert; + /** Construct a J2KImageProxy from a JPEG2000 file */ J2KImageProxy::J2KImageProxy (boost::filesystem::path path, dcp::Size size, AVPixelFormat pixel_format) : _data (new dcp::ArrayData(path)) @@ -100,9 +104,9 @@ J2KImageProxy::J2KImageProxy ( J2KImageProxy::J2KImageProxy (shared_ptr xml, shared_ptr socket) : _error (false) { - _size = dcp::Size (xml->number_child ("Width"), xml->number_child ("Height")); - if (xml->optional_number_child ("Eye")) { - _eye = static_cast (xml->number_child ("Eye")); + _size = dcp::Size (xml->number_child("Width"), xml->number_child("Height")); + if (xml->optional_number_child("Eye")) { + _eye = static_cast(xml->number_child("Eye")); } shared_ptr data(new ArrayData(xml->number_child("Size"))); /* This only matters when we are using J2KImageProxy for the preview, which @@ -114,6 +118,7 @@ J2KImageProxy::J2KImageProxy (shared_ptr xml, shared_ptr soc _data = data; } + int J2KImageProxy::prepare (optional target_size) const { @@ -139,7 +144,7 @@ J2KImageProxy::prepare (optional target_size) const try { /* XXX: should check that potentially trashing _data here doesn't matter */ - shared_ptr decompressed = dcp::decompress_j2k (const_cast(_data->data()), _data->size(), reduce); + auto decompressed = dcp::decompress_j2k (const_cast(_data->data()), _data->size(), reduce); _image.reset (new Image (_pixel_format, decompressed->size(), true)); int const shift = 16 - decompressed->precision (0); @@ -155,7 +160,7 @@ J2KImageProxy::prepare (optional target_size) const int* decomp_1 = decompressed->data (1); int* decomp_2 = decompressed->data (2); for (int y = 0; y < decompressed->size().height; ++y) { - uint16_t* q = (uint16_t *) (_image->data()[0] + y * _image->stride()[0]); + auto q = reinterpret_cast(_image->data()[0] + y * _image->stride()[0]); for (int x = 0; x < width; ++x) { *q++ = decomp_0[p] << shift; *q++ = decomp_1[p] << shift; @@ -164,7 +169,7 @@ J2KImageProxy::prepare (optional target_size) const } } } catch (dcp::J2KDecompressionError& e) { - _image.reset (new Image (_pixel_format, _size, true)); + _image = make_shared(_pixel_format, _size, true); _image->make_black (); _error = true; } @@ -191,25 +196,27 @@ J2KImageProxy::image (optional target_size) const void J2KImageProxy::add_metadata (xmlpp::Node* node) const { - node->add_child("Type")->add_child_text (N_("J2K")); - node->add_child("Width")->add_child_text (raw_convert (_size.width)); - node->add_child("Height")->add_child_text (raw_convert (_size.height)); + node->add_child("Type")->add_child_text(N_("J2K")); + node->add_child("Width")->add_child_text(raw_convert(_size.width)); + node->add_child("Height")->add_child_text(raw_convert(_size.height)); if (_eye) { - node->add_child("Eye")->add_child_text (raw_convert (static_cast (_eye.get ()))); + node->add_child("Eye")->add_child_text(raw_convert(static_cast(_eye.get()))); } - node->add_child("Size")->add_child_text (raw_convert(_data->size())); + node->add_child("Size")->add_child_text(raw_convert(_data->size())); } + void J2KImageProxy::write_to_socket (shared_ptr socket) const { socket->write (_data->data(), _data->size()); } + bool J2KImageProxy::same (shared_ptr other) const { - shared_ptr jp = dynamic_pointer_cast (other); + auto jp = dynamic_pointer_cast(other); if (!jp) { return false; } @@ -217,6 +224,7 @@ J2KImageProxy::same (shared_ptr other) const return *_data == *jp->_data; } + J2KImageProxy::J2KImageProxy (ArrayData data, dcp::Size size, AVPixelFormat pixel_format) : _data (new ArrayData(data)) , _size (size) @@ -227,6 +235,7 @@ J2KImageProxy::J2KImageProxy (ArrayData data, dcp::Size size, AVPixelFormat pixe DCPOMATIC_ASSERT (_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); } + size_t J2KImageProxy::memory_used () const {