// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Synchronization/DisplayClusterMediaOutputSynchronizationPolicyThresholdBase.h" #include "DisplayClusterMediaOutputSynchronizationPolicyVblank.generated.h" class IDisplayClusterVblankMonitor; /* * Synchronization logic handler class for UDisplayClusterMediaOutputSynchronizationPolicyVblank. */ class DISPLAYCLUSTERMEDIA_API FDisplayClusterMediaOutputSynchronizationPolicyVblankHandler : public FDisplayClusterMediaOutputSynchronizationPolicyThresholdBaseHandler { using Super = FDisplayClusterMediaOutputSynchronizationPolicyThresholdBaseHandler; public: FDisplayClusterMediaOutputSynchronizationPolicyVblankHandler(UDisplayClusterMediaOutputSynchronizationPolicyVblank* InPolicyObject); //~ Begin IDisplayClusterMediaOutputSynchronizationPolicyHandler interface virtual TSubclassOf GetPolicyClass() const override; virtual bool StartSynchronization(UMediaCapture* MediaCapture, const FString& MediaId) override; //~ End IDisplayClusterMediaOutputSynchronizationPolicyHandler interface protected: /** Returns amount of time before next synchronization point. */ virtual double GetTimeBeforeNextSyncPoint() override; private: // V-blank monitor TSharedPtr VblankMonitor; }; /* * Vblank media synchronization policy config */ UCLASS(editinlinenew, Blueprintable, meta = (DisplayName = "V-blank")) class DISPLAYCLUSTERMEDIA_API UDisplayClusterMediaOutputSynchronizationPolicyVblank : public UDisplayClusterMediaOutputSynchronizationPolicyThresholdBase { GENERATED_BODY() public: virtual TSharedPtr GetHandler() override; protected: TSharedPtr Handler; };