// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MetaHumanPipelineMediaPlayerNode.h" #include "MediaPlayer.h" #include "MediaSampleQueue.h" class UMediaBundle; namespace UE::MetaHuman::Pipeline { class FMediaPlayerUENode : public FMediaPlayerNode, public FGCObject { public: FMediaPlayerUENode(const FString& InName); virtual bool Start(const TSharedPtr& InPipelineData) override; virtual bool Process(const TSharedPtr& InPipelineData) override; virtual bool End(const TSharedPtr& InPipelineData) override; virtual bool Play(const FString& InVideoURL, int32 InVideoTrack = -1, int32 InVideoTrackFormat = -1, const FString& InAudioURL = "", int32 InAudioTrack = -1, int32 InAudioTrackFormat = -1) override; // Must be called from the game thread virtual bool Close() override; // Must be called from the game thread enum ErrorCode { VideoTimeout = 0, AudioTimeout, NoVideoPlayer, NoAudioPlayer, BadVideoTrack, BadVideoTrackFormat, BadAudioTrack, BadAudioTrackFormat, UnsupportedVideoFormat, FailedToPlayVideo, FailedToPlayAudio, NoVideoSampleData, }; //~ Begin FGCObject interface virtual void AddReferencedObjects(FReferenceCollector& InCollector) override; virtual FString GetReferencerName() const; //~ End FGCObject interface private: FString VideoURL; int32 VideoTrack = -1; int32 VideoTrackFormat = -1; FString AudioURL; int32 AudioTrack = -1; int32 AudioTrackFormat = -1; bool bIsBundle = false; TObjectPtr VideoPlayer = nullptr; TObjectPtr AudioPlayer = nullptr; TObjectPtr Bundle = nullptr; TSharedPtr VideoFrames = nullptr; TSharedPtr AudioFrames = nullptr; TArray AudioBuffer; int32 AudioBufferSampleRate = -1; int32 AudioBufferNumChannels = -1; int32 AudioBufferDataSizePerFrame = -1; }; }