Files
UnrealEngineUWP/Engine/Source/Runtime/Media/Private/MediaModule.cpp
Max Preussner c7f16abe9d Media: Initial revision of media framework
[CL 2238804 by Max Preussner in Main branch]
2014-07-31 16:18:48 -04:00

103 lines
2.1 KiB
C++

// 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<IMediaPlayer> CreatePlayer( const FString& Url ) override
{
TSharedPtr<IMediaPlayer> 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<IMediaPlayerFactory*> MediaPlayerFactories;
};
IMPLEMENT_MODULE(FMediaModule, Media);