Commit Graph

1104 Commits

Author SHA1 Message Date
Robbert van der Helm 8066e1d2ee Fix writing back vector streams 2020-12-17 23:43:52 +01:00
Robbert van der Helm 68c7b9b081 Destroy VST3 objects within the main IO context 2020-12-17 23:32:56 +01:00
Robbert van der Helm a953eb3bfc Take PrimitiveWrapper values by value
Should not make any difference here anyway since we're dealing with
primitives.
2020-12-17 23:12:29 +01:00
Robbert van der Helm 2c01bd8bf1 Fix typo in IEditController::setComponentState log 2020-12-17 23:12:01 +01:00
Robbert van der Helm 7809c9094c Fix query interface log message 2020-12-17 23:06:30 +01:00
Robbert van der Helm de9250076b Fix very important typo in IBStream reading
No wonder it didn't work.
2020-12-17 23:03:26 +01:00
Robbert van der Helm 7fd488beef Fix plugin proxy cosntruction response log message 2020-12-17 22:55:02 +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 96c630e608 Fix typo in log message 2020-12-17 18:51:32 +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 b3e39daed0 Fix typo in log message 2020-12-17 17:58:32 +01:00
Robbert van der Helm b2cee1e750 Rename PluginObject to InstanceInterfaces
To make it a bit clearer that this is a holder of interface smart
pointers.
2020-12-17 17:54:57 +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 d8694b062b Add IEditController to the PluginObject interfaces 2020-12-17 17:51:47 +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 7a5de5d35e Update the VST3 implementation documentation 2020-12-17 15:43:13 +01:00
Robbert van der Helm 1ce12227fb Add logging for IAudioProcessor::process()
This is super verbose, but I'm sure it's going to be useful at some
point.
2020-12-17 15:12:19 +01:00
Robbert van der Helm 231a0293cb Change VST3 log message direction prefix
It looks much mess noisy this way at the cost of maybe being slightly
less clear at a glance.
2020-12-17 14:41:54 +01:00
Robbert van der Helm 1f5bd43fe8 Print CIDs in IPluginBase::initialize() 2020-12-17 14:28:02 +01:00
Robbert van der Helm 78f9203378 Implement a UID formatting function 2020-12-17 14:20:49 +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 a5834cd438 Replace ComponentInstance with a generic variant
This allows casting to supported interface from an FUnknown.
2020-12-17 13:47:43 +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 481975860c Use the new simple supports flags for the factory
This is both more type safe and as it turns out much more manageable.
2020-12-17 13:20:16 +01:00
Robbert van der Helm 655195a415 Move the plugin interfaces to a subdirectory 2020-12-17 13:12:54 +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 602bbc5d35 Add TODO about replacing known_iids with flags 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 97570a47ba Add a document with all implemented interfaces 2020-12-16 22:07:43 +01:00
Robbert van der Helm 7488d6f482 Move the VST3 design document to docs/ 2020-12-16 21:54:18 +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 2bf98d0a97 Implement writing back YaProcessDataResponse
Everything around `ProcessData` is now fully implemented and should in
theory work.
2020-12-16 18:14:28 +01:00
Robbert van der Helm 6f38f8400c Implement process call creation 2020-12-16 17:42:12 +01:00
Robbert van der Helm 95a4ef8eed Implement reconstructing ProcessData 2020-12-16 17:36:49 +01:00
Robbert van der Helm 3771ed6870 Add more YaProcessData boilerplate 2020-12-16 17:14:42 +01:00
Robbert van der Helm d1c5d4c4ac Implement YaProcessData reading 2020-12-15 23:11:59 +01:00
Robbert van der Helm d6b7ef38e2 Add missing fields in events
Thanks GCC.
2020-12-15 22:39:54 +01:00
Robbert van der Helm f1aefc0a9d Finish implementing YaAudioBusBuffers 2020-12-15 22:32:42 +01:00
Robbert van der Helm 487e6eac98 Add the process context to YaProcessData 2020-12-15 21:49:30 +01:00
Robbert van der Helm e4b97d90c9 Add the events to YaProcessData 2020-12-15 21:32:50 +01:00
Robbert van der Helm 7e40d70ff4 Update the TODO list in the readme 2020-12-15 20:07:03 +01:00
Robbert van der Helm a516309d17 Implement IEventList 2020-12-15 18:32:43 +01:00