UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MultithreadedPatching.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "DSP/Dsp.h"
8
9class FEvent;
10
11namespace Audio
12{
13
14
33 {
34 public:
36
39
41
43 SIGNALPROCESSING_API int32 PopAudio(float* OutBuffer, int32 NumSamples, bool bUseLatestAudio);
44
46 SIGNALPROCESSING_API int32 MixInAudio(float* OutBuffer, int32 NumSamples, bool bUseLatestAudio);
47
50
53
56
57 friend class FPatchInput;
58 friend class FPatchMixer;
59 friend class FPatchSplitter;
60 private:
61
62 SIGNALPROCESSING_API int32 PushAudioToInternalBuffer(const float* InBuffer, int32 NumSamples);
63
64 SIGNALPROCESSING_API void EmptyInternalBuffer();
65
66 // Internal buffer.
67 TCircularAudioBuffer<float> InternalBuffer;
68
69 // For MixInAudio, audio is popped off of InternalBuffer onto here, and then mixed into OutBuffer in MixInAudio.
70 FAlignedFloatBuffer MixingBuffer;
71
72 // This is applied in PopAudio or MixInAudio.
73 TAtomic<float> TargetGain;
74 float PreviousGain;
75
76 // This is used to breadcrumb the FPatchOutput when we want to delete it.
77 int32 PatchID;
78
79 // Counter that is incremented/decremented to allow FPatchInput to be copied around safely.
80 std::atomic<int32> NumAliveInputs;
81
82 // Event to pause the current thread until a given number of samples has been filled
83 std::atomic<FEvent*> SamplesPushedEvent;
84
85 static SIGNALPROCESSING_API TAtomic<int32> PatchIDCounter;
86 };
87
91
142
149 {
150 public:
153
156
159
161 SIGNALPROCESSING_API int32 PopAudio(float* OutBuffer, int32 OutNumSamples, bool bUseLatestAudio);
162
165
168
171
174
175 private:
177 void ConnectNewPatches();
178
181 void CleanUpDisconnectedPatches();
182
184 TArray<FPatchOutputStrongPtr> PendingNewInputs;
186 FCriticalSection PendingNewInputsCriticalSection;
187
189 TArray<int32> DisconnectedInputs;
191 FCriticalSection InputDeletionCriticalSection;
192
194 TArray<FPatchOutputStrongPtr> CurrentInputs;
195 FCriticalSection CurrentPatchesCriticalSection;
196 };
197
204 {
205 public:
211
215
218
221
224
225 private:
226 void AddPendingPatches();
227
228 TArray<FPatchInput> PendingOutputs;
229 FCriticalSection PendingOutputsCriticalSection;
230
231 TArray<FPatchInput> ConnectedOutputs;
232 FCriticalSection ConnectedOutputsCriticalSection;
233 };
234
270}
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define MAX_uint32
Definition NumericLimits.h:21
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MultithreadedPatching.h:96
SIGNALPROCESSING_API bool IsValid() const
Definition MultithreadedPatching.cpp:332
SIGNALPROCESSING_API FPatchInput & operator=(const FPatchInput &Other)
Definition MultithreadedPatching.cpp:250
SIGNALPROCESSING_API ~FPatchInput()
Definition MultithreadedPatching.cpp:264
SIGNALPROCESSING_API void SetGain(float InGain)
Definition MultithreadedPatching.cpp:317
SIGNALPROCESSING_API int32 GetNumSamplesAvailable() const
Definition MultithreadedPatching.cpp:307
SIGNALPROCESSING_API void ClearAudio()
Definition MultithreadedPatching.cpp:296
FPatchInput()=default
SIGNALPROCESSING_API void Reset()
Definition MultithreadedPatching.cpp:337
SIGNALPROCESSING_API int32 PushAudio(const float *InBuffer, int32 NumSamples)
Definition MultithreadedPatching.cpp:269
SIGNALPROCESSING_API bool IsOutputStillActive() const
Definition MultithreadedPatching.cpp:327
Definition MultithreadedPatching.h:240
SIGNALPROCESSING_API FPatchOutputStrongPtr AddNewOutput(int32 MaxLatencyInSamples, float InGain)
Definition MultithreadedPatching.cpp:652
SIGNALPROCESSING_API void ProcessAudio()
Definition MultithreadedPatching.cpp:677
SIGNALPROCESSING_API void RemovePatch(const FPatchInput &InInput)
Definition MultithreadedPatching.cpp:672
SIGNALPROCESSING_API FPatchInput AddNewInput(int32 MaxLatencyInSamples, float InGain)
Definition MultithreadedPatching.cpp:662
Definition MultithreadedPatching.h:149
SIGNALPROCESSING_API int32 Num()
Definition MultithreadedPatching.cpp:404
SIGNALPROCESSING_API void DisconnectAllInputs()
Definition MultithreadedPatching.cpp:487
SIGNALPROCESSING_API void RemovePatch(const FPatchInput &InPatchInput)
Definition MultithreadedPatching.cpp:373
SIGNALPROCESSING_API int32 PopAudio(float *OutBuffer, int32 OutNumSamples, bool bUseLatestAudio)
Definition MultithreadedPatching.cpp:385
SIGNALPROCESSING_API FPatchInput AddNewInput(int32 MaxLatencyInSamples, float InGain)
Definition MultithreadedPatching.cpp:353
SIGNALPROCESSING_API int32 MaxNumberOfSamplesThatCanBePopped()
Definition MultithreadedPatching.cpp:414
SIGNALPROCESSING_API bool WaitUntilNumSamplesAvailable(int32 NumSamples, uint32 TimeOutMilliseconds=MAX_uint32)
Definition MultithreadedPatching.cpp:440
Definition MultithreadedPatching.h:204
SIGNALPROCESSING_API int32 MaxNumberOfSamplesThatCanBePushed()
Definition MultithreadedPatching.cpp:595
SIGNALPROCESSING_API int32 Num()
Definition MultithreadedPatching.cpp:588
SIGNALPROCESSING_API FPatchOutputStrongPtr AddNewPatch(int32 MaxLatencyInSamples, float InGain)
Definition MultithreadedPatching.cpp:565
SIGNALPROCESSING_API int32 PushAudio(const float *InBuffer, int32 InNumSamples)
Definition MultithreadedPatching.cpp:625
Definition Dsp.h:834
Definition Event.h:21
Definition Atomic.h:538
Definition SharedPointer.h:692
Definition SharedPointer.h:1295
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
TWeakPtr< FPatchOutput, ESPMode::ThreadSafe > FPatchOutputWeakPtr
Definition MultithreadedPatching.h:90
TSharedPtr< FPatchOutput, ESPMode::ThreadSafe > FPatchOutputStrongPtr
Definition AudioDevice.h:69
Definition MultithreadedPatching.h:33
SIGNALPROCESSING_API bool IsInputStale() const
Definition MultithreadedPatching.cpp:87
SIGNALPROCESSING_API bool WaitUntilNumSamplesAvailable(int32 NumSamples, uint32 TimeOutMilliseconds=MAX_uint32)
Definition MultithreadedPatching.cpp:158
SIGNALPROCESSING_API int32 MixInAudio(float *OutBuffer, int32 NumSamples, bool bUseLatestAudio)
Definition MultithreadedPatching.cpp:115
virtual SIGNALPROCESSING_API ~FPatchOutput()
Definition MultithreadedPatching.cpp:45
SIGNALPROCESSING_API FPatchOutput()
Definition MultithreadedPatching.cpp:35
SIGNALPROCESSING_API int32 GetNumSamplesAvailable() const
Definition MultithreadedPatching.cpp:153
SIGNALPROCESSING_API int32 PopAudio(float *OutBuffer, int32 NumSamples, bool bUseLatestAudio)
Definition MultithreadedPatching.cpp:53