replace direct ownership

This commit is contained in:
2026-05-22 15:22:11 +10:00
parent 9787ca5f27
commit 315cbda9d1
6 changed files with 30 additions and 25 deletions

View File

@@ -14,6 +14,7 @@
#include <chrono>
#include <filesystem>
#include <functional>
#include <memory>
#include <string>
#include <thread>
#include <type_traits>
@@ -56,7 +57,8 @@ public:
mRenderThread(renderThread),
mFrameExchange(frameExchange),
mConfig(config),
mOutputThread(mOutput, mFrameExchange, VideoOutputThreadConfig{
mOutput(std::make_unique<DeckLinkOutput>()),
mOutputThread(*mOutput, mFrameExchange, VideoOutputThreadConfig{
mConfig.outputThread.targetBufferedFrames,
mConfig.outputThread.idleSleep
}),
@@ -100,7 +102,7 @@ public:
StartPreviewWindow();
StartOptionalVideoOutput();
mTelemetryHealth.Start(mFrameExchange, mOutput, mOutputThread, mRenderThread);
mTelemetryHealth.Start(mFrameExchange, *mOutput, mOutputThread, mRenderThread);
StartHttpServer();
Log("app", "RenderCadenceCompositor started.");
mStarted = true;
@@ -113,17 +115,17 @@ public:
mTelemetryHealth.Stop();
mPreviewWindow.Stop();
mOutputThread.Stop();
mOutput.Stop();
mOutput->Stop();
mRuntimeLayers.Stop();
mRenderThread.Stop();
mOutput.ReleaseResources();
mOutput->ReleaseResources();
if (mStarted)
Log("app", "RenderCadenceCompositor shutdown complete.");
mStarted = false;
}
bool Started() const { return mStarted; }
const IVideoOutputEdge& Output() const { return mOutput; }
const IVideoOutputEdge& Output() const { return *mOutput; }
void SetVideoInputMetricsProvider(std::function<VideoInputEdgeMetrics()> provider)
{
mVideoInputMetricsProvider = std::move(provider);
@@ -134,7 +136,7 @@ private:
{
std::string outputError;
Log("app", "Initializing optional DeckLink output.");
if (!mOutput.Initialize(
if (!mOutput->Initialize(
mConfig.deckLink,
[this](const VideoIOCompletion& completion) {
mFrameExchange.ReleaseScheduledByBytes(completion.outputFrameBuffer);
@@ -160,7 +162,7 @@ private:
}
Log("app", "Starting DeckLink scheduled playback.");
if (!mOutput.StartScheduledPlayback(outputError))
if (!mOutput->StartScheduledPlayback(outputError))
{
DisableVideoOutput("DeckLink scheduled playback failed: " + outputError);
return;
@@ -171,8 +173,8 @@ private:
Log("app", mVideoOutputStatus);
Log(
"app",
"DeckLink output mode: " + mOutput.State().outputDisplayModeName +
", frame budget " + std::to_string(mOutput.State().frameBudgetMilliseconds) + " ms.");
"DeckLink output mode: " + mOutput->State().outputDisplayModeName +
", frame budget " + std::to_string(mOutput->State().frameBudgetMilliseconds) + " ms.");
}
bool BuildSettledOutputReserve(std::string& error)
@@ -193,8 +195,8 @@ private:
void DisableVideoOutput(const std::string& reason)
{
mOutputThread.Stop();
mOutput.Stop();
mOutput.ReleaseResources();
mOutput->Stop();
mOutput->ReleaseResources();
mFrameExchange.Clear();
mVideoOutputEnabled = false;
mVideoOutputStatus = reason;
@@ -254,7 +256,7 @@ private:
std::string BuildStateJson()
{
CadenceTelemetrySnapshot telemetry = mHttpTelemetry.Sample(mFrameExchange, mOutput, mOutputThread, mRenderThread);
CadenceTelemetrySnapshot telemetry = mHttpTelemetry.Sample(mFrameExchange, *mOutput, mOutputThread, mRenderThread);
ApplyVideoInputMetrics(telemetry);
RuntimeLayerModelSnapshot layerSnapshot = mRuntimeLayers.Snapshot(telemetry);
return RuntimeStateToJson(RuntimeStateJsonInput{
@@ -300,7 +302,7 @@ private:
RenderThread& mRenderThread;
SystemFrameExchange& mFrameExchange;
AppConfig mConfig;
DeckLinkOutput mOutput;
std::unique_ptr<IVideoOutputEdge> mOutput;
VideoOutputThread<SystemFrameExchange> mOutputThread;
TelemetryHealthMonitor mTelemetryHealth;
CadenceTelemetry mHttpTelemetry;