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/j2k_encoder.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/lib/j2k_encoder.cc') diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc index 64cd38147..18bb27645 100644 --- a/src/lib/j2k_encoder.cc +++ b/src/lib/j2k_encoder.cc @@ -127,7 +127,7 @@ J2KEncoder::end () LOG_GENERAL (N_("Encode left-over frame %1"), (*i)->index ()); try { _writer->write ( - (*i)->encode_locally(), + shared_ptr(new dcp::ArrayData((*i)->encode_locally())), (*i)->index(), (*i)->eyes() ); @@ -296,12 +296,12 @@ try lock.unlock (); - optional encoded; + shared_ptr encoded; /* We need to encode this input */ if (server) { try { - encoded = vf->encode_remotely (server.get ()); + encoded.reset(new dcp::ArrayData(vf->encode_remotely(server.get()))); if (remote_backoff > 0) { LOG_GENERAL ("%1 was lost, but now she is found; removing backoff", server->host_name ()); @@ -324,7 +324,7 @@ try } else { try { LOG_TIMING ("start-local-encode thread=%1 frame=%2", thread_id(), vf->index()); - encoded = vf->encode_locally (); + encoded.reset(new dcp::ArrayData(vf->encode_locally())); LOG_TIMING ("finish-local-encode thread=%1 frame=%2", thread_id(), vf->index()); } catch (std::exception& e) { /* This is very bad, so don't cope with it, just pass it on */ @@ -334,7 +334,7 @@ try } if (encoded) { - _writer->write (encoded.get(), vf->index (), vf->eyes ()); + _writer->write (encoded, vf->index(), vf->eyes()); frame_done (); } else { lock.lock (); -- cgit v1.2.3