|
|
@ -12,7 +12,7 @@ bool ValidChannelCountForEffect(s32 channel_count) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} // namespace
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
|
|
EffectContext::EffectContext(std::size_t effect_count) : effect_count(effect_count) {
|
|
|
|
EffectContext::EffectContext(std::size_t effect_count_) : effect_count(effect_count_) {
|
|
|
|
effects.reserve(effect_count);
|
|
|
|
effects.reserve(effect_count);
|
|
|
|
std::generate_n(std::back_inserter(effects), effect_count,
|
|
|
|
std::generate_n(std::back_inserter(effects), effect_count,
|
|
|
|
[] { return std::make_unique<EffectStubbed>(); });
|
|
|
|
[] { return std::make_unique<EffectStubbed>(); });
|
|
|
@ -61,13 +61,13 @@ const EffectBase* EffectContext::GetInfo(std::size_t i) const {
|
|
|
|
return effects.at(i).get();
|
|
|
|
return effects.at(i).get();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EffectStubbed::EffectStubbed() : EffectBase::EffectBase(EffectType::Invalid) {}
|
|
|
|
EffectStubbed::EffectStubbed() : EffectBase(EffectType::Invalid) {}
|
|
|
|
EffectStubbed::~EffectStubbed() = default;
|
|
|
|
EffectStubbed::~EffectStubbed() = default;
|
|
|
|
|
|
|
|
|
|
|
|
void EffectStubbed::Update(EffectInfo::InParams& in_params) {}
|
|
|
|
void EffectStubbed::Update([[maybe_unused]] EffectInfo::InParams& in_params) {}
|
|
|
|
void EffectStubbed::UpdateForCommandGeneration() {}
|
|
|
|
void EffectStubbed::UpdateForCommandGeneration() {}
|
|
|
|
|
|
|
|
|
|
|
|
EffectBase::EffectBase(EffectType effect_type) : effect_type(effect_type) {}
|
|
|
|
EffectBase::EffectBase(EffectType effect_type_) : effect_type(effect_type_) {}
|
|
|
|
EffectBase::~EffectBase() = default;
|
|
|
|
EffectBase::~EffectBase() = default;
|
|
|
|
|
|
|
|
|
|
|
|
UsageState EffectBase::GetUsage() const {
|
|
|
|
UsageState EffectBase::GetUsage() const {
|
|
|
@ -90,32 +90,32 @@ s32 EffectBase::GetProcessingOrder() const {
|
|
|
|
return processing_order;
|
|
|
|
return processing_order;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EffectI3dl2Reverb::EffectI3dl2Reverb() : EffectGeneric::EffectGeneric(EffectType::I3dl2Reverb) {}
|
|
|
|
EffectI3dl2Reverb::EffectI3dl2Reverb() : EffectGeneric(EffectType::I3dl2Reverb) {}
|
|
|
|
EffectI3dl2Reverb::~EffectI3dl2Reverb() = default;
|
|
|
|
EffectI3dl2Reverb::~EffectI3dl2Reverb() = default;
|
|
|
|
|
|
|
|
|
|
|
|
void EffectI3dl2Reverb::Update(EffectInfo::InParams& in_params) {
|
|
|
|
void EffectI3dl2Reverb::Update(EffectInfo::InParams& in_params) {
|
|
|
|
auto& internal_params = GetParams();
|
|
|
|
auto& params = GetParams();
|
|
|
|
const auto* reverb_params = reinterpret_cast<I3dl2ReverbParams*>(in_params.raw.data());
|
|
|
|
const auto* reverb_params = reinterpret_cast<I3dl2ReverbParams*>(in_params.raw.data());
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->max_channels)) {
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->max_channels)) {
|
|
|
|
UNREACHABLE_MSG("Invalid reverb max channel count {}", reverb_params->max_channels);
|
|
|
|
UNREACHABLE_MSG("Invalid reverb max channel count {}", reverb_params->max_channels);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const auto last_status = internal_params.status;
|
|
|
|
const auto last_status = params.status;
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
internal_params = *reverb_params;
|
|
|
|
params = *reverb_params;
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->channel_count)) {
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->channel_count)) {
|
|
|
|
internal_params.channel_count = internal_params.max_channels;
|
|
|
|
params.channel_count = params.max_channels;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
if (last_status != ParameterStatus::Updated) {
|
|
|
|
if (last_status != ParameterStatus::Updated) {
|
|
|
|
internal_params.status = last_status;
|
|
|
|
params.status = last_status;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (in_params.is_new || skipped) {
|
|
|
|
if (in_params.is_new || skipped) {
|
|
|
|
usage = UsageState::Initialized;
|
|
|
|
usage = UsageState::Initialized;
|
|
|
|
internal_params.status = ParameterStatus::Initialized;
|
|
|
|
params.status = ParameterStatus::Initialized;
|
|
|
|
skipped = in_params.buffer_address == 0 || in_params.buffer_size == 0;
|
|
|
|
skipped = in_params.buffer_address == 0 || in_params.buffer_size == 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -129,15 +129,15 @@ void EffectI3dl2Reverb::UpdateForCommandGeneration() {
|
|
|
|
GetParams().status = ParameterStatus::Updated;
|
|
|
|
GetParams().status = ParameterStatus::Updated;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EffectBiquadFilter::EffectBiquadFilter() : EffectGeneric::EffectGeneric(EffectType::BiquadFilter) {}
|
|
|
|
EffectBiquadFilter::EffectBiquadFilter() : EffectGeneric(EffectType::BiquadFilter) {}
|
|
|
|
EffectBiquadFilter::~EffectBiquadFilter() = default;
|
|
|
|
EffectBiquadFilter::~EffectBiquadFilter() = default;
|
|
|
|
|
|
|
|
|
|
|
|
void EffectBiquadFilter::Update(EffectInfo::InParams& in_params) {
|
|
|
|
void EffectBiquadFilter::Update(EffectInfo::InParams& in_params) {
|
|
|
|
auto& internal_params = GetParams();
|
|
|
|
auto& params = GetParams();
|
|
|
|
const auto* biquad_params = reinterpret_cast<BiquadFilterParams*>(in_params.raw.data());
|
|
|
|
const auto* biquad_params = reinterpret_cast<BiquadFilterParams*>(in_params.raw.data());
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
internal_params = *biquad_params;
|
|
|
|
params = *biquad_params;
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -150,7 +150,7 @@ void EffectBiquadFilter::UpdateForCommandGeneration() {
|
|
|
|
GetParams().status = ParameterStatus::Updated;
|
|
|
|
GetParams().status = ParameterStatus::Updated;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EffectAuxInfo::EffectAuxInfo() : EffectGeneric::EffectGeneric(EffectType::Aux) {}
|
|
|
|
EffectAuxInfo::EffectAuxInfo() : EffectGeneric(EffectType::Aux) {}
|
|
|
|
EffectAuxInfo::~EffectAuxInfo() = default;
|
|
|
|
EffectAuxInfo::~EffectAuxInfo() = default;
|
|
|
|
|
|
|
|
|
|
|
|
void EffectAuxInfo::Update(EffectInfo::InParams& in_params) {
|
|
|
|
void EffectAuxInfo::Update(EffectInfo::InParams& in_params) {
|
|
|
@ -200,32 +200,32 @@ VAddr EffectAuxInfo::GetRecvBuffer() const {
|
|
|
|
return recv_buffer;
|
|
|
|
return recv_buffer;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EffectDelay::EffectDelay() : EffectGeneric::EffectGeneric(EffectType::Delay) {}
|
|
|
|
EffectDelay::EffectDelay() : EffectGeneric(EffectType::Delay) {}
|
|
|
|
EffectDelay::~EffectDelay() = default;
|
|
|
|
EffectDelay::~EffectDelay() = default;
|
|
|
|
|
|
|
|
|
|
|
|
void EffectDelay::Update(EffectInfo::InParams& in_params) {
|
|
|
|
void EffectDelay::Update(EffectInfo::InParams& in_params) {
|
|
|
|
const auto* delay_params = reinterpret_cast<DelayParams*>(in_params.raw.data());
|
|
|
|
const auto* delay_params = reinterpret_cast<DelayParams*>(in_params.raw.data());
|
|
|
|
auto& internal_params = GetParams();
|
|
|
|
auto& params = GetParams();
|
|
|
|
if (!ValidChannelCountForEffect(delay_params->max_channels)) {
|
|
|
|
if (!ValidChannelCountForEffect(delay_params->max_channels)) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const auto last_status = internal_params.status;
|
|
|
|
const auto last_status = params.status;
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
internal_params = *delay_params;
|
|
|
|
params = *delay_params;
|
|
|
|
if (!ValidChannelCountForEffect(delay_params->channels)) {
|
|
|
|
if (!ValidChannelCountForEffect(delay_params->channels)) {
|
|
|
|
internal_params.channels = internal_params.max_channels;
|
|
|
|
params.channels = params.max_channels;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
|
|
|
|
|
|
|
|
if (last_status != ParameterStatus::Updated) {
|
|
|
|
if (last_status != ParameterStatus::Updated) {
|
|
|
|
internal_params.status = last_status;
|
|
|
|
params.status = last_status;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (in_params.is_new || skipped) {
|
|
|
|
if (in_params.is_new || skipped) {
|
|
|
|
usage = UsageState::Initialized;
|
|
|
|
usage = UsageState::Initialized;
|
|
|
|
internal_params.status = ParameterStatus::Initialized;
|
|
|
|
params.status = ParameterStatus::Initialized;
|
|
|
|
skipped = in_params.buffer_address == 0 || in_params.buffer_size == 0;
|
|
|
|
skipped = in_params.buffer_address == 0 || in_params.buffer_size == 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -239,7 +239,7 @@ void EffectDelay::UpdateForCommandGeneration() {
|
|
|
|
GetParams().status = ParameterStatus::Updated;
|
|
|
|
GetParams().status = ParameterStatus::Updated;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EffectBufferMixer::EffectBufferMixer() : EffectGeneric::EffectGeneric(EffectType::BufferMixer) {}
|
|
|
|
EffectBufferMixer::EffectBufferMixer() : EffectGeneric(EffectType::BufferMixer) {}
|
|
|
|
EffectBufferMixer::~EffectBufferMixer() = default;
|
|
|
|
EffectBufferMixer::~EffectBufferMixer() = default;
|
|
|
|
|
|
|
|
|
|
|
|
void EffectBufferMixer::Update(EffectInfo::InParams& in_params) {
|
|
|
|
void EffectBufferMixer::Update(EffectInfo::InParams& in_params) {
|
|
|
@ -257,32 +257,32 @@ void EffectBufferMixer::UpdateForCommandGeneration() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EffectReverb::EffectReverb() : EffectGeneric::EffectGeneric(EffectType::Reverb) {}
|
|
|
|
EffectReverb::EffectReverb() : EffectGeneric(EffectType::Reverb) {}
|
|
|
|
EffectReverb::~EffectReverb() = default;
|
|
|
|
EffectReverb::~EffectReverb() = default;
|
|
|
|
|
|
|
|
|
|
|
|
void EffectReverb::Update(EffectInfo::InParams& in_params) {
|
|
|
|
void EffectReverb::Update(EffectInfo::InParams& in_params) {
|
|
|
|
const auto* reverb_params = reinterpret_cast<ReverbParams*>(in_params.raw.data());
|
|
|
|
const auto* reverb_params = reinterpret_cast<ReverbParams*>(in_params.raw.data());
|
|
|
|
auto& internal_params = GetParams();
|
|
|
|
auto& params = GetParams();
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->max_channels)) {
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->max_channels)) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const auto last_status = internal_params.status;
|
|
|
|
const auto last_status = params.status;
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
mix_id = in_params.mix_id;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
processing_order = in_params.processing_order;
|
|
|
|
internal_params = *reverb_params;
|
|
|
|
params = *reverb_params;
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->channels)) {
|
|
|
|
if (!ValidChannelCountForEffect(reverb_params->channels)) {
|
|
|
|
internal_params.channels = internal_params.max_channels;
|
|
|
|
params.channels = params.max_channels;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
enabled = in_params.is_enabled;
|
|
|
|
|
|
|
|
|
|
|
|
if (last_status != ParameterStatus::Updated) {
|
|
|
|
if (last_status != ParameterStatus::Updated) {
|
|
|
|
internal_params.status = last_status;
|
|
|
|
params.status = last_status;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (in_params.is_new || skipped) {
|
|
|
|
if (in_params.is_new || skipped) {
|
|
|
|
usage = UsageState::Initialized;
|
|
|
|
usage = UsageState::Initialized;
|
|
|
|
internal_params.status = ParameterStatus::Initialized;
|
|
|
|
params.status = ParameterStatus::Initialized;
|
|
|
|
skipped = in_params.buffer_address == 0 || in_params.buffer_size == 0;
|
|
|
|
skipped = in_params.buffer_address == 0 || in_params.buffer_size == 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|