mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-09 20:29:10 +02:00
Implement IUnitInfo::getProgramListInfo
This commit is contained in:
@@ -453,6 +453,15 @@ bool Vst3Logger::log_request(bool is_host_vst,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Vst3Logger::log_request(bool is_host_vst,
|
||||||
|
const YaUnitInfo::GetProgramListInfo& request) {
|
||||||
|
return log_request_base(is_host_vst, [&](auto& message) {
|
||||||
|
message << request.instance_id
|
||||||
|
<< ": IUnitInfo::getProgramListInfo(listIndex = "
|
||||||
|
<< request.list_index << ", &info)";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
bool Vst3Logger::log_request(
|
bool Vst3Logger::log_request(
|
||||||
bool is_host_vst,
|
bool is_host_vst,
|
||||||
const YaAudioProcessor::SetBusArrangements& request) {
|
const YaAudioProcessor::SetBusArrangements& request) {
|
||||||
@@ -861,6 +870,19 @@ void Vst3Logger::log_response(bool is_host_vst,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Vst3Logger::log_response(
|
||||||
|
bool is_host_vst,
|
||||||
|
const YaUnitInfo::GetProgramListInfoResponse& response) {
|
||||||
|
log_response_base(is_host_vst, [&](auto& message) {
|
||||||
|
message << response.result.string();
|
||||||
|
if (response.result == Steinberg::kResultOk) {
|
||||||
|
message << ", <ProgramListInfo for \""
|
||||||
|
<< VST3::StringConvert::convert(response.info.name)
|
||||||
|
<< "\">";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void Vst3Logger::log_response(
|
void Vst3Logger::log_response(
|
||||||
bool is_host_vst,
|
bool is_host_vst,
|
||||||
const YaAudioProcessor::GetBusArrangementResponse& response) {
|
const YaAudioProcessor::GetBusArrangementResponse& response) {
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ class Vst3Logger {
|
|||||||
bool log_request(bool is_host_vst, const YaUnitInfo::GetUnitCount&);
|
bool log_request(bool is_host_vst, const YaUnitInfo::GetUnitCount&);
|
||||||
bool log_request(bool is_host_vst, const YaUnitInfo::GetUnitInfo&);
|
bool log_request(bool is_host_vst, const YaUnitInfo::GetUnitInfo&);
|
||||||
bool log_request(bool is_host_vst, const YaUnitInfo::GetProgramListCount&);
|
bool log_request(bool is_host_vst, const YaUnitInfo::GetProgramListCount&);
|
||||||
|
bool log_request(bool is_host_vst, const YaUnitInfo::GetProgramListInfo&);
|
||||||
|
|
||||||
bool log_request(bool is_host_vst,
|
bool log_request(bool is_host_vst,
|
||||||
const YaAudioProcessor::SetBusArrangements&);
|
const YaAudioProcessor::SetBusArrangements&);
|
||||||
@@ -165,6 +166,8 @@ class Vst3Logger {
|
|||||||
void log_response(bool is_host_vst, const YaPluginFactory::ConstructArgs&);
|
void log_response(bool is_host_vst, const YaPluginFactory::ConstructArgs&);
|
||||||
void log_response(bool is_host_vst, const Configuration&);
|
void log_response(bool is_host_vst, const Configuration&);
|
||||||
void log_response(bool is_host_vst, const YaUnitInfo::GetUnitInfoResponse&);
|
void log_response(bool is_host_vst, const YaUnitInfo::GetUnitInfoResponse&);
|
||||||
|
void log_response(bool is_host_vst,
|
||||||
|
const YaUnitInfo::GetProgramListInfoResponse&);
|
||||||
|
|
||||||
void log_response(bool is_host_vst,
|
void log_response(bool is_host_vst,
|
||||||
const YaAudioProcessor::GetBusArrangementResponse&);
|
const YaAudioProcessor::GetBusArrangementResponse&);
|
||||||
|
|||||||
@@ -102,7 +102,8 @@ using ControlRequest = std::variant<Vst3PlugViewProxy::Destruct,
|
|||||||
YaPluginFactory::SetHostContext,
|
YaPluginFactory::SetHostContext,
|
||||||
YaUnitInfo::GetUnitCount,
|
YaUnitInfo::GetUnitCount,
|
||||||
YaUnitInfo::GetUnitInfo,
|
YaUnitInfo::GetUnitInfo,
|
||||||
YaUnitInfo::GetProgramListCount>;
|
YaUnitInfo::GetProgramListCount,
|
||||||
|
YaUnitInfo::GetProgramListInfo>;
|
||||||
|
|
||||||
template <typename S>
|
template <typename S>
|
||||||
void serialize(S& s, ControlRequest& payload) {
|
void serialize(S& s, ControlRequest& payload) {
|
||||||
|
|||||||
@@ -132,6 +132,40 @@ class YaUnitInfo : public Steinberg::Vst::IUnitInfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
virtual int32 PLUGIN_API getProgramListCount() override = 0;
|
virtual int32 PLUGIN_API getProgramListCount() override = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The response code and returned unit information for a call to
|
||||||
|
* `IUnitInfo::getProgramListInfo(list_index)`.
|
||||||
|
*/
|
||||||
|
struct GetProgramListInfoResponse {
|
||||||
|
UniversalTResult result;
|
||||||
|
Steinberg::Vst::ProgramListInfo info;
|
||||||
|
|
||||||
|
template <typename S>
|
||||||
|
void serialize(S& s) {
|
||||||
|
s.object(result);
|
||||||
|
s.object(info);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Message to pass through a call to
|
||||||
|
* `IUnitInfo::getProgramListInfo(list_index)` to the Wine plugin host.
|
||||||
|
*/
|
||||||
|
struct GetProgramListInfo {
|
||||||
|
using Response = GetProgramListInfoResponse;
|
||||||
|
|
||||||
|
native_size_t instance_id;
|
||||||
|
|
||||||
|
int32 list_index;
|
||||||
|
|
||||||
|
template <typename S>
|
||||||
|
void serialize(S& s) {
|
||||||
|
s.value8b(instance_id);
|
||||||
|
s.value4b(list_index);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
virtual tresult PLUGIN_API getProgramListInfo(
|
virtual tresult PLUGIN_API getProgramListInfo(
|
||||||
int32 listIndex,
|
int32 listIndex,
|
||||||
Steinberg::Vst::ProgramListInfo& info /*out*/) override = 0;
|
Steinberg::Vst::ProgramListInfo& info /*out*/) override = 0;
|
||||||
@@ -181,5 +215,12 @@ void serialize(S& s, UnitInfo& info) {
|
|||||||
s.text2b(info.name);
|
s.text2b(info.name);
|
||||||
s.value4b(info.programListId);
|
s.value4b(info.programListId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename S>
|
||||||
|
void serialize(S& s, ProgramListInfo& info) {
|
||||||
|
s.value4b(info.id);
|
||||||
|
s.text2b(info.name);
|
||||||
|
s.value4b(info.programCount);
|
||||||
|
}
|
||||||
} // namespace Vst
|
} // namespace Vst
|
||||||
} // namespace Steinberg
|
} // namespace Steinberg
|
||||||
|
|||||||
@@ -465,9 +465,13 @@ int32 PLUGIN_API Vst3PluginProxyImpl::getProgramListCount() {
|
|||||||
tresult PLUGIN_API Vst3PluginProxyImpl::getProgramListInfo(
|
tresult PLUGIN_API Vst3PluginProxyImpl::getProgramListInfo(
|
||||||
int32 listIndex,
|
int32 listIndex,
|
||||||
Steinberg::Vst::ProgramListInfo& info /*out*/) {
|
Steinberg::Vst::ProgramListInfo& info /*out*/) {
|
||||||
// TODO: Implement
|
const GetProgramListInfoResponse response =
|
||||||
bridge.logger.log("TODO: IUnitInfo::getProgramListInfo()");
|
bridge.send_message(YaUnitInfo::GetProgramListInfo{
|
||||||
return Steinberg::kNotImplemented;
|
.instance_id = instance_id(), .list_index = listIndex});
|
||||||
|
|
||||||
|
info = response.info;
|
||||||
|
|
||||||
|
return response.result;
|
||||||
}
|
}
|
||||||
|
|
||||||
tresult PLUGIN_API
|
tresult PLUGIN_API
|
||||||
|
|||||||
@@ -586,6 +586,16 @@ void Vst3Bridge::run() {
|
|||||||
return object_instances[request.instance_id]
|
return object_instances[request.instance_id]
|
||||||
.unit_info->getProgramListCount();
|
.unit_info->getProgramListCount();
|
||||||
},
|
},
|
||||||
|
[&](const YaUnitInfo::GetProgramListInfo& request)
|
||||||
|
-> YaUnitInfo::GetProgramListInfo::Response {
|
||||||
|
Steinberg::Vst::ProgramListInfo info;
|
||||||
|
const tresult result = object_instances[request.instance_id]
|
||||||
|
.unit_info->getProgramListInfo(
|
||||||
|
request.list_index, info);
|
||||||
|
|
||||||
|
return YaUnitInfo::GetProgramListInfoResponse{.result = result,
|
||||||
|
.info = info};
|
||||||
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user