Commit Graph

227 Commits

Author SHA1 Message Date
Robbert van der Helm 2fbd14908a Split communication/vst2.h into common and VST2
So we can reuse the generic bits for our VST3 implementation.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 46bc0301af Move communication.h to communication/vst2.h 2020-12-07 18:28:16 +01:00
Robbert van der Helm 9ece1b916e Rename plugin.cpp to vst2-plugin.cpp 2020-12-07 18:28:16 +01:00
Robbert van der Helm 4291083a46 Rename PluginBridge to Vst2PluginBridge 2020-12-07 18:28:16 +01:00
Robbert van der Helm 6195caf53e Move src/plugin-bridge to src/bridges/vst2 2020-12-07 18:28:16 +01:00
Robbert van der Helm 9d40e04a62 Update all references to libyabridge.so 2020-12-07 18:28:16 +01:00
Robbert van der Helm 84d00b568b Add a more distinct wrapper around chunk data 2020-12-07 02:43:23 +01:00
Robbert van der Helm 7f7da50282 Log processing cycles on verbosity level 2 2020-12-07 02:08:03 +01:00
Robbert van der Helm 23d5567e72 Add a time info caching compatibility option #62
This is needed to get good performance out of SWAM Cello until this
issue is fixed by the plugin.
2020-11-30 14:49:02 +01:00
Robbert van der Helm 21b0f70eda Rename get_modified_search_path() for clarity 2020-11-20 15:39:29 +01:00
Robbert van der Helm c69037b649 Always search for host in ~/.local/share/yabridge 2020-11-20 14:24:42 +01:00
Robbert van der Helm abb2206970 Fix typos in the word 'Boost'
Apparently I type very quickly.
2020-11-20 01:15:51 +01:00
Robbert van der Helm b93f0ddb8b Don't depend on the parallel STL
We were not linking with TBB, and it's a bit of a waste to require it
just for this one unused function.
2020-11-13 13:42:06 +01:00
Robbert van der Helm 7931f38066 Remove the deprecated use-* compilation options 2020-11-08 12:36:47 +01:00
Robbert van der Helm 5486d91201 Fix style 2020-11-07 23:17:00 +01:00
Robbert van der Helm acdbcaca6a Fix plugin host fallover behaviour
GroupHost::running() would sometimes cause plugins to get terminated
prematurely when connecting to another plugin's group host process since
the plugin's own group host process has exited.
2020-11-07 23:11:49 +01:00
Robbert van der Helm a0c0a86e2c Drop the separate effProcessEvents socket
Now that event handling is fully concurrent and thus no longer gets
blocked by the Win32 message loop.
2020-11-07 20:54:33 +01:00
Robbert van der Helm 42032c5c2d Fix the old accumulative process() function 2020-11-07 18:17:21 +01:00
Robbert van der Helm 1c7e866609 No longer return a lambda in passthrough_event()
Now that it's no longer used directly this is no longer needed, and it's
much clearer without the lambda.
2020-11-06 17:17:36 +01:00
Robbert van der Helm ba6381e3ae Rename EventHandler::{send,receive} to *_event(s?)
Since it does something way more involved than
`SocketHandler::{send,receive_multi}`, and that makes it a bit confusing
if you don't already know about that (and even if you do).
2020-11-01 12:01:50 +01:00
Robbert van der Helm fa01ac843b Replace all non-group sockets with SocketHandler
This greatly reduces the amount of boilerplate and potential for error.
2020-10-30 13:30:08 +01:00
Robbert van der Helm 28886e7073 Replace all threads with Win32Thread in Wine host 2020-10-27 18:29:38 +01:00
Robbert van der Helm 058eb9f2ee Fix winedbg warning 2020-10-27 11:56:00 +01:00
Robbert van der Helm e51c7f7ae3 Get rid of hack_reaper_update_display
It is now no longer necessary.
2020-10-27 11:13:39 +01:00
Robbert van der Helm 8d7826f1df Handle incoming events from off-threads separately
On the Wine side we want to handle most events on the main UI thread.
We'll assume any events coming in from a secondary socket are safe and
can be handled directly.
2020-10-26 13:45:37 +01:00
Robbert van der Helm 74c3cab046 Move event handling logic to a dedicated class
Now all pieces are in place to allow handling events over multiple
socket connections.
2020-10-26 11:40:38 +01:00
Robbert van der Helm 54ed69c408 Merge events.h into communication.h 2020-10-25 21:37:04 +01:00
Robbert van der Helm 4b53342514 💥 Encapsulate and rework all socket logic
This is a pretty huge change that will be important for being able to
handle nested or mutually recursive `dispatch()` and `audioMaster()`
calls. This sadly all had to be done in a single commit, so here's a
summary:

- `src/common/sockets.h:Sockets` contains all sockets on both the plugin
  and the Wine host side, and is used to both listen on and connect to
  the sockets.
- Sockets and other temporary files respect `$XDG_RUNTIME_DIR` instead
  of being dumped in `/tmp`.
- All sockets now have a unique endpoint in
  `/run/user/<uid>/yabridge-<plugin_name>-<random_id>/`. This is
  important for when we want to have multiple socket connections for
  handling `dispatch()` and `audioMaster()`.
- Because of the above, we no longer clean up the socket endpoint files
  after the connection gets established during initialization. Instead
  we'll remove the socket base directory when shutting down.
2020-10-25 21:24:56 +01:00
Robbert van der Helm db02fa1c43 Fix issue with closing sockets in plugin groups
As per Boost.Asio's manual, an explicit `socket.shutdown()` is needed
before calling `close()`. For some reason this worked fine in almost
every situation, but when hosting both a plugin hosted within a group
host process and a normal individually hosted plugin within a single
process, and then removing those two plugins in order, the
`host_vst_dispatch` socket of the first plugin never got closed. This
would hang the entire shutdown sequence to hang on the
`dispatch_handler` jthread.

First discovered in #45
2020-10-22 14:05:59 +02:00
Robbert van der Helm ce385f39d3 Use vfork() for spawning processes #45 2020-10-21 22:30:50 +02:00
Robbert van der Helm a1162c2256 Print invalid and unknown options on startup 2020-10-13 15:04:33 +02:00
Robbert van der Helm e7cbd9e21e Slightly clean up the libSwell message 2020-10-08 14:37:29 +02:00
Robbert van der Helm bfd4553d84 Change punctuation in new libSwell message 2020-10-01 14:23:39 +02:00
Robbert van der Helm d4787fc120 Clarify libSwell message and mention workaround 2020-09-29 18:13:39 +02:00
Robbert van der Helm 32b3e106b1 Fixed potential use-after-free on detached threads
This could sometimes cause REAPER's plugin scanning to crash when the
stars aligned in the wrong way since the stop token would no longer
exist.
2020-09-28 22:31:53 +02:00
Robbert van der Helm ae402aa805 Fix plugin groups outside of Wine prefixes
Boost.Process's `boost::process::environment::at` throws when the
environment variable does not exist, as opposed to `operator[]` which
falls back to an empty value.
2020-09-27 17:26:16 +02:00
Robbert van der Helm 8198a73742 Add support for double precision audio #34
So far I've only seen REAPER running iZotope Rx plugins utilize this.
2020-08-24 16:13:29 +02:00
Robbert van der Helm b452f961db Add option to work around bugs in REAPER/Renoise
This is not ideal since it requires the user to know about this option
and to create a config file, but I think it's the best we can do without
compromising on yabridge's transparency and 'zero hacks' philosophy.

See #29 and #32.
2020-08-17 15:49:16 +02:00
Robbert van der Helm 6f5dae90a6 Set realtime priorities if available
This significantly reduces the latency with no real drawbacks from what
I've noticed. Wineserver is still run using the normal scheduling
policies because from my testing running that with realtime priority
that can actually increase latencies, although doing so will greatly
reduce the variance in processing time.
2020-07-23 19:57:50 +02:00
Robbert van der Helm 9d33b9989e Align config options in startup message 2020-07-23 18:39:48 +02:00
Robbert van der Helm 967856fc1b Add a configuration option for double embedding
Only plugin that needs this so far is PSPaudioware's E27 (and likely
other PSP plugins with expandable GUIs).
2020-07-23 15:59:00 +02:00
Robbert van der Helm 523f77d334 Use designated initializers for complex structs
This was one of the main reasons why I wanted to switch to C++20, I just
forgot to do it.
2020-07-23 14:12:07 +02:00
Robbert van der Helm cd02ab5fc9 Send the configuration from plugin to Wine host
Next we can add some options for different plugin editor behaviours for #27.
2020-07-22 17:15:55 +02:00
Robbert van der Helm 2e77c03464 Move the configuration object to src/common/ 2020-07-22 13:55:29 +02:00
Robbert van der Helm 6f772ca899 Send the AEffect object over a new control socket
We'll use the same socket to send the configuration data back to the
plugin.
2020-07-22 13:36:29 +02:00
Robbert van der Helm c83680a21a Remove old workaround for rare Ubuntu path issue
This got fixed properly in `get_file_location()`, but this function
still contained an old hack.
2020-07-21 01:04:20 +02:00
Robbert van der Helm 836aefcfbb Verify that the PATH has been set up correctly
When creating copies with yabridgectl. This should at least give an
advance warning that some additional steps are required when first
setting up yabridge.
2020-07-16 16:56:27 +02:00
Robbert van der Helm d86b57681b Distinguish between active group hosts and zombies 2020-06-20 16:58:43 +02:00
Robbert van der Helm 61cde0bd43 Use std::jthread 2020-06-20 16:16:12 +02:00
Robbert van der Helm f5f6f04016 Rearrange the try-catch in the thread handlers
It's a bit clearer this way. I would prefer using jthreads here, but we
would still need this try-catch block since there's no way to cancel
synchronous Boost.Asio socket operations other than closing the socket.
2020-06-20 15:47:30 +02:00