Files
UnrealEngineUWP/Engine/Source/Runtime/AudioLink/AudioLinkEngine/Private/IAudioLinkFactory.cpp
jimmy smith aa0c3be4d2 AudioLink Abstractions and Engine Modules
#jira UE-123975
#rb phil.popp
#preflight 61b196c7e0430ca438a95533

#ROBOMERGE-AUTHOR: jimmy.smith
#ROBOMERGE-SOURCE: CL 18416580 in //UE5/Release-5.0/... via CL 18416585
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v897-18405271)

[CL 18416586 by jimmy smith in ue5-release-engine-test branch]
2021-12-09 01:34:26 -05:00

60 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "IAudioLinkFactory.h"
#include "Algo/Transform.h"
// Concrete Buffer Listeners.
#include "BufferedSubmixListener.h"
#include "BufferedSourceListener.h"
IAudioLinkFactory::IAudioLinkFactory()
{
IModularFeatures::Get().RegisterModularFeature(GetModularFeatureName(), this);
}
IAudioLinkFactory::~IAudioLinkFactory()
{
IModularFeatures::Get().UnregisterModularFeature(GetModularFeatureName(), this);
}
FSharedBufferedOutputPtr IAudioLinkFactory::CreateSourceBufferListener(const FSourceBufferListenerCreateParams& InSourceCreateParams)
{
check(IsInGameThread());
auto SourceBufferListenerSP = MakeShared<FBufferedSourceListener, ESPMode::ThreadSafe>(InSourceCreateParams.SizeOfBufferInFrames);
InSourceCreateParams.AudioComponent->SetSourceBufferListener(SourceBufferListenerSP, InSourceCreateParams.bShouldZeroBuffer);
return SourceBufferListenerSP;
}
FSharedBufferedOutputPtr IAudioLinkFactory::CreateSubmixBufferListener(const FSubmixBufferListenerCreateParams& InSubmixCreateParams)
{
return MakeShared<FBufferedSubmixListener, ESPMode::ThreadSafe>(InSubmixCreateParams.SizeOfBufferInFrames, InSubmixCreateParams.bShouldZeroBuffer);
}
FName IAudioLinkFactory::GetModularFeatureName()
{
static FName FeatureName = FName(TEXT("AudioLink Factory"));
return FeatureName;
}
TArray<IAudioLinkFactory*> IAudioLinkFactory::GetAllRegisteredFactories()
{
return IModularFeatures::Get().GetModularFeatureImplementations<IAudioLinkFactory>(GetModularFeatureName());
}
TArray<FName> IAudioLinkFactory::GetAllRegisteredFactoryNames()
{
TArray<FName> Names;
Algo::Transform(GetAllRegisteredFactories(), Names, [](IAudioLinkFactory* Factory) { return Factory->GetFactoryName(); });
return Names;
}
IAudioLinkFactory* IAudioLinkFactory::FindFactory(const FName InFactoryImplName)
{
TArray<IAudioLinkFactory*> Factories = GetAllRegisteredFactories();
if (IAudioLinkFactory** Found = Factories.FindByPredicate([InFactoryImplName](IAudioLinkFactory* Factory) { return Factory->GetFactoryName() == InFactoryImplName; }))
{
return *Found;
}
return nullptr;
}