From 6b13ea7afe677cc4f727371d507c49be3af984db Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 26 Sep 2023 13:29:59 +0200 Subject: [PATCH] Create a single DcpomaticContext for all GrokContexts, rather than copying them. I think this makes sense, and also allows us to forward-declare the contexts in a forthcoming commit. --- src/lib/grok/context.h | 28 ++++++++++++++-------------- src/lib/j2k_encoder.cc | 3 ++- src/lib/j2k_encoder.h | 2 +- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/lib/grok/context.h b/src/lib/grok/context.h index 1aac6f177..96477d597 100644 --- a/src/lib/grok/context.h +++ b/src/lib/grok/context.h @@ -106,17 +106,17 @@ struct DcpomaticContext { class GrokContext { public: - explicit GrokContext(DcpomaticContext const& dcpomatic_context) + explicit GrokContext(DcpomaticContext* dcpomatic_context) : _dcpomatic_context(dcpomatic_context) , messenger_(nullptr) , launched_(false) { if (Config::instance()->enable_gpu ()) { - boost::filesystem::path folder(_dcpomatic_context._location); + boost::filesystem::path folder(_dcpomatic_context->_location); boost::filesystem::path binaryPath = folder / "grk_compress"; if (!boost::filesystem::exists(binaryPath)) { getMessengerLogger()->error( - "Invalid binary location %s", _dcpomatic_context._location.c_str() + "Invalid binary location %s", _dcpomatic_context->_location.c_str() ); return; } @@ -134,7 +134,7 @@ public: [this](FrameProxy srcFrame, uint8_t* compressed, uint32_t compressedFrameLength) { auto compressed_data = std::make_shared(compressed, compressedFrameLength); - _dcpomatic_context.writer_.write(compressed_data, srcFrame.index(), srcFrame.eyes()); + _dcpomatic_context->writer_.write(compressed_data, srcFrame.index(), srcFrame.eyes()); frame_done (); }; int const minimum_size = 16384; @@ -147,7 +147,7 @@ public: } auto encoded = std::make_shared(fp->vf.encode_locally()); - _dcpomatic_context.writer_.write(encoded, fp->vf.index(), fp->vf.eyes()); + _dcpomatic_context->writer_.write(encoded, fp->vf.index(), fp->vf.eyes()); frame_done (); } } @@ -177,16 +177,16 @@ public: return true; if (MessengerInit::firstLaunch(true)) { auto s = dcpv.get_size(); - _dcpomatic_context.setDimensions(s.width, s.height); + _dcpomatic_context->setDimensions(s.width, s.height); auto config = Config::instance(); messenger_->launchGrok( - _dcpomatic_context._location, - _dcpomatic_context.width_,_dcpomatic_context.width_, - _dcpomatic_context.height_, + _dcpomatic_context->_location, + _dcpomatic_context->width_,_dcpomatic_context->width_, + _dcpomatic_context->height_, 3, 12, device, - _dcpomatic_context.film_->resolution() == Resolution::FOUR_K, - _dcpomatic_context.film_->video_frame_rate(), - _dcpomatic_context.film_->j2k_bandwidth(), + _dcpomatic_context->film_->resolution() == Resolution::FOUR_K, + _dcpomatic_context->film_->video_frame_rate(), + _dcpomatic_context->film_->j2k_bandwidth(), config->gpu_license_server(), config->gpu_license_port(), config->gpu_license() @@ -220,10 +220,10 @@ public: messenger_ = nullptr; } void frame_done () { - _dcpomatic_context.history_.event(); + _dcpomatic_context->history_.event(); } private: - DcpomaticContext _dcpomatic_context; + DcpomaticContext* _dcpomatic_context; ScheduledMessenger *messenger_; bool launched_; }; diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc index 22f2ea6d7..fe63deacd 100644 --- a/src/lib/j2k_encoder.cc +++ b/src/lib/j2k_encoder.cc @@ -68,7 +68,7 @@ J2KEncoder::J2KEncoder(shared_ptr film, Writer& writer) , _history (200) , _writer (writer) #ifdef DCPOMATIC_GROK - , _dcpomatic_context(film, writer, _history, Config::instance()->gpu_binary_location()) + , _dcpomatic_context(new grk_plugin::DcpomaticContext(film, writer, _history, Config::instance()->gpu_binary_location())) , _context(Config::instance()->enable_gpu() ? new grk_plugin::GrokContext(_dcpomatic_context) : nullptr) #endif { @@ -84,6 +84,7 @@ J2KEncoder::~J2KEncoder () #ifdef DCPOMATIC_GROK delete _context; + delete _dcpomatic_context; #endif } diff --git a/src/lib/j2k_encoder.h b/src/lib/j2k_encoder.h index 9d9d85894..913beb5a9 100644 --- a/src/lib/j2k_encoder.h +++ b/src/lib/j2k_encoder.h @@ -125,7 +125,7 @@ private: boost::signals2::scoped_connection _server_found_connection; #ifdef DCPOMATIC_GROK - grk_plugin::DcpomaticContext _dcpomatic_context; + grk_plugin::DcpomaticContext* _dcpomatic_context; grk_plugin::GrokContext *_context; #endif -- 2.30.2