|
|
@@ -2619,6 +2619,24 @@ private: |
|
|
|
return V3_OK; |
|
|
|
} |
|
|
|
|
|
|
|
// someone please tell me what is up with these.. |
|
|
|
static inline v3_speaker_arrangement indexToSpeaker(const uint32_t index) |
|
|
|
{ |
|
|
|
switch (index) |
|
|
|
{ |
|
|
|
case 0: return 1ull << 23ull; |
|
|
|
case 1: return 1ull << 22ull; |
|
|
|
case 2: return 1ull << 20ull; |
|
|
|
case 3: return 1ull << 21ull; |
|
|
|
case 4: return 1ull << 28ull; |
|
|
|
case 5: return 1ull << 29ull; |
|
|
|
case 6: return 1ull << 30ull; |
|
|
|
case 7: return 1ull << 31ull; |
|
|
|
case 8: return 1ull << 32ull; |
|
|
|
default: return 1ull << (index - 8ull + 33ull); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
template<bool isInput> |
|
|
|
v3_speaker_arrangement getSpeakerArrangementForAudioPort(const BusInfo& busInfo, const uint32_t portGroupId, uint32_t busId) const noexcept |
|
|
|
{ |
|
|
@@ -2636,7 +2654,7 @@ private: |
|
|
|
{ |
|
|
|
const uint32_t numPortsInBus = fPlugin.getAudioPortCountWithGroupId(isInput, busId); |
|
|
|
for (uint32_t j=0; j<numPortsInBus; ++j) |
|
|
|
arr |= 1ull << (j + 33ull); |
|
|
|
arr |= indexToSpeaker(j); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
@@ -2644,19 +2662,17 @@ private: |
|
|
|
|
|
|
|
if (busInfo.audio != 0 && busId == 0) |
|
|
|
{ |
|
|
|
arr = 0x0; |
|
|
|
for (uint32_t j=0; j<busInfo.audioPorts; ++j) |
|
|
|
arr |= 1ull << (j + 33ull); |
|
|
|
arr |= indexToSpeaker(j); |
|
|
|
} |
|
|
|
else if (busInfo.sidechain != 0 && busId == busInfo.audio) |
|
|
|
{ |
|
|
|
arr = 0x0; |
|
|
|
for (uint32_t j=0; j<busInfo.sidechainPorts; ++j) |
|
|
|
arr |= 1ull << (busInfo.audioPorts + j + 33ull); |
|
|
|
arr |= indexToSpeaker(busInfo.audioPorts + j); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
arr = 1ull << (busInfo.audioPorts + busInfo.sidechainPorts + busId + 33ull); |
|
|
|
arr = indexToSpeaker(busInfo.audioPorts + busInfo.sidechainPorts + busId); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -2668,6 +2684,7 @@ private: |
|
|
|
{ |
|
|
|
constexpr const uint32_t numPorts = isInput ? DISTRHO_PLUGIN_NUM_INPUTS : DISTRHO_PLUGIN_NUM_OUTPUTS; |
|
|
|
const BusInfo& busInfo(isInput ? inputBuses : outputBuses); |
|
|
|
/* |
|
|
|
const bool* const enabledPorts = isInput |
|
|
|
#if DISTRHO_PLUGIN_NUM_INPUTS > 0 |
|
|
|
? fEnabledInputs |
|
|
@@ -2679,6 +2696,7 @@ private: |
|
|
|
#else |
|
|
|
: nullptr; |
|
|
|
#endif |
|
|
|
*/ |
|
|
|
|
|
|
|
for (uint32_t i=0; i<numPorts; ++i) |
|
|
|
{ |
|
|
@@ -2690,12 +2708,14 @@ private: |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
/* FIXME should we disable this by default? |
|
|
|
if (!enabledPorts[i]) |
|
|
|
{ |
|
|
|
*speaker = 0; |
|
|
|
// d_stdout("getAudioBusArrangement %d %d not enabled", i, busId); |
|
|
|
return true; |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
*speaker = getSpeakerArrangementForAudioPort<isInput>(busInfo, port.groupId, busId); |
|
|
|
// d_stdout("getAudioBusArrangement %d enabled by value %lx", busId, *speaker); |
|
|
@@ -2744,7 +2764,8 @@ private: |
|
|
|
const v3_speaker_arrangement earr = getSpeakerArrangementForAudioPort<isInput>(busInfo, port.groupId, busId); |
|
|
|
|
|
|
|
// fail if host tries to map it to anything else |
|
|
|
if (earr != arr && arr != 0) |
|
|
|
// FIXME should we allow to map speaker to zero as a way to disable it? |
|
|
|
if (earr != arr /* && arr != 0 */) |
|
|
|
{ |
|
|
|
ok = false; |
|
|
|
continue; |
|
|
|