Commit Graph

592 Commits

Author SHA1 Message Date
Robbert van der Helm 132ba0baeb Add stubs for a component handler proxy impl 2020-12-19 14:37:50 +01:00
Robbert van der Helm 7e3568e333 Rename YaEditController2 to YaEditController
Adding versions to our implementations doesn't work when the versions
and extensions start becoming non-numerical. This is what happened with
`IComponentHandler`.
2020-12-19 13:49:00 +01:00
Robbert van der Helm a197ad897c Clean up IPluginFactory::createInstance()
We'll just do all the checks up front, that's much cleaner and also
safer.
2020-12-19 13:07:58 +01:00
Robbert van der Helm 71493299ec Implement IConnectionPoint::disconnect 2020-12-19 13:07:58 +01:00
Robbert van der Helm 8251249959 Remove fixme about out of order messages
This appears to 100% be a bug in ValhallaSuperMassive.
2020-12-18 23:10:07 +01:00
Robbert van der Helm 70e01e17c1 Add note wrong parameter value strings in Bitwig 2020-12-18 23:02:49 +01:00
Robbert van der Helm 43f5e65b45 Implement IEditController::setParamNormalized() 2020-12-18 21:53:13 +01:00
Robbert van der Helm bc0c13778f Implement IEditController::getParamNormalized() 2020-12-18 21:53:04 +01:00
Robbert van der Helm fcbf198fee Implement IEditController::plainParamToNormalized 2020-12-18 21:36:39 +01:00
Robbert van der Helm 78d5e3bbfb Implement IEditController::normalizedValueToPlain 2020-12-18 21:36:39 +01:00
Robbert van der Helm a4e2a18480 Implement IEditController::getParamValueByString() 2020-12-18 21:36:39 +01:00
Robbert van der Helm d2585a3550 Add a todo about reusing YaProcessData objects 2020-12-18 20:22:34 +01:00
Robbert van der Helm 74f21f12a5 Use a getter for a proxy object's instance ID
We also need this to get some random other object's instance ID, so
might as well use it everywhere.
2020-12-18 14:22:57 +01:00
Robbert van der Helm cfa4849467 Partially implement IConnectionPoint::connect()
This now works for direct connections, which is probably how most hosts
will use this.
2020-12-18 14:09:20 +01:00
Robbert van der Helm 41a9ca5a36 Add boilerplate for connecting Vst3PluginProxies
This way we can identify the actual objects and directly connect them on
the Wine side.
2020-12-18 13:45:13 +01:00
Robbert van der Helm f83e526fc6 Add stubs for IConnectionPoint 2020-12-18 13:36:48 +01:00
Robbert van der Helm 7809c9094c Fix query interface log message 2020-12-17 23:06:30 +01:00
Robbert van der Helm 585d1e736c Implement IEditController::getParamStringByValue() 2020-12-17 22:44:13 +01:00
Robbert van der Helm ccc5688f0c Implement IEditController::getParameterInfo() 2020-12-17 22:16:20 +01:00
Robbert van der Helm 4cc24f74d1 Implement IEditController::getParameterCount() 2020-12-17 21:55:12 +01:00
Robbert van der Helm 7eb7e87953 Implement IEditController::setComponentState() 2020-12-17 21:50:04 +01:00
Robbert van der Helm 9bad0eb50f Work around bug in Bitwig Studio
These FIDStrings are not terminated by null bytes, and thus
`FIDStringsEqual` things they don't match any knows IIDs since they
appear to have different lengths.
2020-12-17 18:27:35 +01:00
Robbert van der Helm 69ec7b3726 Fix FIDString to FUID conversion 2020-12-17 18:15:32 +01:00
Robbert van der Helm fe2de8de8d Unify handling for *::{get,set}State
Since these functions are exactly the same, and for whatever reason they
didn't just add them to the `IPluginBase` both `IComponent` and
`IEditController`. inherit from
2020-12-17 17:52:51 +01:00
Robbert van der Helm 286023bc22 Allow creating IEditController instances
Now `IPluginFactory::createInstance()` can create multiple (and in our
case, all relevant) different types of objects.
2020-12-17 17:01:26 +01:00
Robbert van der Helm 2155240cca Add stubs for IEditController{,2} 2020-12-17 16:39:50 +01:00
Robbert van der Helm f71c7a3895 Move work dropping to Vst2PluginBridge destructor
For consistency with `Vst3PluginBridge`.
2020-12-17 13:52:12 +01:00
Robbert van der Helm d0e96da21a Rename register_component to register_plugin_proxy 2020-12-17 13:33:34 +01:00
Robbert van der Helm 11bf7532fa Rename the monolitic class to Vst3PluginProxy
Now it's starting to look promising.
2020-12-17 13:07:42 +01:00
Robbert van der Helm d8b2646563 Split off IComponent and create a monolithic class
We can now use implement all VST3 plugin interfaces through this class,
check whether the object from the plugin also supports these classes,
and then conditionally allow casting to the supported classes. This
should give us a one-to-one proxy of the original object.
2020-12-17 12:49:33 +01:00
Robbert van der Helm d6c28f48d9 Split YaAudioProcessor from YaComponent
Now all that's left is splitting YaComponent into the IComponent bits
and separate YaPluginMonlith that implements everything.
2020-12-17 00:31:32 +01:00
Robbert van der Helm 6809e73d6b Split IPluginBase from IComponent
We're also going to need this for `IEditController`. Separating all of
these classes will also keep everything much more maintainable with all
of these associated structs.
2020-12-16 23:46:47 +01:00
Robbert van der Helm 1dd575e4a7 Implement IAudioProcessor::process()
With this the entire `IAudioProcessor` interface has been implemented
and in theory it should now be possible to process audio and events.
Logging for these requests still has to be implemented separately.
2020-12-16 18:55:34 +01:00
Robbert van der Helm 6d0a38f720 Null initialize the plugin factory pointer 2020-12-16 18:55:34 +01:00
Robbert van der Helm 62f376d952 Allow the module to be properly unloaded
Terminating the host process will cause all sockets to be closed so we
can join the threads.
2020-12-14 22:49:20 +01:00
Robbert van der Helm c815b3903b Implement IAudioProcessor::getTailSamples() 2020-12-14 21:43:38 +01:00
Robbert van der Helm 007aa1e707 Implement IAudioProcessor::setProcessing() 2020-12-14 21:31:50 +01:00
Robbert van der Helm b1bcfd3873 Implement IAudioProcessor::setupProcessing() 2020-12-14 21:25:05 +01:00
Robbert van der Helm cb7413c521 Add implicit conversion for UniversalTResult 2020-12-14 18:32:18 +01:00
Robbert van der Helm e282f8c572 Fix IComponent::getBusCount() 2020-12-14 18:03:20 +01:00
Robbert van der Helm 0f59d6429d Implement IAudioProcessor::getLatencySamples() 2020-12-14 17:53:50 +01:00
Robbert van der Helm d9585fac78 Implement IAudioProcessor::canProcessSampleSize() 2020-12-14 17:12:49 +01:00
Robbert van der Helm b26c2e08a7 Implement IAudioProcessor::getBusArrangement() 2020-12-14 16:55:21 +01:00
Robbert van der Helm e3b442de57 Implement IAudioProcessor::setBusArrangements() 2020-12-14 16:40:40 +01:00
Robbert van der Helm 49a87371bc Add todos for logging successful interface queries 2020-12-14 13:23:27 +01:00
Robbert van der Helm 0668a785b0 Add stubs for implementing IAudioProcessor 2020-12-14 13:06:02 +01:00
Robbert van der Helm e653142e45 Implement IComponent::getState()
With this the basic IComponent interface is fully implemented. Next will
be `IAudioProcessor` and `IConnectionPoint` as additions to IComponent.
We'll use the same `known_iids` mechanism as used in the plugin factory.
2020-12-14 12:38:35 +01:00
Robbert van der Helm 816d1c1501 Implement IComponent::setState() 2020-12-14 12:09:47 +01:00
Robbert van der Helm 42664be378 Use std::copy_n instead of pointer arithmetic 2020-12-13 23:19:37 +01:00
Robbert van der Helm 7341fab0ea Implement IComponent::setActive() 2020-12-13 22:17:06 +01:00