#include "VideoBackend.h" #include "DeckLinkSession.h" #include "OpenGLVideoIOBridge.h" #include "RenderEngine.h" #include "HealthTelemetry.h" VideoBackend::VideoBackend(RenderEngine& renderEngine, HealthTelemetry& healthTelemetry) : mVideoIODevice(std::make_unique()), mBridge(std::make_unique(*mVideoIODevice, renderEngine, healthTelemetry)) { } VideoBackend::~VideoBackend() { ReleaseResources(); } void VideoBackend::ReleaseResources() { if (mVideoIODevice) mVideoIODevice->ReleaseResources(); } bool VideoBackend::DiscoverDevicesAndModes(const VideoFormatSelection& videoModes, std::string& error) { return mVideoIODevice->DiscoverDevicesAndModes(videoModes, error); } bool VideoBackend::SelectPreferredFormats(const VideoFormatSelection& videoModes, bool outputAlphaRequired, std::string& error) { return mVideoIODevice->SelectPreferredFormats(videoModes, outputAlphaRequired, error); } bool VideoBackend::ConfigureInput(const VideoFormat& inputVideoMode, std::string& error) { return mVideoIODevice->ConfigureInput( [this](const VideoIOFrame& frame) { mBridge->VideoFrameArrived(frame); }, inputVideoMode, error); } bool VideoBackend::ConfigureOutput(const VideoFormat& outputVideoMode, bool externalKeyingEnabled, std::string& error) { return mVideoIODevice->ConfigureOutput( [this](const VideoIOCompletion& completion) { mBridge->PlayoutFrameCompleted(completion); }, outputVideoMode, externalKeyingEnabled, error); } bool VideoBackend::Start() { return mVideoIODevice->Start(); } bool VideoBackend::Stop() { return mVideoIODevice->Stop(); } const VideoIOState& VideoBackend::State() const { return mVideoIODevice->State(); } VideoIOState& VideoBackend::MutableState() { return mVideoIODevice->MutableState(); } bool VideoBackend::BeginOutputFrame(VideoIOOutputFrame& frame) { return mVideoIODevice->BeginOutputFrame(frame); } void VideoBackend::EndOutputFrame(VideoIOOutputFrame& frame) { mVideoIODevice->EndOutputFrame(frame); } bool VideoBackend::ScheduleOutputFrame(const VideoIOOutputFrame& frame) { return mVideoIODevice->ScheduleOutputFrame(frame); } void VideoBackend::AccountForCompletionResult(VideoIOCompletionResult result) { mVideoIODevice->AccountForCompletionResult(result); } bool VideoBackend::HasInputDevice() const { return mVideoIODevice->HasInputDevice(); } bool VideoBackend::HasInputSource() const { return mVideoIODevice->HasInputSource(); } unsigned VideoBackend::InputFrameWidth() const { return mVideoIODevice->InputFrameWidth(); } unsigned VideoBackend::InputFrameHeight() const { return mVideoIODevice->InputFrameHeight(); } unsigned VideoBackend::OutputFrameWidth() const { return mVideoIODevice->OutputFrameWidth(); } unsigned VideoBackend::OutputFrameHeight() const { return mVideoIODevice->OutputFrameHeight(); } unsigned VideoBackend::CaptureTextureWidth() const { return mVideoIODevice->CaptureTextureWidth(); } unsigned VideoBackend::OutputPackTextureWidth() const { return mVideoIODevice->OutputPackTextureWidth(); } VideoIOPixelFormat VideoBackend::InputPixelFormat() const { return mVideoIODevice->InputPixelFormat(); } const std::string& VideoBackend::InputDisplayModeName() const { return mVideoIODevice->InputDisplayModeName(); } const std::string& VideoBackend::OutputModelName() const { return mVideoIODevice->OutputModelName(); } bool VideoBackend::SupportsInternalKeying() const { return mVideoIODevice->SupportsInternalKeying(); } bool VideoBackend::SupportsExternalKeying() const { return mVideoIODevice->SupportsExternalKeying(); } bool VideoBackend::KeyerInterfaceAvailable() const { return mVideoIODevice->KeyerInterfaceAvailable(); } bool VideoBackend::ExternalKeyingActive() const { return mVideoIODevice->ExternalKeyingActive(); } const std::string& VideoBackend::StatusMessage() const { return mVideoIODevice->StatusMessage(); } void VideoBackend::SetStatusMessage(const std::string& message) { mVideoIODevice->SetStatusMessage(message); }