From 2ea3a0d0e4066a166c0700bd1d53daa7f1c50dff Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 1 Nov 2020 23:51:19 +0100 Subject: Pass around JPEG2000 data as a shared_ptr and hence avoid a copy of 4MB of data for every JPEG2000 frame we decode. --- src/lib/writer.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/lib/writer.cc') diff --git a/src/lib/writer.cc b/src/lib/writer.cc index d3fdc5128..346cbb0c2 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -66,6 +66,7 @@ using boost::optional; using namespace boost::placeholders; #endif using dcp::Data; +using dcp::ArrayData; using namespace dcpomatic; Writer::Writer (shared_ptr film, weak_ptr j) @@ -130,7 +131,7 @@ Writer::~Writer () * @param eyes Eyes that this frame image is for. */ void -Writer::write (Data encoded, Frame frame, Eyes eyes) +Writer::write (shared_ptr encoded, Frame frame, Eyes eyes) { boost::mutex::scoped_lock lock (_state_mutex); @@ -426,7 +427,7 @@ try case QueueItem::FULL: LOG_DEBUG_ENCODE (N_("Writer FULL-writes %1 (%2)"), qi.frame, (int) qi.eyes); if (!qi.encoded) { - qi.encoded = Data (_film->j2c_path (qi.reel, qi.frame, qi.eyes, false)); + qi.encoded.reset (new ArrayData(_film->j2c_path(qi.reel, qi.frame, qi.eyes, false))); } reel.write (qi.encoded, qi.frame, qi.eyes); ++_full_written; -- cgit v1.2.3