#pragma once #include "DeckLinkAPI_h.h" #include "DeckLinkFrameTransfer.h" #include #include class OpenGLComposite; class DeckLinkSession { public: DeckLinkSession() = default; ~DeckLinkSession(); void ReleaseResources(); bool DiscoverDevicesAndModes(BMDDisplayMode inputDisplayMode, BMDDisplayMode outputDisplayMode, const std::string& requestedInputDisplayModeName, const std::string& requestedOutputDisplayModeName, std::string& error); bool ConfigureInput(OpenGLComposite* owner, HDC hdc, HGLRC hglrc, BMDDisplayMode inputDisplayMode, std::string& error); bool ConfigureOutput(OpenGLComposite* owner, HDC hdc, HGLRC hglrc, BMDDisplayMode outputDisplayMode, bool externalKeyingEnabled, std::string& error); bool Start(unsigned outputFrameHeight); bool Stop(); CaptureDelegate* captureDelegate = nullptr; PlayoutDelegate* playoutDelegate = nullptr; IDeckLinkInput* input = nullptr; IDeckLinkOutput* output = nullptr; IDeckLinkKeyer* keyer = nullptr; std::deque outputVideoFrameQueue; PinnedMemoryAllocator* playoutAllocator = nullptr; BMDTimeValue frameDuration = 0; BMDTimeScale frameTimescale = 0; unsigned totalPlayoutFrames = 0; unsigned inputFrameWidth = 0; unsigned inputFrameHeight = 0; unsigned outputFrameWidth = 0; unsigned outputFrameHeight = 0; std::string inputDisplayModeName = "1080p59.94"; std::string outputDisplayModeName = "1080p59.94"; bool hasNoInputSource = true; std::string outputModelName; bool supportsInternalKeying = false; bool supportsExternalKeying = false; bool keyerInterfaceAvailable = false; bool externalKeyingActive = false; std::string statusMessage; };