UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UserDefinedCaptureProtocol.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "FrameGrabber.h"
8#include "ImageWriteStream.h"
9#include "UserDefinedCaptureProtocol.generated.h"
10
11enum class EDesiredImageFormat : uint8;
12struct FImagePixelData;
15class UTexture;
16
18USTRUCT(BlueprintType)
20{
22
23
24 FString ToString() const;
25
27 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Capture)
28 TMap<FName, FName> Identifiers;
29};
30
31
32
33USTRUCT(BlueprintType)
40
44UCLASS(Abstract, Blueprintable, meta=(DisplayName="Capture Protocol"), MinimalAPI)
47{
48public:
49
51
53
54protected:
55
60 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
61 MOVIESCENECAPTURE_API void OnPreTick();
62
66 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
68
73 UFUNCTION(BlueprintNativeEvent, Category=Capture)
74 MOVIESCENECAPTURE_API bool OnSetup();
75 virtual bool OnSetup_Implementation() { return true; }
76
80 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
81 MOVIESCENECAPTURE_API void OnWarmUp();
82
86 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
87 MOVIESCENECAPTURE_API void OnStartCapture();
88
92 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
93 MOVIESCENECAPTURE_API void OnCaptureFrame();
94
98 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
99 MOVIESCENECAPTURE_API void OnPauseCapture();
100
104 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
105 MOVIESCENECAPTURE_API void OnBeginFinalize();
106
107
111 UFUNCTION(BlueprintNativeEvent, Category=Capture)
112 MOVIESCENECAPTURE_API bool OnCanFinalize() const;
113 virtual bool OnCanFinalize_Implementation() const { return true; }
114
115
119 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
120 MOVIESCENECAPTURE_API void OnFinalize();
121
122
126 UFUNCTION(BlueprintImplementableEvent, Category=Capture)
127 MOVIESCENECAPTURE_API void OnPixelsReceived(const FCapturedPixels& Pixels, const FCapturedPixelsID& ID, FFrameMetrics FrameMetrics);
128
129
130public:
131
132 /*
133 * Resolve the specified buffer and pass it directly to the specified handler when done (does not pass to any bound streams)
134 *
135 * @param Buffer The desired buffer to save
136 * @param BufferID The ID of this buffer that is passed to the pixel handler (e.g. a composition pass name).
137 */
138 UFUNCTION(BlueprintCallable, Category=Capture)
140
141
147 UFUNCTION(BlueprintCallable, Category=Capture)
148 MOVIESCENECAPTURE_API void StartCapturingFinalPixels(const FCapturedPixelsID& StreamID);
149
150
154 UFUNCTION(BlueprintCallable, Category=Capture)
155 MOVIESCENECAPTURE_API void StopCapturingFinalPixels();
156
157
161 UFUNCTION(BlueprintCallable, Category=Capture)
162 MOVIESCENECAPTURE_API virtual FString GenerateFilename(const FFrameMetrics& InFrameMetrics) const;
163
164
168 UFUNCTION(BlueprintCallable, Category=Capture)
169 FFrameMetrics GetCurrentFrameMetrics() const
170 {
171 return CachedFrameMetrics;
172 }
173
174public:
175
179 MOVIESCENECAPTURE_API void OnPixelsReceivedImpl(const FCapturedPixels& Pixels, const FCapturedPixelsID& StreamID, FFrameMetrics FrameMetrics);
180
185 MOVIESCENECAPTURE_API void ReportOutstandingWork(int32 NumNewOperations);
186
187protected:
188
190 MOVIESCENECAPTURE_API virtual void PreTickImpl() override;
191 MOVIESCENECAPTURE_API virtual void TickImpl() override;
192 MOVIESCENECAPTURE_API virtual bool SetupImpl() override;
193 MOVIESCENECAPTURE_API virtual void WarmUpImpl() override;
194 MOVIESCENECAPTURE_API virtual bool StartCaptureImpl() override;
195 MOVIESCENECAPTURE_API virtual void CaptureFrameImpl(const FFrameMetrics& FrameMetrics) override;
196 MOVIESCENECAPTURE_API virtual void BeginFinalizeImpl() override;
197 MOVIESCENECAPTURE_API virtual bool HasFinishedProcessingImpl() const override;
198 MOVIESCENECAPTURE_API virtual void FinalizeImpl() override;
199 MOVIESCENECAPTURE_API virtual void AddFormatMappingsImpl(TMap<FString, FStringFormatArg>& FormatMappings) const override;
203 virtual UWorld* GetWorld() const override { return World; }
206protected:
207
209 UPROPERTY(transient, BlueprintReadOnly, Category=Capture)
211
213
215 TUniquePtr<FFrameGrabber> FinalPixelsFrameGrabber;
216
218 TAtomic<int32> NumOutstandingOperations;
219
221 FFrameMetrics CachedFrameMetrics;
222
224 FCapturedPixelsID FinalPixelsID;
225
227 const FCapturedPixelsID* CurrentStreamID;
228};
229
230
234UCLASS(Abstract, config=EditorPerProjectUserSettings, Blueprintable, meta=(DisplayName="Capture Protocol"), MinimalAPI)
237{
238public:
239
241
243
245 UPROPERTY(config, BlueprintReadWrite, EditAnywhere, Category=Capture)
247
249 UPROPERTY(config, BlueprintReadWrite, EditAnywhere, Category=Capture, meta=(InlineEditConditionToggle))
250 bool bEnableCompression;
251
253 UPROPERTY(config, BlueprintReadWrite, EditAnywhere, Category=Capture, meta=(EditCondition=bEnableCompression))
254 int32 CompressionQuality;
255
256public:
257
258
259 /*
260 * Generate a filename for the specified buffer using this protocol's file name formatter
261 *
262 * @param Buffer The desired buffer to generate a filename for
263 * @param StreamID The ID of the stream for this buffer (e.g. a composition pass name)
264 * @return A fully qualified file name
265 */
266 UFUNCTION(BlueprintCallable, Category=Capture)
267 MOVIESCENECAPTURE_API FString GenerateFilenameForBuffer(UTexture* Buffer, const FCapturedPixelsID& StreamID);
268
269
270 /*
271 * Generate a filename for the current frame using this protocol's file name formatter
272 *
273 * @return A fully qualified file name for the current frame number
274 */
275 UFUNCTION(BlueprintCallable, Category=Capture)
276 MOVIESCENECAPTURE_API FString GenerateFilenameForCurrentFrame();
277
278
279 /*
280 * Generate a filename for the current frame using this protocol's file name formatter
281 *
282 * @return A fully qualified file name for the current frame number
283 */
284 UFUNCTION(BlueprintCallable, Category=Capture)
285 MOVIESCENECAPTURE_API void WriteImageToDisk(const FCapturedPixels& PixelData, const FCapturedPixelsID& StreamID, const FFrameMetrics& FrameMetrics, bool bCopyImageData = false);
286
288
294public:
295
299 MOVIESCENECAPTURE_API void OnFileWritten();
300
301private:
302
304 MOVIESCENECAPTURE_API virtual FString GenerateFilename(const FFrameMetrics& InFrameMetrics) const override;
306};
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EDesiredImageFormat
Definition ImageWriteTypes.h:11
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
ESPMode
Definition SharedPointerFwd.h:12
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition FrameGrabber.h:125
Definition NameTypes.h:617
Definition UObjectGlobals.h:1292
Definition Atomic.h:538
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition MovieSceneCaptureProtocolBase.h:283
Definition Texture.h:1219
Definition UserDefinedCaptureProtocol.h:47
virtual UWorld * GetWorld() const override
Definition UserDefinedCaptureProtocol.h:203
Definition UserDefinedCaptureProtocol.h:237
Definition World.h:918
@ false
Definition radaudio_common.h:23
Definition UserDefinedCaptureProtocol.h:20
Definition UserDefinedCaptureProtocol.h:35
Definition MovieSceneCaptureProtocolBase.h:310
Definition ImagePixelData.h:35
Definition ImageWriteBlueprintLibrary.h:21
Definition MovieSceneCaptureSettings.h:31
Definition MovieSceneCaptureProtocolBase.h:355
Definition ObjectPtr.h:488