UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LiveLinkVirtualSubject.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "CoreTypes.h"
8#include "ILiveLinkSubject.h"
10#include "LiveLinkTypes.h"
12#include "UObject/NameTypes.h"
13#include "UObject/Object.h"
15#include "UObject/ObjectPtr.h"
17
18#include "LiveLinkVirtualSubject.generated.h"
19
20class ILiveLinkClient;
21class ULiveLinkRole;
22
23
24
25// A Virtual subject is made up of one or more real subjects from a source
26UCLASS(Abstract, MinimalAPI)
28{
30
31 //~ Begin ILiveLinkSubject Interface
32public:
33 LIVELINKINTERFACE_API virtual void Initialize(FLiveLinkSubjectKey SubjectKey, TSubclassOf<ULiveLinkRole> Role, ILiveLinkClient* LiveLinkClient) override;
34 LIVELINKINTERFACE_API virtual void Update() override;
36 LIVELINKINTERFACE_API virtual void ClearFrames() override;
37 virtual FLiveLinkSubjectKey GetSubjectKey() const override { return SubjectKey; }
38 virtual TSubclassOf<ULiveLinkRole> GetRole() const override { return Role; }
39 LIVELINKINTERFACE_API virtual bool HasValidFrameSnapshot() const override;
40 virtual FLiveLinkStaticDataStruct& GetStaticData(bool bGetOverrideData=true) override { return CurrentFrameSnapshot.StaticData; }
41 virtual const FLiveLinkStaticDataStruct& GetStaticData() const override { return CurrentFrameSnapshot.StaticData; }
42 virtual const TArray<ULiveLinkFrameTranslator::FWorkerSharedPtr> GetFrameTranslators() const override { return CurrentFrameTranslators; }
43 virtual const ULiveLinkSubjectRemapper::FWorkerSharedPtr GetFrameRemapper() const override { return CurrentSubjectRemapper; }
44 LIVELINKINTERFACE_API virtual TArray<FLiveLinkTime> GetFrameTimes() const override;
45 virtual bool IsRebroadcasted() const override { return bRebroadcastSubject; }
46 virtual bool HasStaticDataBeenRebroadcasted() const override { return bHasStaticDataBeenRebroadcast; }
47 virtual void SetStaticDataAsRebroadcasted(const bool bInSent) override { bHasStaticDataBeenRebroadcast = bInSent; }
48 LIVELINKINTERFACE_API virtual bool IsPaused() const override;
49 LIVELINKINTERFACE_API virtual void PauseSubject() override;
50 LIVELINKINTERFACE_API virtual void UnpauseSubject() override;
51
52protected:
53 virtual const FLiveLinkSubjectFrameData& GetFrameSnapshot() const override { return CurrentFrameSnapshot; }
54 //~ End ILiveLinkSubject Interface
55
57 LIVELINKINTERFACE_API bool HasValidStaticData() const;
58
60 LIVELINKINTERFACE_API bool HasValidFrameData() const;
61
62public:
63 //~ Begin UObject interface
64#if WITH_EDITOR
65 LIVELINKINTERFACE_API virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
66#endif
67 //~ End UObject interface
68
69 ILiveLinkClient* GetClient() const { return LiveLinkClient; }
70
72 const TArray<FLiveLinkSubjectName>& GetSubjects() const { return Subjects; }
73
75 const TArray<ULiveLinkFrameTranslator*>& GetTranslators() const { return FrameTranslators; }
76
78 const FLiveLinkFrameDataStruct& GetFrameData() const { return CurrentFrameSnapshot.FrameData; }
79
81 LIVELINKINTERFACE_API virtual bool DependsOnSubject(FName SubjectName) const;
82
84 virtual FText GetDisplayName() const
85 {
86 return FText::FromName(SubjectKey.SubjectName);
87 }
88
90 virtual FName GetRebroadcastName() const
91 {
92 return SubjectKey.SubjectName;
93 }
94
95public:
97 UPROPERTY(EditAnywhere, Category = "LiveLink")
99
101
103 LIVELINKINTERFACE_API void UpdateTranslatorsForThisFrame();
104
106 LIVELINKINTERFACE_API void UpdateStaticDataSnapshot(FLiveLinkStaticDataStruct&& NewStaticData);
107
109 LIVELINKINTERFACE_API void UpdateFrameDataSnapshot(FLiveLinkFrameDataStruct&& NewFrameData);
110
112 LIVELINKINTERFACE_API void InvalidateStaticData();
113
115 LIVELINKINTERFACE_API void InvalidateFrameData();
116
119 UPROPERTY()
121
123 UPROPERTY(EditAnywhere, Category = "LiveLink")
125
127 UPROPERTY(EditAnywhere, Instanced, Category = "LiveLink", meta=(DisplayName="Translators"))
129
131 UPROPERTY(EditAnywhere, Category = "LiveLink")
132 bool bRebroadcastSubject = false;
133
135 ILiveLinkClient* LiveLinkClient;
136
137 UE_DEPRECATED(4.27, "VirtualSubject FrameSnapshot is now private to have thread safe accesses. Please use UpdateStaticDataSnapshot or UpdateFrameDataSnapshot to update its value")
139
142
144 bool bHasStaticDataBeenRebroadcast = false;
145
152 mutable FCriticalSection SnapshotAccessCriticalSection;
153
154private:
156 bool ValidateTranslators();
157
158private:
159 TArray<ULiveLinkFrameTranslator::FWorkerSharedPtr> CurrentFrameTranslators;
161 ULiveLinkSubjectRemapper::FWorkerSharedPtr CurrentSubjectRemapper;
162
164 FLiveLinkSubjectFrameData CurrentFrameSnapshot;
165
166 std::atomic<bool> bPaused = false;
167};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
Definition NameTypes.h:617
Definition Text.h:385
static CORE_API FText FromName(const FName &Val)
Definition Text.cpp:1076
Definition ILiveLinkClient.h:61
Definition ILiveLinkSubject.h:26
Definition Array.h:670
Definition SubclassOf.h:30
Definition LiveLinkFrameTranslator.h:41
Definition LiveLinkRole.h:18
Definition LiveLinkSubjectRemapper.h:35
Definition LiveLinkVirtualSubject.h:28
virtual const FLiveLinkStaticDataStruct & GetStaticData() const override
Definition LiveLinkVirtualSubject.h:41
virtual const TArray< ULiveLinkFrameTranslator::FWorkerSharedPtr > GetFrameTranslators() const override
Definition LiveLinkVirtualSubject.h:42
virtual FLiveLinkSubjectKey GetSubjectKey() const override
Definition LiveLinkVirtualSubject.h:37
ILiveLinkClient * GetClient() const
Definition LiveLinkVirtualSubject.h:69
virtual FText GetDisplayName() const
Definition LiveLinkVirtualSubject.h:84
virtual FLiveLinkStaticDataStruct & GetStaticData(bool bGetOverrideData=true) override
Definition LiveLinkVirtualSubject.h:40
virtual void SetStaticDataAsRebroadcasted(const bool bInSent) override
Definition LiveLinkVirtualSubject.h:47
virtual bool IsRebroadcasted() const override
Definition LiveLinkVirtualSubject.h:45
virtual const ULiveLinkSubjectRemapper::FWorkerSharedPtr GetFrameRemapper() const override
Definition LiveLinkVirtualSubject.h:43
virtual TSubclassOf< ULiveLinkRole > GetRole() const override
Definition LiveLinkVirtualSubject.h:38
const TArray< FLiveLinkSubjectName > & GetSubjects() const
Definition LiveLinkVirtualSubject.h:72
virtual bool HasStaticDataBeenRebroadcasted() const override
Definition LiveLinkVirtualSubject.h:46
const TArray< ULiveLinkFrameTranslator * > & GetTranslators() const
Definition LiveLinkVirtualSubject.h:75
const FLiveLinkFrameDataStruct & GetFrameData() const
Definition LiveLinkVirtualSubject.h:78
virtual FName GetRebroadcastName() const
Definition LiveLinkVirtualSubject.h:90
virtual const FLiveLinkSubjectFrameData & GetFrameSnapshot() const override
Definition LiveLinkVirtualSubject.h:53
Definition Object.h:95
@ false
Definition radaudio_common.h:23
Definition LiveLinkTypes.h:526
Definition LiveLinkTypes.h:78
FLiveLinkSubjectName SubjectName
Definition LiveLinkTypes.h:87
Definition LiveLinkTypes.h:40
Definition UnrealType.h:6865
Definition ObjectPtr.h:488