mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-09 20:29:10 +02:00
Implement IUnitData
With this all VST 3.0.0 interfaces are finally supported.
This commit is contained in:
@@ -103,6 +103,9 @@ using ControlRequest = std::variant<Vst3PlugViewProxy::Destruct,
|
|||||||
YaProgramListData::ProgramDataSupported,
|
YaProgramListData::ProgramDataSupported,
|
||||||
YaProgramListData::GetProgramData,
|
YaProgramListData::GetProgramData,
|
||||||
YaProgramListData::SetProgramData,
|
YaProgramListData::SetProgramData,
|
||||||
|
YaUnitData::UnitDataSupported,
|
||||||
|
YaUnitData::GetUnitData,
|
||||||
|
YaUnitData::SetUnitData,
|
||||||
YaUnitInfo::GetUnitCount,
|
YaUnitInfo::GetUnitCount,
|
||||||
YaUnitInfo::GetUnitInfo,
|
YaUnitInfo::GetUnitInfo,
|
||||||
YaUnitInfo::GetProgramListCount,
|
YaUnitInfo::GetProgramListCount,
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ Vst3PluginProxy::ConstructArgs::ConstructArgs(
|
|||||||
edit_controller_2_args(object),
|
edit_controller_2_args(object),
|
||||||
plugin_base_args(object),
|
plugin_base_args(object),
|
||||||
program_list_data_args(object),
|
program_list_data_args(object),
|
||||||
|
unit_data_args(object),
|
||||||
unit_info_args(object) {}
|
unit_info_args(object) {}
|
||||||
|
|
||||||
Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args)
|
Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args)
|
||||||
@@ -39,6 +40,7 @@ Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args)
|
|||||||
YaEditController2(std::move(args.edit_controller_2_args)),
|
YaEditController2(std::move(args.edit_controller_2_args)),
|
||||||
YaPluginBase(std::move(args.plugin_base_args)),
|
YaPluginBase(std::move(args.plugin_base_args)),
|
||||||
YaProgramListData(std::move(args.program_list_data_args)),
|
YaProgramListData(std::move(args.program_list_data_args)),
|
||||||
|
YaUnitData(std::move(args.unit_data_args)),
|
||||||
YaUnitInfo(std::move(args.unit_info_args)),
|
YaUnitInfo(std::move(args.unit_info_args)),
|
||||||
arguments(std::move(args)){FUNKNOWN_CTOR}
|
arguments(std::move(args)){FUNKNOWN_CTOR}
|
||||||
|
|
||||||
@@ -95,6 +97,10 @@ tresult PLUGIN_API Vst3PluginProxy::queryInterface(Steinberg::FIDString _iid,
|
|||||||
QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IProgramListData::iid,
|
QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IProgramListData::iid,
|
||||||
Steinberg::Vst::IProgramListData)
|
Steinberg::Vst::IProgramListData)
|
||||||
}
|
}
|
||||||
|
if (YaUnitData::supported()) {
|
||||||
|
QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IUnitData::iid,
|
||||||
|
Steinberg::Vst::IUnitData)
|
||||||
|
}
|
||||||
if (YaUnitInfo::supported()) {
|
if (YaUnitInfo::supported()) {
|
||||||
QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IUnitInfo::iid,
|
QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IUnitInfo::iid,
|
||||||
Steinberg::Vst::IUnitInfo)
|
Steinberg::Vst::IUnitInfo)
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ class Vst3PluginProxy : public YaAudioProcessor,
|
|||||||
public YaEditController2,
|
public YaEditController2,
|
||||||
public YaPluginBase,
|
public YaPluginBase,
|
||||||
public YaProgramListData,
|
public YaProgramListData,
|
||||||
|
public YaUnitData,
|
||||||
public YaUnitInfo {
|
public YaUnitInfo {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@@ -88,6 +89,7 @@ class Vst3PluginProxy : public YaAudioProcessor,
|
|||||||
YaEditController2::ConstructArgs edit_controller_2_args;
|
YaEditController2::ConstructArgs edit_controller_2_args;
|
||||||
YaPluginBase::ConstructArgs plugin_base_args;
|
YaPluginBase::ConstructArgs plugin_base_args;
|
||||||
YaProgramListData::ConstructArgs program_list_data_args;
|
YaProgramListData::ConstructArgs program_list_data_args;
|
||||||
|
YaUnitData::ConstructArgs unit_data_args;
|
||||||
YaUnitInfo::ConstructArgs unit_info_args;
|
YaUnitInfo::ConstructArgs unit_info_args;
|
||||||
|
|
||||||
template <typename S>
|
template <typename S>
|
||||||
@@ -100,6 +102,7 @@ class Vst3PluginProxy : public YaAudioProcessor,
|
|||||||
s.object(edit_controller_2_args);
|
s.object(edit_controller_2_args);
|
||||||
s.object(plugin_base_args);
|
s.object(plugin_base_args);
|
||||||
s.object(program_list_data_args);
|
s.object(program_list_data_args);
|
||||||
|
s.object(unit_data_args);
|
||||||
s.object(unit_info_args);
|
s.object(unit_info_args);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -475,6 +475,31 @@ Vst3PluginProxyImpl::setProgramData(Steinberg::Vst::ProgramListID listId,
|
|||||||
.data = data});
|
.data = data});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tresult PLUGIN_API
|
||||||
|
Vst3PluginProxyImpl::unitDataSupported(Steinberg::Vst::UnitID unitId) {
|
||||||
|
return bridge.send_message(YaUnitData::UnitDataSupported{
|
||||||
|
.instance_id = instance_id(), .unit_id = unitId});
|
||||||
|
}
|
||||||
|
|
||||||
|
tresult PLUGIN_API
|
||||||
|
Vst3PluginProxyImpl::getUnitData(Steinberg::Vst::UnitID unitId,
|
||||||
|
Steinberg::IBStream* data) {
|
||||||
|
const GetUnitDataResponse response =
|
||||||
|
bridge.send_message(YaUnitData::GetUnitData{
|
||||||
|
.instance_id = instance_id(), .unit_id = unitId});
|
||||||
|
|
||||||
|
assert(response.data.write_back(data) == Steinberg::kResultOk);
|
||||||
|
|
||||||
|
return response.result;
|
||||||
|
}
|
||||||
|
|
||||||
|
tresult PLUGIN_API
|
||||||
|
Vst3PluginProxyImpl::setUnitData(Steinberg::Vst::UnitID unitId,
|
||||||
|
Steinberg::IBStream* data) {
|
||||||
|
return bridge.send_message(YaUnitData::SetUnitData{
|
||||||
|
.instance_id = instance_id(), .unit_id = unitId, .data = data});
|
||||||
|
}
|
||||||
|
|
||||||
int32 PLUGIN_API Vst3PluginProxyImpl::getUnitCount() {
|
int32 PLUGIN_API Vst3PluginProxyImpl::getUnitCount() {
|
||||||
return bridge.send_message(
|
return bridge.send_message(
|
||||||
YaUnitInfo::GetUnitCount{.instance_id = instance_id()});
|
YaUnitInfo::GetUnitCount{.instance_id = instance_id()});
|
||||||
|
|||||||
@@ -134,6 +134,14 @@ class Vst3PluginProxyImpl : public Vst3PluginProxy {
|
|||||||
int32 programIndex,
|
int32 programIndex,
|
||||||
Steinberg::IBStream* data) override;
|
Steinberg::IBStream* data) override;
|
||||||
|
|
||||||
|
// From `IUnitData`
|
||||||
|
tresult PLUGIN_API
|
||||||
|
unitDataSupported(Steinberg::Vst::UnitID unitId) override;
|
||||||
|
tresult PLUGIN_API getUnitData(Steinberg::Vst::UnitID unitId,
|
||||||
|
Steinberg::IBStream* data) override;
|
||||||
|
tresult PLUGIN_API setUnitData(Steinberg::Vst::UnitID unitId,
|
||||||
|
Steinberg::IBStream* data) override;
|
||||||
|
|
||||||
// From `IUnitInfo`
|
// From `IUnitInfo`
|
||||||
int32 PLUGIN_API getUnitCount() override;
|
int32 PLUGIN_API getUnitCount() override;
|
||||||
tresult PLUGIN_API
|
tresult PLUGIN_API
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ InstanceInterfaces::InstanceInterfaces(
|
|||||||
edit_controller(object),
|
edit_controller(object),
|
||||||
edit_controller_2(object),
|
edit_controller_2(object),
|
||||||
plugin_base(object),
|
plugin_base(object),
|
||||||
|
unit_data(object),
|
||||||
program_list_data(object),
|
program_list_data(object),
|
||||||
unit_info(object) {}
|
unit_info(object) {}
|
||||||
|
|
||||||
@@ -587,6 +588,26 @@ void Vst3Bridge::run() {
|
|||||||
.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)
|
||||||
|
-> YaUnitData::UnitDataSupported::Response {
|
||||||
|
return object_instances[request.instance_id]
|
||||||
|
.unit_data->unitDataSupported(request.unit_id);
|
||||||
|
},
|
||||||
|
[&](const YaUnitData::GetUnitData& request)
|
||||||
|
-> YaUnitData::GetUnitData::Response {
|
||||||
|
VectorStream data{};
|
||||||
|
const tresult result =
|
||||||
|
object_instances[request.instance_id]
|
||||||
|
.unit_data->getUnitData(request.unit_id, &data);
|
||||||
|
|
||||||
|
return YaUnitData::GetUnitDataResponse{.result = result,
|
||||||
|
.data = std::move(data)};
|
||||||
|
},
|
||||||
|
[&](YaUnitData::SetUnitData& request)
|
||||||
|
-> YaUnitData::SetUnitData::Response {
|
||||||
|
return object_instances[request.instance_id]
|
||||||
|
.unit_data->setUnitData(request.unit_id, &request.data);
|
||||||
|
},
|
||||||
[&](const YaPluginFactory::Construct&)
|
[&](const YaPluginFactory::Construct&)
|
||||||
-> YaPluginFactory::Construct::Response {
|
-> YaPluginFactory::Construct::Response {
|
||||||
return YaPluginFactory::ConstructArgs(
|
return YaPluginFactory::ConstructArgs(
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ struct InstanceInterfaces {
|
|||||||
Steinberg::FUnknownPtr<Steinberg::Vst::IEditController> edit_controller;
|
Steinberg::FUnknownPtr<Steinberg::Vst::IEditController> edit_controller;
|
||||||
Steinberg::FUnknownPtr<Steinberg::Vst::IEditController2> edit_controller_2;
|
Steinberg::FUnknownPtr<Steinberg::Vst::IEditController2> edit_controller_2;
|
||||||
Steinberg::FUnknownPtr<Steinberg::IPluginBase> plugin_base;
|
Steinberg::FUnknownPtr<Steinberg::IPluginBase> plugin_base;
|
||||||
|
Steinberg::FUnknownPtr<Steinberg::Vst::IUnitData> unit_data;
|
||||||
Steinberg::FUnknownPtr<Steinberg::Vst::IProgramListData> program_list_data;
|
Steinberg::FUnknownPtr<Steinberg::Vst::IProgramListData> program_list_data;
|
||||||
Steinberg::FUnknownPtr<Steinberg::Vst::IUnitInfo> unit_info;
|
Steinberg::FUnknownPtr<Steinberg::Vst::IUnitInfo> unit_info;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user