Remove default constructor for Vst3PluginInstance

Seems weird to need this specifically so we can use the map overload
that creates a new instance when the key doesn't exist in the map. This
seems safer.
This commit is contained in:
Robbert van der Helm
2021-07-05 14:35:44 +02:00
parent e25231c2d2
commit 4c24baa3d2
2 changed files with 149 additions and 149 deletions
+141 -139
View File
@@ -48,8 +48,6 @@ Vst3PlugViewInterfaces::Vst3PlugViewInterfaces(
parameter_finder(plug_view), parameter_finder(plug_view),
plug_view_content_scale_support(plug_view) {} plug_view_content_scale_support(plug_view) {}
Vst3PluginInstance::Vst3PluginInstance() noexcept {}
Vst3PluginInstance::Vst3PluginInstance( Vst3PluginInstance::Vst3PluginInstance(
Steinberg::IPtr<Steinberg::FUnknown> object) noexcept Steinberg::IPtr<Steinberg::FUnknown> object) noexcept
: object(object), : object(object),
@@ -141,9 +139,9 @@ void Vst3Bridge::run() {
// drop it here as well, along with the `IPlugFrame` // drop it here as well, along with the `IPlugFrame`
// proxy object it may have received in // proxy object it may have received in
// `IPlugView::setFrame()`. // `IPlugView::setFrame()`.
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.plug_view_instance.reset(); .plug_view_instance.reset();
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.plug_frame_proxy.reset(); .plug_frame_proxy.reset();
}) })
.wait(); .wait();
@@ -214,7 +212,7 @@ void Vst3Bridge::run() {
// interfaces are supported by this object so we can create // interfaces are supported by this object so we can create
// a one-to-one proxy of it. // a one-to-one proxy of it.
return Vst3PluginProxy::ConstructArgs( return Vst3PluginProxy::ConstructArgs(
object_instances[instance_id].object, instance_id); object_instances.at(instance_id).object, instance_id);
}, },
[&](const Vst3PluginProxy::Destruct& request) [&](const Vst3PluginProxy::Destruct& request)
-> Vst3PluginProxy::Destruct::Response { -> Vst3PluginProxy::Destruct::Response {
@@ -231,11 +229,11 @@ void Vst3Bridge::run() {
// This same function is defined in both `IComponent` and // This same function is defined in both `IComponent` and
// `IEditController`, so the host is calling one or the // `IEditController`, so the host is calling one or the
// other // other
if (object_instances[request.instance_id].component) { if (object_instances.at(request.instance_id).component) {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.component->setState(&request.state); .component->setState(&request.state);
} else { } else {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->setState(&request.state); .edit_controller->setState(&request.state);
} }
}); });
@@ -251,11 +249,12 @@ void Vst3Bridge::run() {
// This same function is defined in both `IComponent` // This same function is defined in both `IComponent`
// and `IEditController`, so the host is calling one or // and `IEditController`, so the host is calling one or
// the other // the other
if (object_instances[request.instance_id].component) { if (object_instances.at(request.instance_id)
return object_instances[request.instance_id] .component) {
return object_instances.at(request.instance_id)
.component->getState(&request.state); .component->getState(&request.state);
} else { } else {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->getState(&request.state); .edit_controller->getState(&request.state);
} }
}); });
@@ -264,10 +263,10 @@ void Vst3Bridge::run() {
.result = result, .state = std::move(request.state)}; .result = result, .state = std::move(request.state)};
}, },
[&](YaAudioPresentationLatency::SetAudioPresentationLatencySamples& [&](YaAudioPresentationLatency::SetAudioPresentationLatencySamples&
request) request) -> YaAudioPresentationLatency::
-> YaAudioPresentationLatency::
SetAudioPresentationLatencySamples::Response { SetAudioPresentationLatencySamples::Response {
return object_instances[request.instance_id] return object_instances
.at(request.instance_id)
.audio_presentation_latency .audio_presentation_latency
->setAudioPresentationLatencySamples( ->setAudioPresentationLatencySamples(
request.dir, request.bus_index, request.dir, request.bus_index,
@@ -275,7 +274,7 @@ void Vst3Bridge::run() {
}, },
[&](YaAutomationState::SetAutomationState& request) [&](YaAutomationState::SetAutomationState& request)
-> YaAutomationState::SetAutomationState::Response { -> YaAutomationState::SetAutomationState::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.automation_state->setAutomationState(request.state); .automation_state->setAutomationState(request.state);
}, },
[&](YaConnectionPoint::Connect& request) [&](YaConnectionPoint::Connect& request)
@@ -293,21 +292,21 @@ void Vst3Bridge::run() {
return std::visit( return std::visit(
overload{ overload{
[&](const native_size_t& other_instance_id) -> tresult { [&](const native_size_t& other_instance_id) -> tresult {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.connection_point->connect( .connection_point->connect(
object_instances[other_instance_id] object_instances.at(other_instance_id)
.connection_point); .connection_point);
}, },
[&](Vst3ConnectionPointProxy::ConstructArgs& args) [&](Vst3ConnectionPointProxy::ConstructArgs& args)
-> tresult { -> tresult {
object_instances[request.instance_id] object_instances.at(request.instance_id)
.connection_point_proxy = Steinberg::owned( .connection_point_proxy = Steinberg::owned(
new Vst3ConnectionPointProxyImpl( new Vst3ConnectionPointProxyImpl(
*this, std::move(args))); *this, std::move(args)));
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.connection_point->connect( .connection_point->connect(
object_instances[request.instance_id] object_instances.at(request.instance_id)
.connection_point_proxy); .connection_point_proxy);
}}, }},
request.other); request.other);
@@ -318,17 +317,17 @@ void Vst3Bridge::run() {
// them directly. Otherwise we'll disconnect them from our proxy // them directly. Otherwise we'll disconnect them from our proxy
// object and then destroy that proxy object. // object and then destroy that proxy object.
if (request.other_instance_id) { if (request.other_instance_id) {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.connection_point->disconnect( .connection_point->disconnect(
object_instances[*request.other_instance_id] object_instances.at(*request.other_instance_id)
.connection_point); .connection_point);
} else { } else {
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.connection_point->disconnect( .connection_point->disconnect(
object_instances[*request.other_instance_id] object_instances.at(*request.other_instance_id)
.connection_point_proxy); .connection_point_proxy);
object_instances[*request.other_instance_id] object_instances.at(*request.other_instance_id)
.connection_point_proxy.reset(); .connection_point_proxy.reset();
return result; return result;
@@ -352,14 +351,14 @@ void Vst3Bridge::run() {
// solution for this (and bypassing Ardour's connection // solution for this (and bypassing Ardour's connection
// proxies sort of goes against the idea behind yabridge) // proxies sort of goes against the idea behind yabridge)
return do_mutual_recursion_on_gui_thread([&]() -> tresult { return do_mutual_recursion_on_gui_thread([&]() -> tresult {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.connection_point->notify( .connection_point->notify(
request.message_ptr.get_original()); request.message_ptr.get_original());
}); });
}, },
[&](YaContextMenuTarget::ExecuteMenuItem& request) [&](YaContextMenuTarget::ExecuteMenuItem& request)
-> YaContextMenuTarget::ExecuteMenuItem::Response { -> YaContextMenuTarget::ExecuteMenuItem::Response {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.registered_context_menus.at(request.context_menu_id) .registered_context_menus.at(request.context_menu_id)
.get() .get()
.context_menu_targets[request.target_tag] .context_menu_targets[request.target_tag]
@@ -367,18 +366,18 @@ void Vst3Bridge::run() {
}, },
[&](YaEditController::SetComponentState& request) [&](YaEditController::SetComponentState& request)
-> YaEditController::SetComponentState::Response { -> YaEditController::SetComponentState::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->setComponentState(&request.state); .edit_controller->setComponentState(&request.state);
}, },
[&](const YaEditController::GetParameterCount& request) [&](const YaEditController::GetParameterCount& request)
-> YaEditController::GetParameterCount::Response { -> YaEditController::GetParameterCount::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->getParameterCount(); .edit_controller->getParameterCount();
}, },
[&](YaEditController::GetParameterInfo& request) [&](YaEditController::GetParameterInfo& request)
-> YaEditController::GetParameterInfo::Response { -> YaEditController::GetParameterInfo::Response {
Steinberg::Vst::ParameterInfo info{}; Steinberg::Vst::ParameterInfo info{};
const tresult result = object_instances[request.instance_id] const tresult result = object_instances.at(request.instance_id)
.edit_controller->getParameterInfo( .edit_controller->getParameterInfo(
request.param_index, info); request.param_index, info);
@@ -389,7 +388,7 @@ void Vst3Bridge::run() {
-> YaEditController::GetParamStringByValue::Response { -> YaEditController::GetParamStringByValue::Response {
Steinberg::Vst::String128 string{0}; Steinberg::Vst::String128 string{0};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.edit_controller->getParamStringByValue( .edit_controller->getParamStringByValue(
request.id, request.value_normalized, string); request.id, request.value_normalized, string);
@@ -401,7 +400,7 @@ void Vst3Bridge::run() {
-> YaEditController::GetParamValueByString::Response { -> YaEditController::GetParamValueByString::Response {
Steinberg::Vst::ParamValue value_normalized; Steinberg::Vst::ParamValue value_normalized;
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.edit_controller->getParamValueByString( .edit_controller->getParamValueByString(
request.id, request.id,
const_cast<Steinberg::Vst::TChar*>( const_cast<Steinberg::Vst::TChar*>(
@@ -413,19 +412,19 @@ void Vst3Bridge::run() {
}, },
[&](const YaEditController::NormalizedParamToPlain& request) [&](const YaEditController::NormalizedParamToPlain& request)
-> YaEditController::NormalizedParamToPlain::Response { -> YaEditController::NormalizedParamToPlain::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->normalizedParamToPlain( .edit_controller->normalizedParamToPlain(
request.id, request.value_normalized); request.id, request.value_normalized);
}, },
[&](const YaEditController::PlainParamToNormalized& request) [&](const YaEditController::PlainParamToNormalized& request)
-> YaEditController::PlainParamToNormalized::Response { -> YaEditController::PlainParamToNormalized::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->plainParamToNormalized( .edit_controller->plainParamToNormalized(
request.id, request.plain_value); request.id, request.plain_value);
}, },
[&](const YaEditController::GetParamNormalized& request) [&](const YaEditController::GetParamNormalized& request)
-> YaEditController::GetParamNormalized::Response { -> YaEditController::GetParamNormalized::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->getParamNormalized(request.id); .edit_controller->getParamNormalized(request.id);
}, },
[&](const YaEditController::SetParamNormalized& request) [&](const YaEditController::SetParamNormalized& request)
@@ -436,7 +435,7 @@ void Vst3Bridge::run() {
// relay the parameter change the plugin has just // relay the parameter change the plugin has just
// announced. // announced.
return do_mutual_recursion_on_off_thread([&]() -> tresult { return do_mutual_recursion_on_off_thread([&]() -> tresult {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->setParamNormalized(request.id, .edit_controller->setParamNormalized(request.id,
request.value); request.value);
}); });
@@ -449,16 +448,17 @@ void Vst3Bridge::run() {
// tied to that of the actual plugin object we're proxying for. // tied to that of the actual plugin object we're proxying for.
// Otherwise we'll also pass a null pointer. This often happens // Otherwise we'll also pass a null pointer. This often happens
// just before the host terminates the plugin. // just before the host terminates the plugin.
object_instances[request.instance_id].component_handler_proxy = object_instances.at(request.instance_id)
.component_handler_proxy =
request.component_handler_proxy_args request.component_handler_proxy_args
? Steinberg::owned(new Vst3ComponentHandlerProxyImpl( ? Steinberg::owned(new Vst3ComponentHandlerProxyImpl(
*this, *this,
std::move(*request.component_handler_proxy_args))) std::move(*request.component_handler_proxy_args)))
: nullptr; : nullptr;
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller->setComponentHandler( .edit_controller->setComponentHandler(
object_instances[request.instance_id] object_instances.at(request.instance_id)
.component_handler_proxy); .component_handler_proxy);
}, },
[&](const YaEditController::CreateView& request) [&](const YaEditController::CreateView& request)
@@ -466,9 +466,9 @@ void Vst3Bridge::run() {
// Instantiate the object from the GUI thread // Instantiate the object from the GUI thread
main_context main_context
.run_in_context([&]() -> void { .run_in_context([&]() -> void {
object_instances[request.instance_id] object_instances.at(request.instance_id)
.plug_view_instance.emplace(Steinberg::owned( .plug_view_instance.emplace(Steinberg::owned(
object_instances[request.instance_id] object_instances.at(request.instance_id)
.edit_controller->createView( .edit_controller->createView(
request.name.c_str()))); request.name.c_str())));
}) })
@@ -478,39 +478,39 @@ void Vst3Bridge::run() {
// `IPlugView` object // `IPlugView` object
return YaEditController::CreateViewResponse{ return YaEditController::CreateViewResponse{
.plug_view_args = .plug_view_args =
(object_instances[request.instance_id] (object_instances.at(request.instance_id)
.plug_view_instance .plug_view_instance
? std::make_optional< ? std::make_optional<
Vst3PlugViewProxy::ConstructArgs>( Vst3PlugViewProxy::ConstructArgs>(
object_instances[request.instance_id] object_instances.at(request.instance_id)
.plug_view_instance->plug_view, .plug_view_instance->plug_view,
request.instance_id) request.instance_id)
: std::nullopt)}; : std::nullopt)};
}, },
[&](const YaEditController2::SetKnobMode& request) [&](const YaEditController2::SetKnobMode& request)
-> YaEditController2::SetKnobMode::Response { -> YaEditController2::SetKnobMode::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller_2->setKnobMode(request.mode); .edit_controller_2->setKnobMode(request.mode);
}, },
[&](const YaEditController2::OpenHelp& request) [&](const YaEditController2::OpenHelp& request)
-> YaEditController2::OpenHelp::Response { -> YaEditController2::OpenHelp::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller_2->openHelp(request.only_check); .edit_controller_2->openHelp(request.only_check);
}, },
[&](const YaEditController2::OpenAboutBox& request) [&](const YaEditController2::OpenAboutBox& request)
-> YaEditController2::OpenAboutBox::Response { -> YaEditController2::OpenAboutBox::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller_2->openAboutBox(request.only_check); .edit_controller_2->openAboutBox(request.only_check);
}, },
[&](const YaEditControllerHostEditing::BeginEditFromHost& request) [&](const YaEditControllerHostEditing::BeginEditFromHost& request)
-> YaEditControllerHostEditing::BeginEditFromHost::Response { -> YaEditControllerHostEditing::BeginEditFromHost::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller_host_editing->beginEditFromHost( .edit_controller_host_editing->beginEditFromHost(
request.param_id); request.param_id);
}, },
[&](const YaEditControllerHostEditing::EndEditFromHost& request) [&](const YaEditControllerHostEditing::EndEditFromHost& request)
-> YaEditControllerHostEditing::EndEditFromHost::Response { -> YaEditControllerHostEditing::EndEditFromHost::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.edit_controller_host_editing->endEditFromHost( .edit_controller_host_editing->endEditFromHost(
request.param_id); request.param_id);
}, },
@@ -521,7 +521,7 @@ void Vst3Bridge::run() {
// main thread // main thread
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.info_listener->setChannelContextInfos( .info_listener->setChannelContextInfos(
&request.list); &request.list);
}) })
@@ -529,7 +529,7 @@ void Vst3Bridge::run() {
}, },
[&](const YaKeyswitchController::GetKeyswitchCount& request) [&](const YaKeyswitchController::GetKeyswitchCount& request)
-> YaKeyswitchController::GetKeyswitchCount::Response { -> YaKeyswitchController::GetKeyswitchCount::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.keyswitch_controller->getKeyswitchCount(request.bus_index, .keyswitch_controller->getKeyswitchCount(request.bus_index,
request.channel); request.channel);
}, },
@@ -537,7 +537,7 @@ void Vst3Bridge::run() {
-> YaKeyswitchController::GetKeyswitchInfo::Response { -> YaKeyswitchController::GetKeyswitchInfo::Response {
Steinberg::Vst::KeyswitchInfo info{}; Steinberg::Vst::KeyswitchInfo info{};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.keyswitch_controller->getKeyswitchInfo( .keyswitch_controller->getKeyswitchInfo(
request.bus_index, request.channel, request.bus_index, request.channel,
request.key_switch_index, info); request.key_switch_index, info);
@@ -547,7 +547,7 @@ void Vst3Bridge::run() {
}, },
[&](const YaMidiLearn::OnLiveMIDIControllerInput& request) [&](const YaMidiLearn::OnLiveMIDIControllerInput& request)
-> YaMidiLearn::OnLiveMIDIControllerInput::Response { -> YaMidiLearn::OnLiveMIDIControllerInput::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.midi_learn->onLiveMIDIControllerInput( .midi_learn->onLiveMIDIControllerInput(
request.bus_index, request.channel, request.midi_cc); request.bus_index, request.channel, request.midi_cc);
}, },
@@ -555,7 +555,7 @@ void Vst3Bridge::run() {
-> YaMidiMapping::GetMidiControllerAssignment::Response { -> YaMidiMapping::GetMidiControllerAssignment::Response {
Steinberg::Vst::ParamID id; Steinberg::Vst::ParamID id;
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.midi_mapping->getMidiControllerAssignment( .midi_mapping->getMidiControllerAssignment(
request.bus_index, request.channel, request.bus_index, request.channel,
request.midi_controller_number, id); request.midi_controller_number, id);
@@ -567,7 +567,7 @@ void Vst3Bridge::run() {
request) request)
-> YaNoteExpressionController::GetNoteExpressionCount:: -> YaNoteExpressionController::GetNoteExpressionCount::
Response { Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.note_expression_controller->getNoteExpressionCount( .note_expression_controller->getNoteExpressionCount(
request.bus_index, request.channel); request.bus_index, request.channel);
}, },
@@ -576,7 +576,7 @@ void Vst3Bridge::run() {
-> YaNoteExpressionController::GetNoteExpressionInfo::Response { -> YaNoteExpressionController::GetNoteExpressionInfo::Response {
Steinberg::Vst::NoteExpressionTypeInfo info{}; Steinberg::Vst::NoteExpressionTypeInfo info{};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.note_expression_controller->getNoteExpressionInfo( .note_expression_controller->getNoteExpressionInfo(
request.bus_index, request.channel, request.bus_index, request.channel,
request.note_expression_index, info); request.note_expression_index, info);
@@ -591,7 +591,7 @@ void Vst3Bridge::run() {
Response { Response {
Steinberg::Vst::String128 string{0}; Steinberg::Vst::String128 string{0};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.note_expression_controller .note_expression_controller
->getNoteExpressionStringByValue( ->getNoteExpressionStringByValue(
request.bus_index, request.channel, request.bus_index, request.channel,
@@ -609,7 +609,7 @@ void Vst3Bridge::run() {
Response { Response {
Steinberg::Vst::NoteExpressionValue value_normalized; Steinberg::Vst::NoteExpressionValue value_normalized;
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.note_expression_controller .note_expression_controller
->getNoteExpressionValueByString( ->getNoteExpressionValueByString(
request.bus_index, request.channel, request.bus_index, request.channel,
@@ -629,7 +629,7 @@ void Vst3Bridge::run() {
Steinberg::Vst::PhysicalUIMapList reconstructed_list = Steinberg::Vst::PhysicalUIMapList reconstructed_list =
request.list.get(); request.list.get();
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.note_expression_physical_ui_mapping .note_expression_physical_ui_mapping
->getPhysicalUIMapping(request.bus_index, ->getPhysicalUIMapping(request.bus_index,
request.channel, request.channel,
@@ -644,7 +644,7 @@ void Vst3Bridge::run() {
-> YaParameterFinder::FindParameter::Response { -> YaParameterFinder::FindParameter::Response {
Steinberg::Vst::ParamID result_tag; Steinberg::Vst::ParamID result_tag;
const tresult result = const tresult result =
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.plug_view_instance->parameter_finder->findParameter( .plug_view_instance->parameter_finder->findParameter(
request.x_pos, request.y_pos, result_tag); request.x_pos, request.y_pos, result_tag);
@@ -656,7 +656,8 @@ void Vst3Bridge::run() {
GetParameterIDFromFunctionName::Response { GetParameterIDFromFunctionName::Response {
Steinberg::Vst::ParamID param_id; Steinberg::Vst::ParamID param_id;
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances
.at(request.instance_id)
.parameter_function_name .parameter_function_name
->getParameterIDFromFunctionName( ->getParameterIDFromFunctionName(
request.unit_id, request.unit_id,
@@ -678,7 +679,7 @@ void Vst3Bridge::run() {
? Steinberg::kPlatformTypeHWND ? Steinberg::kPlatformTypeHWND
: request.type; : request.type;
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->isPlatformTypeSupported( .plug_view_instance->plug_view->isPlatformTypeSupported(
type.c_str()); type.c_str());
}, },
@@ -698,11 +699,11 @@ void Vst3Bridge::run() {
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
Editor& editor_instance = Editor& editor_instance =
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.editor.emplace(main_context, config, .editor.emplace(main_context, config,
x11_handle); x11_handle);
const tresult result = const tresult result =
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->attached( .plug_view_instance->plug_view->attached(
editor_instance.get_win32_handle(), editor_instance.get_win32_handle(),
type.c_str()); type.c_str());
@@ -710,7 +711,7 @@ void Vst3Bridge::run() {
// Get rid of the editor again if the plugin didn't // Get rid of the editor again if the plugin didn't
// embed itself in it // embed itself in it
if (result != Steinberg::kResultOk) { if (result != Steinberg::kResultOk) {
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.editor.reset(); .editor.reset();
} }
@@ -724,9 +725,9 @@ void Vst3Bridge::run() {
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
// Cleanup is handled through RAII // Cleanup is handled through RAII
const tresult result = const tresult result =
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->removed(); .plug_view_instance->plug_view->removed();
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.editor.reset(); .editor.reset();
return result; return result;
@@ -739,7 +740,7 @@ void Vst3Bridge::run() {
// redraw, they all have to be called from the UI thread // redraw, they all have to be called from the UI thread
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->onWheel( .plug_view_instance->plug_view->onWheel(
request.distance); request.distance);
}) })
@@ -749,7 +750,7 @@ void Vst3Bridge::run() {
-> YaPlugView::OnKeyDown::Response { -> YaPlugView::OnKeyDown::Response {
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->onKeyDown( .plug_view_instance->plug_view->onKeyDown(
request.key, request.key_code, request.key, request.key_code,
request.modifiers); request.modifiers);
@@ -760,7 +761,7 @@ void Vst3Bridge::run() {
-> YaPlugView::OnKeyUp::Response { -> YaPlugView::OnKeyUp::Response {
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->onKeyUp( .plug_view_instance->plug_view->onKeyUp(
request.key, request.key_code, request.key, request.key_code,
request.modifiers); request.modifiers);
@@ -773,7 +774,7 @@ void Vst3Bridge::run() {
Steinberg::ViewRect size{}; Steinberg::ViewRect size{};
const tresult result = const tresult result =
do_mutual_recursion_on_gui_thread([&]() -> tresult { do_mutual_recursion_on_gui_thread([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->getSize(&size); .plug_view_instance->plug_view->getSize(&size);
}); });
@@ -791,7 +792,7 @@ void Vst3Bridge::run() {
// response to the message it sent. See the docstring of // response to the message it sent. See the docstring of
// this function for more information on how this works. // this function for more information on how this works.
return do_mutual_recursion_on_gui_thread([&]() -> tresult { return do_mutual_recursion_on_gui_thread([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->onSize( .plug_view_instance->plug_view->onSize(
&request.new_size); &request.new_size);
}); });
@@ -800,7 +801,7 @@ void Vst3Bridge::run() {
-> YaPlugView::OnFocus::Response { -> YaPlugView::OnFocus::Response {
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->onFocus( .plug_view_instance->plug_view->onFocus(
request.state); request.state);
}) })
@@ -815,7 +816,8 @@ void Vst3Bridge::run() {
// proxy to. IF the host passed a null pointer (which seems to // proxy to. IF the host passed a null pointer (which seems to
// be common when terminating plugins) we'll do the same thing // be common when terminating plugins) we'll do the same thing
// here. // here.
object_instances[request.owner_instance_id].plug_frame_proxy = object_instances.at(request.owner_instance_id)
.plug_frame_proxy =
request.plug_frame_args request.plug_frame_args
? Steinberg::owned(new Vst3PlugFrameProxyImpl( ? Steinberg::owned(new Vst3PlugFrameProxyImpl(
*this, std::move(*request.plug_frame_args))) *this, std::move(*request.plug_frame_args)))
@@ -826,9 +828,9 @@ void Vst3Bridge::run() {
// here anyways // here anyways
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->setFrame( .plug_view_instance->plug_view->setFrame(
object_instances[request.owner_instance_id] object_instances.at(request.owner_instance_id)
.plug_frame_proxy); .plug_frame_proxy);
}) })
.get(); .get();
@@ -838,7 +840,7 @@ void Vst3Bridge::run() {
// To prevent weird behaviour we'll perform all size related // To prevent weird behaviour we'll perform all size related
// functions from the GUI thread, including this one // functions from the GUI thread, including this one
return do_mutual_recursion_on_gui_thread([&]() -> tresult { return do_mutual_recursion_on_gui_thread([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->canResize(); .plug_view_instance->plug_view->canResize();
}); });
}, },
@@ -846,7 +848,7 @@ void Vst3Bridge::run() {
-> YaPlugView::CheckSizeConstraint::Response { -> YaPlugView::CheckSizeConstraint::Response {
const tresult result = const tresult result =
do_mutual_recursion_on_gui_thread([&]() -> tresult { do_mutual_recursion_on_gui_thread([&]() -> tresult {
return object_instances[request.owner_instance_id] return object_instances.at(request.owner_instance_id)
.plug_view_instance->plug_view->checkSizeConstraint( .plug_view_instance->plug_view->checkSizeConstraint(
&request.rect); &request.rect);
}); });
@@ -869,11 +871,10 @@ void Vst3Bridge::run() {
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances return object_instances
[request.owner_instance_id] .at(request.owner_instance_id)
.plug_view_instance .plug_view_instance
->plug_view_content_scale_support ->plug_view_content_scale_support
->setContentScaleFactor( ->setContentScaleFactor(request.factor);
request.factor);
}) })
.get(); .get();
} }
@@ -884,7 +885,7 @@ void Vst3Bridge::run() {
// the host and pass that to the initialize function. The // the host and pass that to the initialize function. The
// lifetime of this object is tied to that of the actual plugin // lifetime of this object is tied to that of the actual plugin
// object we're proxying for. // object we're proxying for.
object_instances[request.instance_id].host_context_proxy = object_instances.at(request.instance_id).host_context_proxy =
Steinberg::owned(new Vst3HostContextProxyImpl( Steinberg::owned(new Vst3HostContextProxyImpl(
*this, std::move(request.host_context_args))); *this, std::move(request.host_context_args)));
@@ -898,18 +899,18 @@ void Vst3Bridge::run() {
set_realtime_priority(true); set_realtime_priority(true);
// This static cast is required to upcast to `FUnknown*` // This static cast is required to upcast to `FUnknown*`
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.plugin_base->initialize( .plugin_base->initialize(
static_cast<YaHostApplication*>( static_cast<YaHostApplication*>(
object_instances[request.instance_id] object_instances.at(request.instance_id)
.host_context_proxy)); .host_context_proxy));
set_realtime_priority(false); set_realtime_priority(false);
// The Win32 message loop will not be run up to this // The Win32 message loop will not be run up to this
// point to prevent plugins with partially initialized // point to prevent plugins with partially initialized
// states from misbehaving // states from misbehaving
object_instances[request.instance_id].is_initialized = object_instances.at(request.instance_id)
true; .is_initialized = true;
return result; return result;
}) })
@@ -919,28 +920,28 @@ void Vst3Bridge::run() {
-> YaPluginBase::Terminate::Response { -> YaPluginBase::Terminate::Response {
return main_context return main_context
.run_in_context([&]() -> tresult { .run_in_context([&]() -> tresult {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.plugin_base->terminate(); .plugin_base->terminate();
}) })
.get(); .get();
}, },
[&](const YaProgramListData::ProgramDataSupported& request) [&](const YaProgramListData::ProgramDataSupported& request)
-> YaProgramListData::ProgramDataSupported::Response { -> YaProgramListData::ProgramDataSupported::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.program_list_data->programDataSupported(request.list_id); .program_list_data->programDataSupported(request.list_id);
}, },
[&](const YaProcessContextRequirements:: [&](const YaProcessContextRequirements::
GetProcessContextRequirements& request) GetProcessContextRequirements& request)
-> YaProcessContextRequirements::GetProcessContextRequirements:: -> YaProcessContextRequirements::GetProcessContextRequirements::
Response { Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.process_context_requirements .process_context_requirements
->getProcessContextRequirements(); ->getProcessContextRequirements();
}, },
[&](YaProgramListData::GetProgramData& request) [&](YaProgramListData::GetProgramData& request)
-> YaProgramListData::GetProgramData::Response { -> YaProgramListData::GetProgramData::Response {
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.program_list_data->getProgramData( .program_list_data->getProgramData(
request.list_id, request.program_index, request.list_id, request.program_index,
&request.data); &request.data);
@@ -950,19 +951,19 @@ void Vst3Bridge::run() {
}, },
[&](YaProgramListData::SetProgramData& request) [&](YaProgramListData::SetProgramData& request)
-> YaProgramListData::SetProgramData::Response { -> YaProgramListData::SetProgramData::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.program_list_data->setProgramData( .program_list_data->setProgramData(
request.list_id, request.program_index, &request.data); request.list_id, request.program_index, &request.data);
}, },
[&](const YaUnitData::UnitDataSupported& request) [&](const YaUnitData::UnitDataSupported& request)
-> YaUnitData::UnitDataSupported::Response { -> YaUnitData::UnitDataSupported::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_data->unitDataSupported(request.unit_id); .unit_data->unitDataSupported(request.unit_id);
}, },
[&](YaUnitData::GetUnitData& request) [&](YaUnitData::GetUnitData& request)
-> YaUnitData::GetUnitData::Response { -> YaUnitData::GetUnitData::Response {
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.unit_data->getUnitData(request.unit_id, &request.data); .unit_data->getUnitData(request.unit_id, &request.data);
return YaUnitData::GetUnitDataResponse{ return YaUnitData::GetUnitDataResponse{
@@ -970,7 +971,7 @@ void Vst3Bridge::run() {
}, },
[&](YaUnitData::SetUnitData& request) [&](YaUnitData::SetUnitData& request)
-> YaUnitData::SetUnitData::Response { -> YaUnitData::SetUnitData::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_data->setUnitData(request.unit_id, &request.data); .unit_data->setUnitData(request.unit_id, &request.data);
}, },
[&](YaPluginFactory3::SetHostContext& request) [&](YaPluginFactory3::SetHostContext& request)
@@ -990,14 +991,14 @@ void Vst3Bridge::run() {
}, },
[&](const YaUnitInfo::GetUnitCount& request) [&](const YaUnitInfo::GetUnitCount& request)
-> YaUnitInfo::GetUnitCount::Response { -> YaUnitInfo::GetUnitCount::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_info->getUnitCount(); .unit_info->getUnitCount();
}, },
[&](const YaUnitInfo::GetUnitInfo& request) [&](const YaUnitInfo::GetUnitInfo& request)
-> YaUnitInfo::GetUnitInfo::Response { -> YaUnitInfo::GetUnitInfo::Response {
Steinberg::Vst::UnitInfo info{}; Steinberg::Vst::UnitInfo info{};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.unit_info->getUnitInfo(request.unit_index, info); .unit_info->getUnitInfo(request.unit_index, info);
return YaUnitInfo::GetUnitInfoResponse{.result = result, return YaUnitInfo::GetUnitInfoResponse{.result = result,
@@ -1005,13 +1006,13 @@ void Vst3Bridge::run() {
}, },
[&](const YaUnitInfo::GetProgramListCount& request) [&](const YaUnitInfo::GetProgramListCount& request)
-> YaUnitInfo::GetProgramListCount::Response { -> YaUnitInfo::GetProgramListCount::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_info->getProgramListCount(); .unit_info->getProgramListCount();
}, },
[&](const YaUnitInfo::GetProgramListInfo& request) [&](const YaUnitInfo::GetProgramListInfo& request)
-> YaUnitInfo::GetProgramListInfo::Response { -> YaUnitInfo::GetProgramListInfo::Response {
Steinberg::Vst::ProgramListInfo info{}; Steinberg::Vst::ProgramListInfo info{};
const tresult result = object_instances[request.instance_id] const tresult result = object_instances.at(request.instance_id)
.unit_info->getProgramListInfo( .unit_info->getProgramListInfo(
request.list_index, info); request.list_index, info);
@@ -1027,7 +1028,7 @@ void Vst3Bridge::run() {
// same thread when that happens. // same thread when that happens.
const tresult result = const tresult result =
do_mutual_recursion_on_off_thread([&]() -> tresult { do_mutual_recursion_on_off_thread([&]() -> tresult {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_info->getProgramName( .unit_info->getProgramName(
request.list_id, request.program_index, name); request.list_id, request.program_index, name);
}); });
@@ -1039,7 +1040,7 @@ void Vst3Bridge::run() {
-> YaUnitInfo::GetProgramInfo::Response { -> YaUnitInfo::GetProgramInfo::Response {
Steinberg::Vst::String128 attribute_value{0}; Steinberg::Vst::String128 attribute_value{0};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.unit_info->getProgramInfo( .unit_info->getProgramInfo(
request.list_id, request.program_index, request.list_id, request.program_index,
request.attribute_id.c_str(), attribute_value); request.attribute_id.c_str(), attribute_value);
@@ -1051,7 +1052,7 @@ void Vst3Bridge::run() {
}, },
[&](const YaUnitInfo::HasProgramPitchNames& request) [&](const YaUnitInfo::HasProgramPitchNames& request)
-> YaUnitInfo::HasProgramPitchNames::Response { -> YaUnitInfo::HasProgramPitchNames::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_info->hasProgramPitchNames(request.list_id, .unit_info->hasProgramPitchNames(request.list_id,
request.program_index); request.program_index);
}, },
@@ -1059,7 +1060,7 @@ void Vst3Bridge::run() {
-> YaUnitInfo::GetProgramPitchName::Response { -> YaUnitInfo::GetProgramPitchName::Response {
Steinberg::Vst::String128 name{0}; Steinberg::Vst::String128 name{0};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.unit_info->getProgramPitchName( .unit_info->getProgramPitchName(
request.list_id, request.program_index, request.list_id, request.program_index,
request.midi_pitch, name); request.midi_pitch, name);
@@ -1069,19 +1070,19 @@ void Vst3Bridge::run() {
}, },
[&](const YaUnitInfo::GetSelectedUnit& request) [&](const YaUnitInfo::GetSelectedUnit& request)
-> YaUnitInfo::GetSelectedUnit::Response { -> YaUnitInfo::GetSelectedUnit::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_info->getSelectedUnit(); .unit_info->getSelectedUnit();
}, },
[&](const YaUnitInfo::SelectUnit& request) [&](const YaUnitInfo::SelectUnit& request)
-> YaUnitInfo::SelectUnit::Response { -> YaUnitInfo::SelectUnit::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_info->selectUnit(request.unit_id); .unit_info->selectUnit(request.unit_id);
}, },
[&](const YaUnitInfo::GetUnitByBus& request) [&](const YaUnitInfo::GetUnitByBus& request)
-> YaUnitInfo::GetUnitByBus::Response { -> YaUnitInfo::GetUnitByBus::Response {
Steinberg::Vst::UnitID unit_id; Steinberg::Vst::UnitID unit_id;
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.unit_info->getUnitByBus(request.type, request.dir, .unit_info->getUnitByBus(request.type, request.dir,
request.bus_index, request.bus_index,
request.channel, unit_id); request.channel, unit_id);
@@ -1091,7 +1092,7 @@ void Vst3Bridge::run() {
}, },
[&](YaUnitInfo::SetUnitProgramData& request) [&](YaUnitInfo::SetUnitProgramData& request)
-> YaUnitInfo::SetUnitProgramData::Response { -> YaUnitInfo::SetUnitProgramData::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.unit_info->setUnitProgramData(request.list_or_unit_id, .unit_info->setUnitProgramData(request.list_or_unit_id,
request.program_index, request.program_index,
&request.data); &request.data);
@@ -1100,7 +1101,8 @@ void Vst3Bridge::run() {
request) -> YaXmlRepresentationController:: request) -> YaXmlRepresentationController::
GetXmlRepresentationStream::Response { GetXmlRepresentationStream::Response {
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances
.at(request.instance_id)
.xml_representation_controller .xml_representation_controller
->getXmlRepresentationStream( ->getXmlRepresentationStream(
request.info, &request.stream); request.info, &request.stream);
@@ -1129,10 +1131,10 @@ void Vst3Bridge::close_sockets() {
} }
void Vst3Bridge::register_context_menu(Vst3ContextMenuProxyImpl& context_menu) { void Vst3Bridge::register_context_menu(Vst3ContextMenuProxyImpl& context_menu) {
std::lock_guard lock(object_instances[context_menu.owner_instance_id()] std::lock_guard lock(object_instances.at(context_menu.owner_instance_id())
.registered_context_menus_mutex); .registered_context_menus_mutex);
object_instances[context_menu.owner_instance_id()] object_instances.at(context_menu.owner_instance_id())
.registered_context_menus.emplace( .registered_context_menus.emplace(
context_menu.context_menu_id(), context_menu.context_menu_id(),
std::ref<Vst3ContextMenuProxyImpl>(context_menu)); std::ref<Vst3ContextMenuProxyImpl>(context_menu));
@@ -1141,10 +1143,10 @@ void Vst3Bridge::register_context_menu(Vst3ContextMenuProxyImpl& context_menu) {
void Vst3Bridge::unregister_context_menu(size_t object_instance_id, void Vst3Bridge::unregister_context_menu(size_t object_instance_id,
size_t context_menu_id) { size_t context_menu_id) {
std::lock_guard lock( std::lock_guard lock(
object_instances[object_instance_id].registered_context_menus_mutex); object_instances.at(object_instance_id).registered_context_menus_mutex);
object_instances[object_instance_id].registered_context_menus.erase( object_instances.at(object_instance_id)
context_menu_id); .registered_context_menus.erase(context_menu_id);
} }
size_t Vst3Bridge::generate_instance_id() noexcept { size_t Vst3Bridge::generate_instance_id() noexcept {
@@ -1155,9 +1157,9 @@ AudioShmBuffer::Config Vst3Bridge::setup_shared_audio_buffers(
size_t instance_id, size_t instance_id,
const Steinberg::Vst::ProcessSetup& setup) { const Steinberg::Vst::ProcessSetup& setup) {
const Steinberg::IPtr<Steinberg::Vst::IComponent> component = const Steinberg::IPtr<Steinberg::Vst::IComponent> component =
object_instances[instance_id].component; object_instances.at(instance_id).component;
const Steinberg::IPtr<Steinberg::Vst::IAudioProcessor> audio_processor = const Steinberg::IPtr<Steinberg::Vst::IAudioProcessor> audio_processor =
object_instances[instance_id].audio_processor; object_instances.at(instance_id).audio_processor;
assert(component && audio_processor); assert(component && audio_processor);
// We'll query the plugin for its audio bus layouts, and then create // We'll query the plugin for its audio bus layouts, and then create
@@ -1217,7 +1219,7 @@ AudioShmBuffer::Config Vst3Bridge::setup_shared_audio_buffers(
.output_offsets = std::move(output_bus_offsets)}; .output_offsets = std::move(output_bus_offsets)};
std::optional<AudioShmBuffer>& process_buffers = std::optional<AudioShmBuffer>& process_buffers =
object_instances[instance_id].process_buffers; object_instances.at(instance_id).process_buffers;
if (!process_buffers) { if (!process_buffers) {
process_buffers.emplace(buffer_config); process_buffers.emplace(buffer_config);
} else { } else {
@@ -1248,7 +1250,7 @@ AudioShmBuffer::Config Vst3Bridge::setup_shared_audio_buffers(
}; };
set_bus_pointers( set_bus_pointers(
object_instances[instance_id].process_buffers_input_pointers, object_instances.at(instance_id).process_buffers_input_pointers,
process_buffers->config.input_offsets, process_buffers->config.input_offsets,
[&](uint32_t bus, uint32_t channel) -> void* { [&](uint32_t bus, uint32_t channel) -> void* {
if (double_precision) { if (double_precision) {
@@ -1258,7 +1260,7 @@ AudioShmBuffer::Config Vst3Bridge::setup_shared_audio_buffers(
} }
}); });
set_bus_pointers( set_bus_pointers(
object_instances[instance_id].process_buffers_output_pointers, object_instances.at(instance_id).process_buffers_output_pointers,
process_buffers->config.output_offsets, process_buffers->config.output_offsets,
[&](uint32_t bus, uint32_t channel) -> void* { [&](uint32_t bus, uint32_t channel) -> void* {
if (double_precision) { if (double_precision) {
@@ -1282,11 +1284,11 @@ size_t Vst3Bridge::register_object_instance(
// If the object supports `IComponent` or `IAudioProcessor`, // If the object supports `IComponent` or `IAudioProcessor`,
// then we'll set up a dedicated thread for function calls for // then we'll set up a dedicated thread for function calls for
// those interfaces. // those interfaces.
if (object_instances[instance_id].audio_processor || if (object_instances.at(instance_id).audio_processor ||
object_instances[instance_id].component) { object_instances.at(instance_id).component) {
std::promise<void> socket_listening_latch; std::promise<void> socket_listening_latch;
object_instances[instance_id] object_instances.at(instance_id)
.audio_processor_handler = Win32Thread([&, instance_id]() { .audio_processor_handler = Win32Thread([&, instance_id]() {
set_realtime_priority(true); set_realtime_priority(true);
@@ -1309,7 +1311,7 @@ size_t Vst3Bridge::register_object_instance(
Steinberg::Vst::SpeakerArrangement empty_arrangement = Steinberg::Vst::SpeakerArrangement empty_arrangement =
0b00000000; 0b00000000;
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.audio_processor->setBusArrangements( .audio_processor->setBusArrangements(
request.num_ins > 0 ? request.inputs.data() request.num_ins > 0 ? request.inputs.data()
: &empty_arrangement, : &empty_arrangement,
@@ -1322,7 +1324,7 @@ size_t Vst3Bridge::register_object_instance(
-> YaAudioProcessor::GetBusArrangement::Response { -> YaAudioProcessor::GetBusArrangement::Response {
Steinberg::Vst::SpeakerArrangement arr{}; Steinberg::Vst::SpeakerArrangement arr{};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.audio_processor->getBusArrangement( .audio_processor->getBusArrangement(
request.dir, request.index, arr); request.dir, request.index, arr);
@@ -1331,19 +1333,19 @@ size_t Vst3Bridge::register_object_instance(
}, },
[&](const YaAudioProcessor::CanProcessSampleSize& request) [&](const YaAudioProcessor::CanProcessSampleSize& request)
-> YaAudioProcessor::CanProcessSampleSize::Response { -> YaAudioProcessor::CanProcessSampleSize::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.audio_processor->canProcessSampleSize( .audio_processor->canProcessSampleSize(
request.symbolic_sample_size); request.symbolic_sample_size);
}, },
[&](const YaAudioProcessor::GetLatencySamples& request) [&](const YaAudioProcessor::GetLatencySamples& request)
-> YaAudioProcessor::GetLatencySamples::Response { -> YaAudioProcessor::GetLatencySamples::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.audio_processor->getLatencySamples(); .audio_processor->getLatencySamples();
}, },
[&](YaAudioProcessor::SetupProcessing& request) [&](YaAudioProcessor::SetupProcessing& request)
-> YaAudioProcessor::SetupProcessing::Response { -> YaAudioProcessor::SetupProcessing::Response {
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.audio_processor->setupProcessing( .audio_processor->setupProcessing(
request.setup); request.setup);
@@ -1363,7 +1365,7 @@ size_t Vst3Bridge::register_object_instance(
}, },
[&](const YaAudioProcessor::SetProcessing& request) [&](const YaAudioProcessor::SetProcessing& request)
-> YaAudioProcessor::SetProcessing::Response { -> YaAudioProcessor::SetProcessing::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.audio_processor->setProcessing(request.state); .audio_processor->setProcessing(request.state);
}, },
[&](MessageReference<YaAudioProcessor::Process>& [&](MessageReference<YaAudioProcessor::Process>&
@@ -1396,12 +1398,12 @@ size_t Vst3Bridge::register_object_instance(
// buffers, so the reconstruction function will need to // buffers, so the reconstruction function will need to
// know where it should point the `AudioBusBuffers` to // know where it should point the `AudioBusBuffers` to
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.audio_processor->process( .audio_processor->process(
request.data.reconstruct( request.data.reconstruct(
object_instances[request.instance_id] object_instances.at(request.instance_id)
.process_buffers_input_pointers, .process_buffers_input_pointers,
object_instances[request.instance_id] object_instances.at(request.instance_id)
.process_buffers_output_pointers)); .process_buffers_output_pointers));
return YaAudioProcessor::ProcessResponse{ return YaAudioProcessor::ProcessResponse{
@@ -1410,14 +1412,14 @@ size_t Vst3Bridge::register_object_instance(
}, },
[&](const YaAudioProcessor::GetTailSamples& request) [&](const YaAudioProcessor::GetTailSamples& request)
-> YaAudioProcessor::GetTailSamples::Response { -> YaAudioProcessor::GetTailSamples::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.audio_processor->getTailSamples(); .audio_processor->getTailSamples();
}, },
[&](const YaComponent::GetControllerClassId& request) [&](const YaComponent::GetControllerClassId& request)
-> YaComponent::GetControllerClassId::Response { -> YaComponent::GetControllerClassId::Response {
Steinberg::TUID cid{0}; Steinberg::TUID cid{0};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.component->getControllerClassId(cid); .component->getControllerClassId(cid);
return YaComponent::GetControllerClassIdResponse{ return YaComponent::GetControllerClassIdResponse{
@@ -1425,19 +1427,19 @@ size_t Vst3Bridge::register_object_instance(
}, },
[&](const YaComponent::SetIoMode& request) [&](const YaComponent::SetIoMode& request)
-> YaComponent::SetIoMode::Response { -> YaComponent::SetIoMode::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.component->setIoMode(request.mode); .component->setIoMode(request.mode);
}, },
[&](const YaComponent::GetBusCount& request) [&](const YaComponent::GetBusCount& request)
-> YaComponent::GetBusCount::Response { -> YaComponent::GetBusCount::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.component->getBusCount(request.type, request.dir); .component->getBusCount(request.type, request.dir);
}, },
[&](YaComponent::GetBusInfo& request) [&](YaComponent::GetBusInfo& request)
-> YaComponent::GetBusInfo::Response { -> YaComponent::GetBusInfo::Response {
Steinberg::Vst::BusInfo bus{}; Steinberg::Vst::BusInfo bus{};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.component->getBusInfo(request.type, .component->getBusInfo(request.type,
request.dir, request.dir,
request.index, bus); request.index, bus);
@@ -1449,7 +1451,7 @@ size_t Vst3Bridge::register_object_instance(
-> YaComponent::GetRoutingInfo::Response { -> YaComponent::GetRoutingInfo::Response {
Steinberg::Vst::RoutingInfo out_info{}; Steinberg::Vst::RoutingInfo out_info{};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.component->getRoutingInfo(request.in_info, .component->getRoutingInfo(request.in_info,
out_info); out_info);
@@ -1458,7 +1460,7 @@ size_t Vst3Bridge::register_object_instance(
}, },
[&](const YaComponent::ActivateBus& request) [&](const YaComponent::ActivateBus& request)
-> YaComponent::ActivateBus::Response { -> YaComponent::ActivateBus::Response {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.component->activateBus(request.type, request.dir, .component->activateBus(request.type, request.dir,
request.index, request.index,
request.state); request.state);
@@ -1475,7 +1477,7 @@ size_t Vst3Bridge::register_object_instance(
// calls. // calls.
return do_mutual_recursion_on_off_thread( return do_mutual_recursion_on_off_thread(
[&]() -> tresult { [&]() -> tresult {
return object_instances[request.instance_id] return object_instances.at(request.instance_id)
.component->setActive(request.state); .component->setActive(request.state);
}); });
}, },
@@ -1486,7 +1488,7 @@ size_t Vst3Bridge::register_object_instance(
Steinberg::Vst::PrefetchableSupport Steinberg::Vst::PrefetchableSupport
prefetchable; prefetchable;
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances.at(request.instance_id)
.prefetchable_support .prefetchable_support
->getPrefetchableSupport(prefetchable); ->getPrefetchableSupport(prefetchable);
@@ -1510,8 +1512,8 @@ size_t Vst3Bridge::register_object_instance(
void Vst3Bridge::unregister_object_instance(size_t instance_id) { void Vst3Bridge::unregister_object_instance(size_t instance_id) {
// Tear the dedicated audio processing socket down again if we // Tear the dedicated audio processing socket down again if we
// created one while handling `Vst3PluginProxy::Construct` // created one while handling `Vst3PluginProxy::Construct`
if (object_instances[instance_id].audio_processor || if (object_instances.at(instance_id).audio_processor ||
object_instances[instance_id].component) { object_instances.at(instance_id).component) {
sockets.remove_audio_processor(instance_id); sockets.remove_audio_processor(instance_id);
} }
-2
View File
@@ -61,8 +61,6 @@ struct Vst3PlugViewInterfaces {
* `IPluginBase::initialize()`. * `IPluginBase::initialize()`.
*/ */
struct Vst3PluginInstance { struct Vst3PluginInstance {
Vst3PluginInstance() noexcept;
Vst3PluginInstance(Steinberg::IPtr<Steinberg::FUnknown> object) noexcept; Vst3PluginInstance(Steinberg::IPtr<Steinberg::FUnknown> object) noexcept;
/** /**