Files
UnrealEngine/Engine/Plugins/Media/ElectraCodecs/Source/ElectraDecoders/Public/IElectraDecoderOutputVideo.h
2025-05-18 13:04:45 +08:00

187 lines
5.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "IElectraDecoder.h"
#if ELECTRA_DECODERS_HAVE_PLATFORM_DEFAULTS
#include COMPILED_PLATFORM_HEADER(ElectraDecoderPlatformOutputHandleTypes.h)
#else
enum class EElectraDecoderPlatformOutputHandleType
{
};
#endif
struct FElectraVideoDecoderOutputCropValues
{
// Number of rows at the top that must not be displayed.
int32 Top = 0;
// Number of columns at the left that must not be displayed.
int32 Left = 0;
// Number of rows at the bottom that must not be displayed.
int32 Bottom = 0;
// Number of columns at the right that must not be displayed.
int32 Right = 0;
};
class IElectraDecoderDefaultVideoOutputFormat : public IElectraDecoderDefaultOutputFormat
{
public:
virtual ~IElectraDecoderDefaultVideoOutputFormat() = default;
};
class IElectraDecoderVideoOutputTransferHandle
{
public:
virtual ~IElectraDecoderVideoOutputTransferHandle() = default;
virtual void* GetHandle() = 0;
virtual void ReleaseHandle() = 0;
};
class IElectraDecoderVideoOutputCopyResources;
class IElectraDecoderVideoOutput : public IElectraDecoderOutput
{
public:
virtual ~IElectraDecoderVideoOutput() = default;
EType GetType() const override
{
return EType::Video;
}
enum class EOutputType
{
// Output this output.
Output,
// Do not output this. Either the decoder did not produce an actual output for the given
// input, or the output has decoding errors that makes it unusable.
DoNotOutput
};
/**
* Returns the state of this output.
* Depending on the input bitstream the decoder might not have been able to produce
* a valid output or it may be partially corrupted.
* If the output should not be used for display `DoNotOutput` is returned.
*/
virtual EOutputType GetOutputType() const = 0;
/**
* Returns the active number of horizontal pixels.
* This has potential cropping values applied and does not include any
* pitch requirements.
*/
virtual int32 GetWidth() const = 0;
/**
* Returns the active number of vertical pixels.
* This has potential cropping values applied and does not include any
* pitch requirements.
*/
virtual int32 GetHeight() const = 0;
/**
* Returns the number of decoded horizontal pixels.
* This value may be different from GetWidth() since it does not take any
* cropping values into account.
* Note that this represents the actual dimension of the data returned, which
* may differ from GetWidth() + cropping offsets!
* (e.g. if the data is returned as RGBA pixels, but represents a YUYV 4:2:2 format)
*/
virtual int32 GetDecodedWidth() const = 0;
/**
* Returns the number of decoded vertical pixels.
* This value may be greater than GetHeight() since it does not take any
* cropping values into account.
* Note that this represents the actual dimension of the data returned, which
* may differ from GetWidth() + cropping offsets!
* (e.g. if the data is returned as RGBA pixels, but represents a YUYV 4:2:2 format)
*/
virtual int32 GetDecodedHeight() const = 0;
/**
* Returns the cropping values.
* This is useful in combination with GetDecodedWidth() and GetDecodedHeight()
* that give you the number of pixels created by the decoder.
*/
virtual FElectraVideoDecoderOutputCropValues GetCropValues() const = 0;
/**
* Returns the aspect ratio w value.
*/
virtual int32 GetAspectRatioW() const = 0;
/**
* Returns the aspect ratio h value.
*/
virtual int32 GetAspectRatioH() const = 0;
/**
* Returns the numerator of the frame rate, if known.
* If unknown this returns 0.
*/
virtual int32 GetFrameRateNumerator() const = 0;
/**
* Returns the denominator of the frame rate, if known.
* If unknown this returns 0.
*/
virtual int32 GetFrameRateDenominator() const = 0;
/**
* Returns the number of bits. Usually 8, 10, or 12.
*/
virtual int32 GetNumberOfBits() const = 0;
/**
* Returns additional values specific to the decoder and format that are used
* in handling this output in a platform specific way.
*/
virtual void GetExtraValues(TMap<FString, FVariant>& OutExtraValues) const = 0;
/**
* Returns the platform specific decoder output handle, if any.
* This value is specific to the decoder being used.
*/
virtual void* GetPlatformOutputHandle(EElectraDecoderPlatformOutputHandleType InTypeOfHandle) const = 0;
enum class EImageCopyResult
{
Succeeded,
Failed,
NotSupported
};
/**
* Asks to create a copy of the image into a platform specific structure.
* Parameters for the operation are provided by a platform specific implementation of
* IElectraDecoderVideoOutputCopyResources provided to this method through which
* relevant parameters (eg. a device or texture handle, etc.) can be obtained.
*/
virtual EImageCopyResult CopyPlatformImage(IElectraDecoderVideoOutputCopyResources* InCopyResources) const = 0;
/**
* Returns a "transfer" buffer handle.
* This is a value particular to the target hardware.
* It is usually a resource handle of sorts and is owned by the
* platform's resource manager.
*
* USAGE TBD
*/
virtual IElectraDecoderVideoOutputTransferHandle* GetTransferHandle() const = 0;
};