Files
UnrealEngineUWP/Engine/Source/Runtime/AudioLink/AudioLinkEngine/Private/IAudioLinkFactory.cpp
Maxwell Hayes 4d967c3450 Added missing ModularFeatureList lock/unlock
#jira UE-146734
#rb Aaron.McLeran, Phil.Popp
#preflight 623a53eb88538cd45eef0f33

[CL 19473764 by Maxwell Hayes in ue5-main branch]
2022-03-22 19:14:21 -04:00

61 lines
2.2 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()
{
IModularFeatures::FScopedLockModularFeatureList ScopedLockModularFeatureList;
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;
}