Files
UnrealEngine/Engine/Source/Runtime/Media/Public/IMediaClockSink.h
2025-05-18 13:04:45 +08:00

93 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Misc/Timespan.h"
/**
* Interface for media clock sinks.
*
* This interface can be implemented by classes that wish to be ticked
* by the Media Framework clock. The following tick stages are available
* (in the order in which they are called on clock sinks):
*
* TickInput
* Called each tick from the main thread before the Engine is being ticked.
* It is used by media player plug-ins to update their state and initiate
* the reading of new input samples.
*
* TickFetch
* Called each tick from the main thread after the Engine has been ticked,
* but before TickRender. It can be used by media players to fetch the
* results of the TickInput stage prior to rendering.
*
* TickRender
* Called each tick from the main thread after TickFetch is complete, but
* before the frame has finished rendering. It is mainly used by media
* sinks to render the fetched input samples, such as drawing video frames
* to a texture or playing audio samples on a sound component.
*
* TickOutput
* Called each tick from the main thread after the Engine has been ticked
* and the frame finished rendering. It can be used by output plug-ins to
* write the completed frame to disk or stream it over the network.
*/
class IMediaClockSink
{
public:
/**
* Called each tick to handle updates after the Engine ticked.
*
* @param DeltaTime Time since this function was last called.
* @param Timecode The current media time code.
* @see TickInput, TickOutput, TickRender
*/
virtual void TickFetch(FTimespan DeltaTime, FTimespan Timecode)
{
// override in child class if needed
}
/**
* Called each tick to handle input before the Engine is ticked.
*
* @param DeltaTime Time since this function was last called.
* @param Timecode The current media time code.
* @see TickFetch, TickOutput, TickRender
*/
virtual void TickInput(FTimespan DeltaTime, FTimespan Timecode)
{
// override in child class if needed
}
/**
* Called each tick to output the rendered frame.
*
* @param DeltaTime Time since this function was last called.
* @param Timecode The current media time code.
* @see TickFetch, TickInput, TickRender
*/
virtual void TickOutput(FTimespan DeltaTime, FTimespan Timecode)
{
// override in child class if needed
}
/**
* Called each tick before the frame finished rendering.
*
* @param DeltaTime Time since this function was last called.
* @param Timecode The current media time code.
* @see TickFetch, TickInput, TickOutput
*/
virtual void TickRender(FTimespan DeltaTime, FTimespan Timecode)
{
// override in child class if needed
}
public:
/** Virtual destructor. */
virtual ~IMediaClockSink() { }
};