155 lines
4.9 KiB
C++
155 lines
4.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "UObject/ObjectMacros.h"
|
|
#include "Protocols/FrameGrabberProtocol.h"
|
|
#include "IImageWrapper.h"
|
|
#include "Async/Future.h"
|
|
#include "CompositionGraphCaptureProtocol.h"
|
|
#include "ImageSequenceProtocol.generated.h"
|
|
|
|
struct FMovieSceneCaptureSettings;
|
|
class IImageWriteQueue;
|
|
|
|
UCLASS(Abstract, config=EditorPerProjectUserSettings, MinimalAPI)
|
|
class UImageSequenceProtocol : public UFrameGrabberProtocol
|
|
{
|
|
public:
|
|
|
|
GENERATED_BODY()
|
|
|
|
MOVIESCENECAPTURE_API UImageSequenceProtocol(const FObjectInitializer& ObjInit);
|
|
|
|
public:
|
|
|
|
/** ~UFrameGrabberProtocol implementation */
|
|
MOVIESCENECAPTURE_API virtual FFramePayloadPtr GetFramePayload(const FFrameMetrics& FrameMetrics);
|
|
MOVIESCENECAPTURE_API virtual void ProcessFrame(FCapturedFrameData Frame);
|
|
/** ~End UFrameGrabberProtocol implementation */
|
|
|
|
/** ~ UMovieSceneCaptureProtocol implementation */
|
|
MOVIESCENECAPTURE_API virtual bool SetupImpl() override;
|
|
MOVIESCENECAPTURE_API virtual void AddFormatMappingsImpl(TMap<FString, FStringFormatArg>& FormatMappings) const override;
|
|
MOVIESCENECAPTURE_API virtual void BeginFinalizeImpl() override;
|
|
MOVIESCENECAPTURE_API virtual void FinalizeImpl() override;
|
|
MOVIESCENECAPTURE_API virtual bool HasFinishedProcessingImpl() const override;
|
|
MOVIESCENECAPTURE_API virtual void OnReleaseConfigImpl(FMovieSceneCaptureSettings& InSettings) override;
|
|
MOVIESCENECAPTURE_API virtual void OnLoadConfigImpl(FMovieSceneCaptureSettings& InSettings) override;
|
|
/** ~End UMovieSceneCaptureProtocol implementation */
|
|
|
|
protected:
|
|
|
|
/** The format of the image to write out */
|
|
EImageFormat Format;
|
|
|
|
|
|
private:
|
|
|
|
virtual int32 GetCompressionQuality() const { return 0; }
|
|
|
|
/** Custom string format arguments for filenames */
|
|
TMap<FString, FStringFormatArg> StringFormatMap;
|
|
|
|
/** A pointer to the image write queue used for asynchronously writing images */
|
|
IImageWriteQueue* ImageWriteQueue;
|
|
|
|
/** A future that is created on BeginFinalize from a fence in the image write queue that will be fulfilled when all currently pending tasks have been completed */
|
|
TFuture<void> FinalizeFence;
|
|
};
|
|
|
|
UCLASS(config=EditorPerProjectUserSettings, Abstract, MinimalAPI)
|
|
class UCompressedImageSequenceProtocol : public UImageSequenceProtocol
|
|
{
|
|
public:
|
|
|
|
GENERATED_BODY()
|
|
|
|
/** Level of compression to apply to the image, between 1 (worst quality, best compression) and 100 (best quality, worst compression)*/
|
|
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category=ImageSettings, meta=(ClampMin=1, ClampMax=100))
|
|
int32 CompressionQuality;
|
|
|
|
UCompressedImageSequenceProtocol(const FObjectInitializer& ObjInit)
|
|
: Super(ObjInit)
|
|
{
|
|
CompressionQuality = 100;
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual int32 GetCompressionQuality() const override { return CompressionQuality; }
|
|
MOVIESCENECAPTURE_API virtual bool SetupImpl() override;
|
|
MOVIESCENECAPTURE_API virtual void AddFormatMappingsImpl(TMap<FString, FStringFormatArg>& FormatMappings) const override;
|
|
};
|
|
|
|
UCLASS(meta=(DisplayName="Image Sequence (bmp)", CommandLineID="BMP"), MinimalAPI)
|
|
class UImageSequenceProtocol_BMP : public UImageSequenceProtocol
|
|
{
|
|
public:
|
|
|
|
GENERATED_BODY()
|
|
|
|
UImageSequenceProtocol_BMP(const FObjectInitializer& ObjInit)
|
|
: Super(ObjInit)
|
|
{
|
|
Format = EImageFormat::BMP;
|
|
}
|
|
};
|
|
|
|
UCLASS(meta=(DisplayName="Image Sequence (png)", CommandLineID="PNG"), MinimalAPI)
|
|
class UImageSequenceProtocol_PNG : public UCompressedImageSequenceProtocol
|
|
{
|
|
public:
|
|
|
|
GENERATED_BODY()
|
|
|
|
UImageSequenceProtocol_PNG(const FObjectInitializer& ObjInit)
|
|
: Super(ObjInit)
|
|
{
|
|
Format = EImageFormat::PNG;
|
|
}
|
|
};
|
|
|
|
UCLASS(meta=(DisplayName="Image Sequence (jpg)", CommandLineID="JPG"), MinimalAPI)
|
|
class UImageSequenceProtocol_JPG : public UCompressedImageSequenceProtocol
|
|
{
|
|
public:
|
|
|
|
GENERATED_BODY()
|
|
|
|
UImageSequenceProtocol_JPG(const FObjectInitializer& ObjInit)
|
|
: Super(ObjInit)
|
|
{
|
|
Format = EImageFormat::JPEG;
|
|
}
|
|
};
|
|
|
|
UCLASS(meta=(DisplayName="Image Sequence (exr)", CommandLineID="EXR"), MinimalAPI)
|
|
class UImageSequenceProtocol_EXR : public UImageSequenceProtocol
|
|
{
|
|
public:
|
|
|
|
GENERATED_BODY()
|
|
|
|
/** Whether to write out compressed or uncompressed EXRs */
|
|
UPROPERTY(config, EditAnywhere, Category=ImageSettings)
|
|
bool bCompressed;
|
|
|
|
/** The color gamut to use when storing HDR captured data. */
|
|
UPROPERTY(config, EditAnywhere, Category=ImageSettings)
|
|
TEnumAsByte<EHDRCaptureGamut> CaptureGamut;
|
|
|
|
MOVIESCENECAPTURE_API UImageSequenceProtocol_EXR(const FObjectInitializer& ObjInit);
|
|
|
|
private:
|
|
virtual int32 GetCompressionQuality() const override { return bCompressed ? (int32)EImageCompressionQuality::Default : (int32)EImageCompressionQuality::Uncompressed; }
|
|
MOVIESCENECAPTURE_API virtual bool SetupImpl() override;
|
|
MOVIESCENECAPTURE_API virtual void FinalizeImpl() override;
|
|
MOVIESCENECAPTURE_API virtual void AddFormatMappingsImpl(TMap<FString, FStringFormatArg>& FormatMappings) const override;
|
|
|
|
EDisplayColorGamut RestoreColorGamut;
|
|
EDisplayOutputFormat RestoreOutputDevice;
|
|
};
|
|
|