29#ifndef JUCE_STATE_DICTIONARY_KEY
30 #define JUCE_STATE_DICTIONARY_KEY "jucePluginState"
49 for (
int busIdx = 0; busIdx < numInputBuses; ++busIdx)
52 for (
int busIdx = 0; busIdx < numOutputBuses; ++busIdx)
84 layoutMapPtrStorage.
calloc (
static_cast<size_t> (numBuses));
85 layoutMapStorage.
calloc (
static_cast<size_t> (isInput ? totalInChannels : totalOutChannels));
87 layoutMap = layoutMapPtrStorage.
get();
90 for (
int busIdx = 0; busIdx < numBuses; ++busIdx)
92 layoutMap[busIdx] = layoutMapStorage.
get() + ch;
101 AudioChannelLayout coreAudioLayout;
104 coreAudioLayout.mChannelLayoutTag = CoreAudioLayouts::toCoreAudio (channelFormat);
106 const int numChannels = channelFormat.size();
107 auto coreAudioChannels = CoreAudioLayouts::getCoreAudioLayoutChannels (coreAudioLayout);
109 for (
int i = 0;
i < numChannels; ++
i)
110 layoutMap[
i] = coreAudioChannels.indexOf (channelFormat.getTypeOfChannel (
i));
120 const auto getChannelOffsets = [] (
const auto& range)
122 std::vector<int>
result { 0 };
124 for (
const auto& bus : range)
134 scratch.setSize (numChannels, maxFrames);
135 channels.resize (
static_cast<size_t> (numChannels),
nullptr);
168 void set (
int bus, AudioBufferList& bufferList,
const int* channelMap)
noexcept
173 const auto n = (UInt32) (bufferList.mBuffers[0].mDataByteSize / (bufferList.mBuffers[0].mNumberChannels * sizeof (
float)));
175 const auto numChannels = (
int) (isInterleaved ? bufferList.mBuffers[0].mNumberChannels
176 : bufferList.mNumberBuffers);
178 for (
int ch = 0; ch < numChannels; ++ch)
182 const auto mappedChannel = channelMap[ch];
184 if (isInterleaved ||
static_cast<float*
> (bufferList.mBuffers[mappedChannel].mData) !=
data)
189 void get (
int bus, AudioBufferList& buffer,
const int* channelMap)
noexcept
194 const auto n = (UInt32) (buffer.mBuffers[0].mDataByteSize / (buffer.mBuffers[0].mNumberChannels * sizeof (
float)));
196 const auto numChannels = (
int) (isInterleaved ? buffer.mBuffers[0].mNumberChannels
197 : buffer.mNumberBuffers);
199 for (
int ch = 0; ch < numChannels; ++ch)
203 const auto mappedChannel = channelMap[ch];
205 if (
data == buffer.mBuffers[mappedChannel].mData && ! isInterleaved)
208 if (buffer.mBuffers[mappedChannel].mData ==
nullptr && ! isInterleaved)
209 buffer.mBuffers[mappedChannel].mData =
data;
238 [bufferLength] (
float*
ptr) { zeromem (ptr, sizeof (float) * (size_t) bufferLength); });
244 if (buffer ==
nullptr)
245 return scratch.getWritePointer (idx);
247 for (
int ch = 0; ch < idx; ++ch)
248 if (buffer ==
channels[(
size_t) ch])
249 return scratch.getWritePointer (idx);
262 return (audioBuffer.mNumberBuffers == 1 && audioBuffer.mBuffers[0].mNumberChannels > 1);
267 for (
unsigned int ch = 0; ch < audioBuffer.mNumberBuffers; ++ch)
268 zeromem (audioBuffer.mBuffers[ch].mData, audioBuffer.mBuffers[ch].mDataByteSize);
271 static void copyAudioBuffer (
const AudioBufferList& audioBuffer,
const int channel,
const UInt32
size,
float* dst)
noexcept
275 jassert (channel <
static_cast<int> (audioBuffer.mNumberBuffers));
276 jassert (audioBuffer.mBuffers[channel].mDataByteSize == (
size * sizeof (
float)));
278 memcpy (dst, audioBuffer.mBuffers[channel].mData,
size * sizeof (
float));
282 const int numChannels =
static_cast<int> (audioBuffer.mBuffers[0].mNumberChannels);
283 const UInt32
n =
static_cast<UInt32
> (numChannels) *
size;
284 const float* src =
static_cast<const float*
> (audioBuffer.mBuffers[0].mData);
286 jassert (channel < numChannels);
287 jassert (audioBuffer.mBuffers[0].mDataByteSize == (
n * sizeof (
float)));
289 for (
const float* inData = src; inData < (src +
n); inData += numChannels)
290 *dst++ = inData[channel];
294 static void copyAudioBuffer (
const float *src,
const int channel,
const UInt32
size, AudioBufferList& audioBuffer)
noexcept
298 jassert (channel <
static_cast<int> (audioBuffer.mNumberBuffers));
299 jassert (audioBuffer.mBuffers[channel].mDataByteSize == (
size * sizeof (
float)));
301 memcpy (audioBuffer.mBuffers[channel].mData, src,
size * sizeof (
float));
305 const int numChannels =
static_cast<int> (audioBuffer.mBuffers[0].mNumberChannels);
306 const UInt32
n =
static_cast<UInt32
> (numChannels) *
size;
307 float* dst =
static_cast<float*
> (audioBuffer.mBuffers[0].mData);
309 jassert (channel < numChannels);
310 jassert (audioBuffer.mBuffers[0].mDataByteSize == (
n * sizeof (
float)));
312 for (
float* outData = dst; outData < (dst +
n); outData += numChannels)
313 outData[channel] = *src++;
317 template <
size_t numLayouts>
319 bool isInput,
int busIdx,
321 const short (&channelLayoutList)[numLayouts][2],
322 bool hasLayoutMap =
true)
326 if (! bus->isNumberOfChannelsSupported (numChannels))
332 const int numConfigs =
sizeof (channelLayoutList) /
sizeof (
short[2]);
334 for (
int i = 0;
i < numConfigs; ++
i)
336 if (channelLayoutList[
i][isInput ? 0 : 1] == numChannels)
351 if ((! hasMainInputBus) && (! hasMainOutputBus))
356 info.outChannels = 0;
362 auto maxNumChanToCheckFor = 9;
371 std::pair<SInt16, SInt16> makePair()
const noexcept {
return std::make_pair (ins, outs); }
373 bool operator< (
const Channels& other)
const noexcept {
return makePair() < other.makePair(); }
374 bool operator== (
const Channels& other)
const noexcept {
return makePair() == other.makePair(); }
380 if (defaultInputs != 0 || defaultOutputs != 0)
381 supportedChannels.
add ({
static_cast<SInt16
> (defaultInputs),
382 static_cast<SInt16
> (defaultOutputs) });
384 for (
auto inChanNum = hasMainInputBus ? 1 : 0; inChanNum <= (hasMainInputBus ? maxNumChanToCheckFor : 0); ++inChanNum)
386 auto inLayout = layout;
388 if (
auto* inBus = processor.
getBus (
true, 0))
392 for (
auto outChanNum = hasMainOutputBus ? 1 : 0; outChanNum <= (hasMainOutputBus ? maxNumChanToCheckFor : 0); ++outChanNum)
394 auto outLayout = inLayout;
396 if (
auto* outBus = processor.
getBus (
false, 0))
400 supportedChannels.
add ({
static_cast<SInt16
> (hasMainInputBus ? outLayout.getMainInputChannels() : 0),
401 static_cast<SInt16
> (hasMainOutputBus ? outLayout.getMainOutputChannels() : 0) });
405 auto hasInOutMismatch =
false;
407 for (
const auto& supported : supportedChannels)
409 if (supported.ins != supported.outs)
411 hasInOutMismatch =
true;
416 auto hasUnsupportedInput = ! hasMainInputBus, hasUnsupportedOutput = ! hasMainOutputBus;
418 for (
auto inChanNum = hasMainInputBus ? 1 : 0; inChanNum <= (hasMainInputBus ? maxNumChanToCheckFor : 0); ++inChanNum)
420 Channels channelConfiguration {
static_cast<SInt16
> (inChanNum),
421 static_cast<SInt16
> (hasInOutMismatch ? defaultOutputs : inChanNum) };
423 if (! supportedChannels.
contains (channelConfiguration))
425 hasUnsupportedInput =
true;
430 for (
auto outChanNum = hasMainOutputBus ? 1 : 0; outChanNum <= (hasMainOutputBus ? maxNumChanToCheckFor : 0); ++outChanNum)
432 Channels channelConfiguration {
static_cast<SInt16
> (hasInOutMismatch ? defaultInputs : outChanNum),
433 static_cast<SInt16
> (outChanNum) };
435 if (! supportedChannels.
contains (channelConfiguration))
437 hasUnsupportedOutput =
true;
442 for (
const auto& supported : supportedChannels)
447 info.inChannels =
static_cast<SInt16
> (hasMainInputBus ? (hasUnsupportedInput ? supported.ins : (hasInOutMismatch && (! hasUnsupportedOutput) ? -2 : -1)) : 0);
448 info.outChannels =
static_cast<SInt16
> (hasMainOutputBus ? (hasUnsupportedOutput ? supported.outs : (hasInOutMismatch && (! hasUnsupportedInput) ? -2 : -1)) : 0);
450 if (
info.inChannels == -2 &&
info.outChannels == -2)
451 info.inChannels = -1;
454 for (
j = 0;
j < channelInfo.
size(); ++
j)
459 if (
j >= channelInfo.
size())
470 for (
auto set : potentialSets)
472 auto copy = inOutCurrentLayout;
474 if (
b->isLayoutSupported (set, &
copy))
476 inOutCurrentLayout =
copy;
489 #ifdef JucePlugin_PreferredChannelConfigurations
490 short configs[][2] = {JucePlugin_PreferredChannelConfigurations};
491 const int numConfigs =
sizeof (configs) /
sizeof (
short[2]);
493 bool hasOnlyZeroChannels =
true;
495 for (
int i = 0;
i < numConfigs && hasOnlyZeroChannels ==
true; ++
i)
496 if (configs[
i][isInput ? 0 : 1] != 0)
497 hasOnlyZeroChannels =
false;
499 busCount =
jmin (busCount, hasOnlyZeroChannels ? 0 : 1);
507 #if JucePlugin_IsMidiEffect
508 const auto numRequiredBuses = isInput ? 0 : 1;
510 const auto numRequiredBuses = 0;
518 #ifdef JucePlugin_PreferredChannelConfigurations
521 for (
int dir = 0; dir < 2; ++dir)
523 const bool isInput = (dir == 0);
525 const int actualBuses = juceFilter->
getBusCount (isInput);
526 const int auNumBuses =
getBusCount (*juceFilter, isInput);
529 for (
int i = auNumBuses;
i < actualBuses; ++
i)
541 #ifdef JucePlugin_PreferredChannelConfigurations
544 for (
int dir = 0; dir < 2; ++dir)
546 const bool isInput = (dir == 0);
548 const int actualBuses = juceFilter->
getBusCount (isInput);
549 const int auNumBuses =
getBusCount (*juceFilter, isInput);
552 for (
int i = auNumBuses;
i < actualBuses; ++
i)
#define copy(x)
Definition ADnoteParameters.cpp:1011
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_Array.h:56
int size() const noexcept
Definition juce_Array.h:215
void add(const ElementType &newElement)
Definition juce_Array.h:418
ElementType & getReference(int index) noexcept
Definition juce_Array.h:267
Definition juce_AudioSampleBuffer.h:34
static AudioChannelSet JUCE_CALLTYPE disabled()
Definition juce_AudioChannelSet.cpp:450
static Array< AudioChannelSet > JUCE_CALLTYPE channelSetsWithNumberOfChannels(int numChannels)
Definition juce_AudioChannelSet.cpp:539
Definition juce_AudioProcessor.h:361
Definition juce_AudioProcessor.h:46
int getTotalNumInputChannels() const noexcept
Definition juce_AudioProcessor.h:733
Bus * getBus(bool isInput, int busIndex) noexcept
Definition juce_AudioProcessor.h:509
BusesLayout getBusesLayout() const
Definition juce_AudioProcessor.cpp:171
int getBusCount(bool isInput) const noexcept
Definition juce_AudioProcessor.h:504
int getChannelCountOfBus(bool isInput, int busIndex) const noexcept
Definition juce_AudioProcessor.h:616
AudioChannelSet getChannelLayoutOfBus(bool isInput, int busIndex) const noexcept
Definition juce_AudioProcessor.cpp:181
int getTotalNumOutputChannels() const noexcept
Definition juce_AudioProcessor.h:747
bool setBusesLayout(const BusesLayout &)
Definition juce_AudioProcessor.cpp:111
Definition juce_AU_Shared.h:39
void alloc(AudioProcessor &processor)
Definition juce_AU_Shared.h:41
void initializeChannelMapArray(AudioProcessor &processor, bool isInput, const int numBuses)
Definition juce_AU_Shared.h:75
HeapBlock< int * > outputLayoutMapPtrStorage
Definition juce_AU_Shared.h:69
HeapBlock< int > outputLayoutMapStorage
Definition juce_AU_Shared.h:70
const int * get(bool input, int bus) const noexcept
Definition juce_AU_Shared.h:65
void fillLayoutChannelMaps(AudioProcessor &processor, bool isInput, int busNr)
Definition juce_AU_Shared.h:97
int ** outputLayoutMap
Definition juce_AU_Shared.h:72
HeapBlock< int > inputLayoutMapStorage
Definition juce_AU_Shared.h:70
void release()
Definition juce_AU_Shared.h:56
int ** inputLayoutMap
Definition juce_AU_Shared.h:71
HeapBlock< int * > inputLayoutMapPtrStorage
Definition juce_AU_Shared.h:69
Definition juce_AU_Shared.h:116
void prepare(const AudioProcessor::BusesLayout &layout, int maxFrames)
Definition juce_AU_Shared.h:118
AudioBuffer< float > & getBuffer(UInt32 frames) noexcept
Definition juce_AU_Shared.h:158
void set(int bus, AudioBufferList &bufferList, const int *channelMap) noexcept
Definition juce_AU_Shared.h:168
std::vector< int > inputBusOffsets
Definition juce_AU_Shared.h:257
AudioBuffer< float > scratch
Definition juce_AU_Shared.h:255
void clearInputBus(int index, int bufferLength)
Definition juce_AU_Shared.h:215
float * uniqueBuffer(int idx, float *buffer) noexcept
Definition juce_AU_Shared.h:242
void clearUnusedChannels(int bufferLength)
Definition juce_AU_Shared.h:221
AudioBuffer< float > mutableBuffer
Definition juce_AU_Shared.h:255
void clearChannels(Range< int > range, int bufferLength)
Definition juce_AU_Shared.h:230
std::vector< int > outputBusOffsets
Definition juce_AU_Shared.h:257
float * setBuffer(const int idx, float *ptr=nullptr) noexcept
Definition juce_AU_Shared.h:152
std::vector< float * > channels
Definition juce_AU_Shared.h:256
void get(int bus, AudioBufferList &buffer, const int *channelMap) noexcept
Definition juce_AU_Shared.h:189
void release()
Definition juce_AU_Shared.h:140
void reset()
Definition juce_AU_Shared.h:147
Definition juce_HeapBlock.h:87
ElementType * get() const noexcept
Definition juce_HeapBlock.h:188
void calloc(SizeType newNumElements, const size_t elementSize=sizeof(ElementType))
Definition juce_HeapBlock.h:263
Definition juce_Range.h:40
constexpr ValueType getStart() const noexcept
Definition juce_Range.h:80
constexpr ValueType getEnd() const noexcept
Definition juce_Range.h:86
Definition juce_SortedSet.h:54
bool add(const ElementType &newElement) noexcept
Definition juce_SortedSet.h:271
bool contains(const ElementType &elementToLookFor) const noexcept
Definition juce_SortedSet.h:254
register unsigned j
Definition inflate.c:1576
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
struct backing_store_struct * info
Definition jmemsys.h:183
JSAMPIMAGE data
Definition jpeglib.h:945
Definition carla_juce.cpp:31
void zerostruct(Type &structure) noexcept
Definition juce_Memory.h:32
jack_client_t client jack_client_t client jack_client_t client jack_client_t JackInfoShutdownCallback void arg jack_client_t jack_port_t port void func jack_client_t const char const char unsigned long flags const jack_port_t port jack_client_t jack_port_id_t port_id const jack_port_t const char port_name const jack_port_t port void * ptr
Definition juce_linux_JackAudio.cpp:79
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Definition juce_MathsFunctions.h:279
void zeromem(void *memory, size_t numBytes) noexcept
Definition juce_Memory.h:28
Definition juce_AudioProcessor.h:311
Array< AudioChannelSet > outputBuses
Definition juce_AudioProcessor.h:316
Array< AudioChannelSet > inputBuses
Definition juce_AudioProcessor.h:313
Definition juce_AU_Shared.h:37
static AudioProcessor::BusesLayout getBusesLayout(const AudioProcessor *juceFilter)
Definition juce_AU_Shared.h:539
static bool setBusesLayout(AudioProcessor *juceFilter, const AudioProcessor::BusesLayout &requestedLayouts)
Definition juce_AU_Shared.h:516
static void clearAudioBuffer(const AudioBufferList &audioBuffer) noexcept
Definition juce_AU_Shared.h:265
static int getBusCountForWrapper(const AudioProcessor &juceFilter, bool isInput)
Definition juce_AU_Shared.h:505
static int getBusCount(const AudioProcessor &juceFilter, bool isInput)
Definition juce_AU_Shared.h:485
static bool isAudioBufferInterleaved(const AudioBufferList &audioBuffer) noexcept
Definition juce_AU_Shared.h:260
static bool isNumberOfChannelsSupported(const AudioProcessor::Bus *b, int numChannels, AudioProcessor::BusesLayout &inOutCurrentLayout)
Definition juce_AU_Shared.h:466
static bool isLayoutSupported(const AudioProcessor &processor, bool isInput, int busIdx, int numChannels, const short(&channelLayoutList)[numLayouts][2], bool hasLayoutMap=true)
Definition juce_AU_Shared.h:318
static void copyAudioBuffer(const float *src, const int channel, const UInt32 size, AudioBufferList &audioBuffer) noexcept
Definition juce_AU_Shared.h:294
static Array< AUChannelInfo > getAUChannelInfo(const AudioProcessor &processor)
Definition juce_AU_Shared.h:344
static void copyAudioBuffer(const AudioBufferList &audioBuffer, const int channel, const UInt32 size, float *dst) noexcept
Definition juce_AU_Shared.h:271
int n
Definition crypt.c:458
memcpy(hh, h, RAND_HEAD_LEN)
int result
Definition process.c:1455
typedef int(UZ_EXP MsgFn)()