Commit Graph

60 Commits

Author SHA1 Message Date
Robbert van der Helm 15efbd462f Fix alignment in version out of sync warning 2022-09-11 19:18:03 +02:00
Robbert van der Helm 6be5fbbcf4 Mention the CLAP feature in the init message 2022-09-11 19:18:03 +02:00
Robbert van der Helm c598ca08e1 Update notifications for yabridge 4.0 2022-06-08 14:45:31 +02:00
Robbert van der Helm 8c10edf861 Add explicit virtual default destructors
We need to silence the warning about this because Steinberg doesn't
declare their base class destructors as virtual (because of Windows ABI
compatibility issues). But we can still do it inside of yabridge to have
at least a bit more safety.
2022-05-18 18:44:15 +02:00
Robbert van der Helm 773b101cd4 Update error messages for chainloading changes 2022-04-16 20:37:11 +02:00
Robbert van der Helm 6f16eb5c76 Print library path in the initialization message
This is useful when chainloading, since it now tells you where eactly
it's loading the library from.
2022-04-16 20:37:11 +02:00
Robbert van der Helm d73a0041eb Find the correct library file from the chainloader
Instead of using this hardcdoed path.
2022-04-16 20:37:11 +02:00
Robbert van der Helm 0487947d91 Export chainloader functions in the plugin libs
These can be called from the new chainlaoder libraries to use yabridge
without needing copies of the full fat `libyabridge-{vst2,vst3}.so`
libraries.
2022-04-16 20:37:11 +02:00
Robbert van der Helm 46af07748b Move desktop notifications to its own header
We'll need to use this from the chainloader.
2022-04-16 20:37:10 +02:00
Robbert van der Helm fde90d7bc3 Pass plugin path around instead of redetecting
This is now set only once at the top level. This is needed for the
chainloading to work because we'll need to set the path when we create
the bridge.
2022-04-16 20:37:10 +02:00
Robbert van der Helm 1fec4c8860 Change the description in the GPL header 2022-04-16 20:37:10 +02:00
Robbert van der Helm 7b3afa4043 Replace Boost.Dll with our own function
Now we no longer rely on anything from Boost. Later we'll move the path
detection to the very beginning of the plugin bridge initialization so
it can be set from the coming chainloader libraries.
2022-04-16 20:37:10 +02:00
Robbert van der Helm 556b0e38f9 Replace Boost.Asio with standalone Asio library
We had to add an even hackier hack now to get Boost.Process to
interoperate with Asio's IO contexts. This will be replaced later when
we replace Boost.Process.
2022-04-14 23:42:12 +02:00
Robbert van der Helm d2d4cf4ea9 Replace most uses of Boost.{Filesystem,Process}
With the `ghc::filesystem` dependency from the previous commit. If we
can replace the rest of the Boost.Filesystem dependency then we can get
rid the one nasty runtime dependency we have, and it will make
implementing the chainloading simpler since can reuse more code without
bringing in Boost.
2022-04-14 23:42:12 +02:00
Robbert van der Helm 9eb1d2af3d Change RTTIME warnings and doc for next PW release
The next release will use regular realtime scheduling with no
`RLIMIT_RTTIME` when the user has the permissions to do so by default.
2022-01-17 15:33:42 +01:00
Robbert van der Helm 0b9a16cf40 Change the naming scheme for class field members
I'm not a fan of Hungarian notation, but C++ kind of needs it with its
implicit `this`. And of all the common options for this, I find
suffixing members with an underscore the least offensive one.
2022-01-01 21:07:17 +01:00
Robbert van der Helm e0ab24e645 Update copyright headers
Happy new year!
2022-01-01 18:32:10 +01:00
Robbert van der Helm 3950f055ad Fix wording in new warning messages 2021-09-21 15:54:19 +02:00
Robbert van der Helm 7760c4bb6c Show desktop notification for low RLIMIT_RTTIME
For the same reason as the last commit, since people otherwise just miss
this.
2021-09-21 15:40:32 +02:00
Robbert van der Helm e347944e38 Show desktop notification for the memlock warning
Since most people don't try running things in a terminal.
2021-09-21 15:32:47 +02:00
Robbert van der Helm 5613248cda Gate the new resizing behavior behind new option
This interferes with resizing plugins using resize handles, and since it
only helps with two buggy plugins this seems like the best solution
here.
2021-08-16 22:39:13 +02:00
Robbert van der Helm cc9226a3fc Remove editor_double_embed
It's no longer needed after the `fix_local_coordinates()` change from a
fa12c64866a8b79e862bc5db4c4b092a4b762689.
2021-08-16 21:21:57 +02:00
Robbert van der Helm 7b05e038c3 Reword memlock warning message 2021-07-23 15:59:13 +02:00
Robbert van der Helm 0e57f410a9 Warn on startup if RLIMIT_MEMLOCK is set too low
This should diagnose issues like #119.
2021-07-18 23:13:51 +02:00
Robbert van der Helm 5fc7acccd1 Show a notification on version mismatch
Between the plugin and the Wine plugin host application.
2021-07-13 22:14:31 +02:00
Robbert van der Helm d459649f49 Move most of the Meson build to subdirectories
We sadly cannot call `shared_library()` and `executable()` in these
subdirectories while still maintaining the same `build/` directory
structure, but this is still much cleaner. All of the other build
artifacts are now also gone from the root of `build/` so it's cleaner
overall.
2021-07-01 14:57:23 +02:00
Robbert van der Helm c5afb7f215 Append a link to the plugin to the notifications 2021-06-28 13:05:32 +02:00
Robbert van der Helm e5187db9ef Mark 32-bit yabridge libraries
So we're able to immediately spot that someone is using them from the
logs.
2021-06-24 13:48:23 +02:00
Robbert van der Helm 0156b61e64 Show notification when plugin host fails to start
This one's a bit generic since the relevant output from the Wine process
will have already been printed to the logger before this point.
2021-06-22 17:13:30 +02:00
Robbert van der Helm 466fe3abcf Run $WINELOADER --version under the correct env
This makes the initialization message reflect the correct Wine version
when using a `WINELOADER` script to change between Wine versions
depending on the Wine prefix.
2021-06-21 13:00:05 +02:00
Robbert van der Helm a7496fae77 Add thread names 2021-06-06 23:45:47 +02:00
Robbert van der Helm 68d5d33cba Add a warning for low RLIMIT_RTTIME values
This will make it much easier to spot issues caused by PipeWire.
2021-05-27 14:22:58 +02:00
Robbert van der Helm e4ca520b64 💥 Redo all higher order template functions
This does what we did for a few functions in the last few commits for
every function. We now use either the `std::invocable` concept or our
own `invocable_returning` concept wherever possible to make sure we pass
function types to these template functions, since constraint errors are
a lot more readable than template deduction errors. And instead of
having to specify the return type as a template argument, we now just
use `std::invoke_result_t<F>` instead. The VST3 message handling
functions are still using the good old `typename F` since those are
overloaded polymorphic functions. This was also a good moment to modify
`AdHocSocketHandler::send()` to allow functions returning void (this got
rid of an old fixme where we had to return some dummy value from a
function instead of just not returning anything).
2021-05-20 01:03:58 +02:00
Robbert van der Helm 95badeb1bc Add a way to disable pipes for the Wine host
For some reason ujam plugins (and other plugins made with the Gorilla
Engine, like the LoopCloud plugins) will throw a `JS_EXEC_FAILED` error
when trying to load the plugin while either of the STDOUT or STDERR
streams is pointing to a pipe. Simply redirecting the output to a file
fixes this. By default we'll write the output to
`<temporary_directory>/yabridge-plugin-output.log`, but you can also set
the new `disable_pipes` option to `"/dev/null"` to completely throw away
all output.

This addresses #47.
2021-05-18 17:59:43 +02:00
Robbert van der Helm 37257298a1 Add noexcept qualifications on the plugin side
See the last few commits.
2021-05-14 18:22:58 +02:00
Robbert van der Helm 757fb6d372 Pass the PID of the native host to the Wine hosts
We need this for our watchdog.
2021-05-01 17:13:16 +02:00
Robbert van der Helm 7881e0116e Rename host_guard_handler to host_watchdog_handler
To keep the terminology consistent.
2021-05-01 15:46:27 +02:00
Robbert van der Helm 383b0c3f10 Remove the cache_time_info option
The new time info caching behaviour supersedes this by getting rid of
callbacks altogether.
2021-04-29 00:46:43 +02:00
Robbert van der Helm 93f089eca7 Always set FTZ instead of gating it behind a flag
After a quick round of testing it seems like REAPER doesn't always
enable this on the audio thread, but Bitwig, Ardour, Carla and Renoise
do. So it should be safe to just get rid of the option and to leave this
enabled all the time.
2021-04-28 12:07:14 +02:00
Robbert van der Helm 2be41da9b6 Add compatibility option to force flushing to zero
This prevents Kush Audio REDDI from taking down the DAW when the host
passes it denormalized audio to process. I've discovered that the issue
with this plugin had to do with denormals in the issue linked below, but
I didn't realize that we can just enable the FTZ flag for plugins that
don't already do so.

https://github.com/osxmidi/LinVst/issues/174
2021-04-27 23:33:50 +02:00
Robbert van der Helm 3a73fb9689 Allow hiding the DAW name for VST2 plugins
This can be useful when plugins have (broken) host-specific behaviour
that you want to avoid. I'll later add a list of host/plugin
combinations where this may be useful to the readme.
2021-04-27 18:41:36 +02:00
Robbert van der Helm a297866d45 Add way to use 32-bit VST3 when both are installed
Otherwise we would always use the 64-bit version and there would be no
way to use the 32-bit version, if version for some reason works better.

Relates to #80.
2021-04-13 19:28:36 +02:00
Robbert van der Helm b036230067 Work around a regression in Wine 6.5
Killing a Wine process no longer terminates its threads, see the
changelog entry and NOTE for more information.
2021-03-27 17:41:15 +01:00
Robbert van der Helm 260aba393c Fix alignment in initialization message 2021-02-14 13:50:55 +01:00
Robbert van der Helm f07503b9b6 Print the matched config file section
To make it more obvious where settings are being set from.
2021-02-14 13:50:53 +01:00
Robbert van der Helm 0adca3e33c Revert "Remove cache_time_info and always cache time info"
This reverts commit cfb171c991.

No idea why, but this cache breaks SPL Transient Designer Plus. Perhaps
it overwrites the time info?
2021-01-30 02:37:27 +01:00
Robbert van der Helm cfb171c991 Remove cache_time_info and always cache time info
It sort of goes against yabridge's principles to not do these
unnecessary `audioMasterGetTime()` calls if the plugin does that, but it
also hurts the user experience to not have this as a default.
2021-01-30 00:20:35 +01:00
Robbert van der Helm ffe46e225c Relay Wine STDIO with SCHED_OTHER
I haven't seen this cause issues myself, but it would not surprise me if
a plugin that produces a constant stream of FIXMEs would steal resources
from audio processing if the threads that are relaying those messages
are set to SCHED_FIFO.
2021-01-24 17:02:56 +01:00
Robbert van der Helm 96511ca8a3 Make realtime priority setting more granular
On the plugin side.
2021-01-23 14:43:06 +01:00
Robbert van der Helm dac817323b Add an option to force drag-and-drop under REAPER
This works around a long standing bug in REAPER itself that would
prevent you from dragging files onto any plugin editor window.
2021-01-19 15:11:27 +01:00