Robbert van der Helm
7eb7e87953
Implement IEditController::setComponentState()
2020-12-17 21:50:04 +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
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
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
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
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
e2ba9c13f1
Add IAudioProcessor instance to ComponentInstance
...
So we don't have to these expensive casts every time.
2020-12-14 13:18:47 +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
7341fab0ea
Implement IComponent::setActive()
2020-12-13 22:17:06 +01:00
Robbert van der Helm
43296675f6
Implement IComponent::activateBus()
2020-12-13 22:07:45 +01:00
Robbert van der Helm
5b6a8ebfac
Implement IComponent::getRoutingInfo()
2020-12-13 21:51:56 +01:00
Robbert van der Helm
583645bb46
Add a holder for component contexts and pointers
...
When implementing the other component interfaces we want to be able to
store the `FUnknownPtrs`.
2020-12-13 21:31:59 +01:00
Robbert van der Helm
9df812952e
Implement IComponent::GetBusInfo()
2020-12-13 16:56:09 +01:00
Robbert van der Helm
34b2fa8905
Implement IComponent::getBusCount()
2020-12-13 16:18:13 +01:00
Robbert van der Helm
116b618ac5
Implement IComponent::setIoMode()
2020-12-13 16:12:30 +01:00
Robbert van der Helm
3f3759e5fc
Log calls to unimplemented functions
2020-12-13 16:01:52 +01:00
Robbert van der Helm
32c1028736
Implement IPluginFactory3::setHostContext()
...
Now the plugin factories are fully implemented (at least, functionality
wise, we still can't create most kinds of objects).
2020-12-13 15:53:39 +01:00
Robbert van der Helm
7c5f7a2e0e
Fully implement IPluginBase::initialize()
...
We can now pass host contexts around.
2020-12-13 15:16:11 +01:00
Robbert van der Helm
0c64aabeea
Add a partial YaHostApplication implementation
2020-12-13 14:46:17 +01:00
Robbert van der Helm
e21ee31ee8
Implement plugin side of IPluginBase::initialize()
2020-12-13 14:30:51 +01:00
Robbert van der Helm
39984ad442
Use the new approach for creating plugin factory
...
Directly serializing and deserializing into objects was and more
boilerplate heavy (since we now need two implementations even though we
only use one), and also much less flexible because we can't wrap
payloads in structs or provide optional values that way.
2020-12-12 21:53:38 +01:00
Robbert van der Helm
f637e6ad18
Rename Create/Destroy to Construct/Destruct
...
This is less likely to clash with names used by interfaces and it's a
bit clearer what's going on (since they are basically proxies for
constructors and destructors).
2020-12-12 16:18:47 +01:00
Robbert van der Helm
68084bc555
Implement IComponent::terminate()
2020-12-12 16:18:47 +01:00
Robbert van der Helm
0214221c3a
Rename handle_plugin_dispatch to *_run
...
Since run() is now the general `HostBridge()` function to listen for
incoming events.
2020-12-12 13:34:30 +01:00
Robbert van der Helm
4f8fe21fa9
Merge branch 'master' into feature/vst3
2020-12-12 13:33:36 +01:00
Robbert van der Helm
712736e74a
Prevent a deadlock in plugin group handling
...
This was a nasty race condition that only seemed to pop up with Spitfire
plugins in REAPER, but it could also happen elsewhere. The
`active_plugins_mutex` was getting locked from the message loop, but the
plugin would block until `effOpen()` had been called. But because the
mutex was locked by the message loop we would never get to handling
`effOpen()`. Passing the pointer directly both removes this unnecessary
locking and fixes the issue.
2020-12-12 12:44:01 +01:00
Robbert van der Helm
e24cecc6d7
Use the univeral tresult in IComponent creation
2020-12-11 23:54:30 +01:00
Robbert van der Helm
699ddfd2ea
Implement YaComponentPluginImpl destructor
...
When the object gets dropped through the reference counting system, the
object should also be dropped in the Wine plugin host.
2020-12-11 22:59:32 +01:00
Robbert van der Helm
cdb9dae2df
Rename YaComponent::Arguments to CreateArgs
2020-12-11 22:43:12 +01:00
Robbert van der Helm
3e13eb9e46
Merge branch 'master' into feature/vst3
2020-12-11 13:02:49 +01:00
Robbert van der Helm
29f1754527
Link to the issue instead of listing issue number
2020-12-11 13:01:45 +01:00
Robbert van der Helm
c306048988
Fix hanging processes for good #69
2020-12-11 12:40:50 +01:00
Robbert van der Helm
41b79720ca
Merge branch 'master' into feature/vst3
2020-12-11 00:50:43 +01:00
Robbert van der Helm
ac0d83e555
Fix concurrency issue in plugin group shutdown
2020-12-10 21:41:04 +01:00
Robbert van der Helm
75ed978a1b
Fix pointer dereference after move
2020-12-08 23:08:07 +01:00
Robbert van der Helm
2e6184171c
Use std::array for serializing UIDs
...
These are easily assignable and we have to convert between char
pointers, char arrays and UID objects all the time anyways.
2020-12-08 23:00:44 +01:00