summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-09-26 13:29:59 +0200
committerCarl Hetherington <cth@carlh.net>2023-10-16 17:57:18 +0200
commit6b13ea7afe677cc4f727371d507c49be3af984db (patch)
treea4ae4873f38235180c38841fff7792254edf92b3
parent9df4e636e2e35be7b17d1a507d6906d257bf83a2 (diff)
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.
-rw-r--r--src/lib/grok/context.h28
-rw-r--r--src/lib/j2k_encoder.cc3
-rw-r--r--src/lib/j2k_encoder.h2
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<dcp::ArrayData>(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<dcp::ArrayData>(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<FrameProxy> *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<const Film> 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