UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BufferDiagnostics.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Containers/List.h"
10#include "Math/Float32.h"
11#include "Templates/Function.h"
12
13namespace Audio
14{
15 // IEEE Standard 754 Floating Point Numbers
16 // https://www.geeksforgeeks.org/ieee-standard-754-floating-point-numbers/
17
18 /*
19 * Denormalized.
20 */
21 inline static bool IsDenormalized(const float InValue)
22 {
23 // If the exponent is all zeros, but the mantissa is not then the value is a denormalized number.
24 // This means this number does not have an assumed leading one before the binary point.
25 const FFloat32 F(InValue);
26 return F.Components.Exponent == 0 && F.Components.Mantissa != 0;
27 }
28
30
32
33 /*
34 * Infinity.
35 */
36 inline static bool IsInfinity(const float InValue)
37 {
38 // The values + infinity and -infinity are denoted with an exponent of all ones and a mantissa of all zeros.
39 // The sign bit distinguishes between negative infinity and positive infinity.
40 const FFloat32 F(InValue);
41 return F.Components.Exponent == 255 && F.Components.Mantissa == 0;
42 }
43
46
47 /*
48 * NaN (Not a number)
49 */
51
53
55 {
56 None = 0,
57 Infinity = 1 << 1,
58 Nan = 1 << 2,
59 Denormalized = 1 << 3,
61 };
62
64 {
65 return static_cast<ECheckBufferFlags>(static_cast<uint32>(A) | static_cast<uint32>(B));
66 }
67
69 {
70 return Out = Out | Other;
71 }
72
74 {
75 return static_cast<ECheckBufferFlags>(static_cast<uint32>(A) & static_cast<uint32>(B));
76 }
77
78 // ToString with deliminators i.e. "Nan|Infinity" etc.
80
88
90 {
91 Nothing,
92 Ensure,
93 Log,
94 Break,
95 };
96
121
122
123}
124
125#ifndef WITH_AUDIO_BUFFERDIAGNOSTICS
126// By default enabled in all but ship
127#define WITH_AUDIO_BUFFERDIAGNOSTICS (!UE_BUILD_SHIPPING)
128#endif //WITH_AUDIO_BUFFERDIAGNOSTICS
129
130#if WITH_AUDIO_BUFFERDIAGNOSTICS
131#define AUDIO_CHECK_BUFFER(BUFFER)\
132 static FCheckedBufferState PREPROCESSOR_JOIN(BufferCheck, __LINE__)(__LINE__,TEXT(__FILE__),TEXT(PREPROCESSOR_TO_STRING(BUFFER)));\
133 if (!PREPROCESSOR_JOIN(BufferCheck, __LINE__).DoCheck(BUFFER) )\
134 {\
135 PREPROCESSOR_JOIN(BufferCheck, __LINE__).FailedBufferCheckImpl(TEXT(""));\
136 }
137
138#define AUDIO_CHECK_BUFFER_NAMED(BUFFER,NAME)\
139 static FCheckedBufferState PREPROCESSOR_JOIN(BufferCheck, __LINE__)(__LINE__,TEXT(__FILE__),NAME);\
140 if (!PREPROCESSOR_JOIN(BufferCheck, __LINE__).DoCheck(BUFFER) )\
141 {\
142 PREPROCESSOR_JOIN(BufferCheck, __LINE__).FailedBufferCheckImpl(TEXT(""));\
143 }
144
145#define AUDIO_CHECK_BUFFER_NAMED_MSG(BUFFER,NAME,MSG,...)\
146 static FCheckedBufferState PREPROCESSOR_JOIN(BufferCheck, __LINE__)(__LINE__,TEXT(__FILE__),NAME);\
147 if (!PREPROCESSOR_JOIN(BufferCheck, __LINE__).DoCheck(BUFFER))\
148 {\
149 PREPROCESSOR_JOIN(BufferCheck, __LINE__).FailedBufferCheckImpl(MSG,__VA_ARGS__);\
150 }
151#else //WITH_AUDIO_BUFFERDIAGNOSTICS
152 #define AUDIO_CHECK_BUFFER_NAMED(BUFFER,NAME)
153 #define AUDIO_CHECK_BUFFER(BUFFER)
154 #define AUDIO_CHECK_BUFFER_NAMED_MSG(BUFFER,NAME,MSG,...)
155#endif //WITH_AUDIO_BUFFERDIAGNOSTICS
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
short * CheckBuffer
Definition binka_ue_decode_test.cpp:33
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Float32.h:11
Definition ArrayView.h:139
Definition AssetRegistryState.h:50
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
int32 FindNan(TArrayView< const float > InBuffer)
Definition BufferDiagnostics.cpp:36
FString ToDelimitedString(const ECheckBufferFlags InEnum)
Definition BufferDiagnostics.cpp:420
int32 FindDenormalized(TArrayView< const float > InBuffer)
Definition BufferDiagnostics.cpp:14
bool ContainsDenormalized(TArrayView< const float > InBuffer)
Definition BufferDiagnostics.cpp:19
ECheckBufferFlags & operator|=(ECheckBufferFlags &Out, const ECheckBufferFlags Other)
Definition BufferDiagnostics.h:68
EBufferCheckBehavior
Definition BufferDiagnostics.h:90
bool ContainsNan(TArrayView< const float > InBuffer)
Definition BufferDiagnostics.cpp:41
int32 FindInfinity(TArrayView< const float > InBuffer)
Definition BufferDiagnostics.cpp:25
ECheckBufferFlags operator&(const ECheckBufferFlags A, const ECheckBufferFlags B)
Definition BufferDiagnostics.h:73
ECheckBufferFlags
Definition BufferDiagnostics.h:55
ECheckBufferFlags operator|(const ECheckBufferFlags A, const ECheckBufferFlags B)
Definition BufferDiagnostics.h:63
bool ContainsInfinity(TArrayView< const float > InBuffer)
Definition BufferDiagnostics.cpp:30
Definition BufferDiagnostics.h:98
SIGNALPROCESSING_API bool DoCheck(TArrayView< const float > InBuffer)
Definition BufferDiagnostics.cpp:154
ECheckBufferFlags CheckFlags
Definition BufferDiagnostics.h:109
int32 Line
Definition BufferDiagnostics.h:107
EBufferCheckBehavior Behavior
Definition BufferDiagnostics.h:111
ECheckBufferFlags FailFlags
Definition BufferDiagnostics.h:110
static FCriticalSection ListCs
Definition BufferDiagnostics.h:100
const TCHAR * File
Definition BufferDiagnostics.h:108
SIGNALPROCESSING_API void FailedBufferCheckImpl(const TCHAR *InFormat,...) const
Definition BufferDiagnostics.cpp:170
static void ForEach(TFunctionRef< void(FCheckedBufferState &)> InCmd)
Definition BufferDiagnostics.cpp:144
FCheckedBufferState * Next
Definition BufferDiagnostics.h:105
static FCheckedBufferState * Head
Definition BufferDiagnostics.h:101
const TCHAR * Name
Definition BufferDiagnostics.h:106