// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. #include "MediaPrivatePCH.h" #include "ModuleManager.h" /** * Implements the Media module. */ class FMediaModule : public IMediaModule { public: // IModuleInterface interface virtual void StartupModule( ) override { } virtual void ShutdownModule( ) override { MediaPlayerFactories.Reset(); } virtual bool SupportsDynamicReloading( ) override { return false; } public: // IMediaModuleInterface virtual TSharedPtr CreatePlayer( const FString& Url ) override { TSharedPtr Player; for (IMediaPlayerFactory* PlayerFactory : MediaPlayerFactories) { if (PlayerFactory->SupportsFile(Url)) { Player = PlayerFactory->CreatePlayer(); if (Player.IsValid()) { break; } } } return Player; } virtual int32 GetSupportedFormats( FMediaFormats& OutFormats ) override { OutFormats.Reset(); for (IMediaPlayerFactory* Factory : MediaPlayerFactories) { OutFormats.Append(Factory->GetSupportedFormats()); } return OutFormats.Num(); } DECLARE_DERIVED_EVENT(FMediaModule, IMediaModule::FOnFactoryAdded, FOnFactoryAdded); virtual FOnFactoryAdded& OnFactoryAdded( ) override { return FactoryAddedEvent; } DECLARE_DERIVED_EVENT(FMediaModule, IMediaModule::FOnFactoryRemoved, FOnFactoryRemoved); virtual FOnFactoryRemoved& OnFactoryRemoved( ) override { return FactoryRemovedEvent; } virtual void RegisterPlayerFactory( IMediaPlayerFactory& Factory ) override { MediaPlayerFactories.AddUnique(&Factory); FactoryAddedEvent.Broadcast(); } virtual void UnregisterPlayerFactory( IMediaPlayerFactory& Factory ) override { MediaPlayerFactories.Remove(&Factory); FactoryRemovedEvent.Broadcast(); } private: // Holds an event delegate that is invoked after a video player factory has been added. FOnFactoryAdded FactoryAddedEvent; // Holds an event delegate that is invoked after a video player factory has been removed. FOnFactoryRemoved FactoryRemovedEvent; // Holds the registered video player factories. TArray MediaPlayerFactories; }; IMPLEMENT_MODULE(FMediaModule, Media);