UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DeinterleaveView.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"
6
7namespace Audio
8{
13 template <typename T>
15 {
16 friend class TChannelIterator;
17
18 public:
19
24 template<typename InAllocator = FDefaultAllocator>
36
42 template<typename InAllocator = FDefaultAllocator>
44 {
45 TDeinterleaveView<T> DeinterleaveView;
46 TArray<T, InAllocator>& ArrayToFill;
47 int32 ChannelIndex;
48
49 public:
50
53
63 : DeinterleaveView(InDeinterleaveView)
64 , ArrayToFill(InArrayToFill)
65 , ChannelIndex(InChannelIndex)
66 {
67 if (ChannelIndex >= DeinterleaveView.NumChannels)
68 {
69 // Channel index is more than number of total channels
70 ChannelIndex = ChannelIndexEnd;
71 }
72
73
74 }
75
78 {
79 if (ChannelIndex != ChannelIndexEnd)
80 {
81 ChannelIndex++;
82 if (ChannelIndex >= DeinterleaveView.NumChannels)
83 {
84 ChannelIndex = ChannelIndexEnd;
85 }
86 }
87 return *this;
88 }
89
92 {
93 return Other.ChannelIndex != ChannelIndex;
94 }
95
98 {
99 return ChannelIndex;
100 }
101
104 {
105 if (ChannelIndex == ChannelIndexEnd)
106 {
107 ArrayToFill.Reset(DeinterleaveView.NumElementsPerChannel);
108 }
109 else
110 {
111 // prepare the array
112 ArrayToFill.Reset(DeinterleaveView.NumElementsPerChannel);
113 if (DeinterleaveView.NumElementsPerChannel > 0)
114 {
115 ArrayToFill.AddUninitialized(DeinterleaveView.NumElementsPerChannel);
116 }
117
118 // Fill array with deinterleave data
119 T* ArrayToFillData = ArrayToFill.GetData();
120 const T* InterleavedData = DeinterleaveView.InterleavedArray.GetData();
121
122 int32 InterleavedPos = ChannelIndex;
123 for (int32 OutPos = 0; OutPos < DeinterleaveView.NumElementsPerChannel; OutPos++, InterleavedPos += DeinterleaveView.NumChannels)
124 {
126 }
127 }
128
129
130 // Create and return channel
131 return TChannel<InAllocator>(ArrayToFill, ChannelIndex);
132 }
133 };
134
141 : InterleavedArray(InInterleavedArray)
142 , NumChannels(InNumChannels)
143 , NumElementsPerChannel(0)
144 {
145 check(InterleavedArray.Num() % NumChannels == 0);
146
147 NumElementsPerChannel = InterleavedArray.Num() / NumChannels;
148 }
149
151 template <typename InAllocator = FDefaultAllocator>
156
158 template <typename InAllocator = FDefaultAllocator>
163
164 private:
165 // view to interleaved data
166 TArrayView<const T> InterleavedArray;
167
168 int32 NumChannels;
169 int32 NumElementsPerChannel;
170 };
171
184 template <typename T, typename InAllocator = FDefaultAllocator>
186 {
187 TArray<T, InAllocator>& ArrayToFill;
188
189 typedef typename TDeinterleaveView<T>::template TChannelIterator<InAllocator> TAutoChannelIterator;
190
191 public:
202
204 TAutoChannelIterator begin()
205 {
207 }
208
210 TAutoChannelIterator end()
211 {
213 }
214 };
215}
216
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
Definition DeinterleaveView.h:186
TAutoDeinterleaveView(TArrayView< const T > InInterleavedArray, TArray< T, InAllocator > &InArrayToFill, int32 InNumChannels)
Definition DeinterleaveView.h:198
TAutoChannelIterator end()
Definition DeinterleaveView.h:210
TAutoChannelIterator begin()
Definition DeinterleaveView.h:204
Definition DeinterleaveView.h:44
TChannel< InAllocator > operator*()
Definition DeinterleaveView.h:103
int32 GetChannelIndex() const
Definition DeinterleaveView.h:97
bool operator!=(const TChannelIterator &Other) const
Definition DeinterleaveView.h:91
TChannelIterator & operator++()
Definition DeinterleaveView.h:77
TChannelIterator(TDeinterleaveView< T > InDeinterleaveView, TArray< T, InAllocator > &InArrayToFill, int32 InChannelIndex)
Definition DeinterleaveView.h:62
static const int32 ChannelIndexEnd
Definition DeinterleaveView.h:52
Definition DeinterleaveView.h:26
TArray< T, InAllocator > & Values
Definition DeinterleaveView.h:28
const int32 ChannelIndex
Definition DeinterleaveView.h:29
TChannel(TArray< T, InAllocator > &InValues, const int32 InChannelIndex)
Definition DeinterleaveView.h:31
Definition DeinterleaveView.h:15
TDeinterleaveView(TArrayView< const T > InInterleavedArray, int32 InNumChannels)
Definition DeinterleaveView.h:140
TChannelIterator< InAllocator > begin(TArray< T, InAllocator > &InArrayToFill) const
Definition DeinterleaveView.h:152
TChannelIterator< InAllocator > end(TArray< T, InAllocator > &InArrayToFill) const
Definition DeinterleaveView.h:159
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr ElementType * GetData() const
Definition ArrayView.h:295
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
Definition Array.h:670
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53