Commit Graph

119 Commits

Author SHA1 Message Date
Robbert van der Helm ed8e3ba114 Refactor event receiving to optimize MIDI handlign
This keeps compatibility with some weirdly designed plugins (such as
Kontakt) while avoiding some unnecessary data transformations. Before
this we'd convert from a `DynamicVstEvents` object to a `VstEvents`
object, back to a `DynamicVstEvents` and then finally back into another
`VstEvents` object. With this change we can skip the second half of the
conversions.
2020-05-01 14:06:06 +02:00
Robbert van der Helm 6c496da455 Clean up after reverting buffer handling change
This is what you get from not taking any breaks.
2020-04-30 22:45:22 +02:00
Robbert van der Helm eb94f63e2c Revert "Clean up chunk buffer retrieval for effGetChunk"
This reverts commit fb8fe035d8.

I was getting things mixed up.
2020-04-30 22:41:07 +02:00
Robbert van der Helm 6266072641 Explicitly list opcodes that should return strings
The automatic detection works fine in every case I've tested other than
Fabfilter plugins, but this is probably for the best.
2020-04-30 20:55:49 +02:00
Robbert van der Helm 2e9adbe310 Always write message sizes in 64-bit integers
This will make sure the sizes match on both the 32 and 64 bit host
applications. This way only the 32-bit application will have to convert
between 32 and 64 bit integers.
2020-04-30 12:32:27 +02:00
Robbert van der Helm 027d9a96d5 Always use 64-bit pointer types for serialization
This way the 32-bit host can cast them down to 32-bit integers when
needed, and the serialization pipeline can stay fixed. We're not passing
any pointers directly to the other application anyway so this should be
safe!
2020-04-29 17:17:33 +02:00
Robbert van der Helm c9060e984d Add another flag for enabling a bit bridge build 2020-04-29 16:55:47 +02:00
Robbert van der Helm 7ce42e4306 Add support for effGetMidiKeyName
Not a lot of plugins use it, but it's really nice to have when they do.
2020-04-28 12:54:36 +02:00
Robbert van der Helm fb8fe035d8 Clean up chunk buffer retrieval for effGetChunk 2020-04-28 12:48:31 +02:00
Robbert van der Helm ed9428da83 Fix chunk size formatting in log messages 2020-04-28 12:28:41 +02:00
Robbert van der Helm 641351d525 Also filter out the event with opcode 52
Not sure what this is, but it's called by Bitwig every time a buffer is
being processed.
2020-04-28 12:04:09 +02:00
Robbert van der Helm e515547d5a Add a todo on another event to filter 2020-04-27 18:56:14 +02:00
Robbert van der Helm e69d08c503 Add assertion for bytes written while sending
To avoid problems like 13dcb2f74a in the
future.
2020-04-27 18:00:01 +02:00
Robbert van der Helm f0d16c4afb Add note on potentially misbehaving type detection 2020-04-27 16:42:04 +02:00
Robbert van der Helm 13dcb2f74a Fix handling of large chunk data 2020-04-27 16:41:55 +02:00
Robbert van der Helm 527db1f49f Use different types for strings and binary data 2020-04-27 00:51:36 +02:00
Robbert van der Helm af6ae2c2ad Fix capitalization of the word MIDI 2020-04-26 18:19:10 +02:00
Robbert van der Helm aeac8e87fa Implement effGetParameterProperties 2020-04-26 16:53:34 +02:00
Robbert van der Helm aee890fbf6 Remove the now unused ability to skip opcodes
If this is needed again in the future (it shouldn't be), then it should
be re-implemented using a separate function.
2020-04-26 16:30:11 +02:00
Robbert van der Helm 0ce9c1e3a4 Add another less verbose debug level 2020-04-26 15:42:01 +02:00
Robbert van der Helm b17c413de4 Add the generated version header to the file list
Otherwise it may not be generated yet on first build.
2020-04-26 14:29:08 +02:00
Robbert van der Helm 5ce20be9d9 Allow storing and loading of larger chunks 2020-04-25 17:35:02 +02:00
Robbert van der Helm 4a1133146a Generate a header containing git version info
It contains the last annotated tag, and possibly also the number of
commits since then and the hash of the last commit.
2020-04-25 16:14:14 +02:00
Robbert van der Helm 2e36c64796 Return a 0 for skipped events
Not that any events get skipped at the moment.
2020-04-21 18:13:22 +02:00
Robbert van der Helm b13d7d554d Prevent rare race conditions with get/setParameter
I've never seen it happen, but in theory they could be called
simultaneously.
2020-04-19 16:14:22 +02:00
Robbert van der Helm 9f3ed85208 Replace std::monostate with std::nullptr_t
This represents the underlying meaning better since we're mostly dealing
with the `data` void pointer argument.
2020-04-19 16:05:37 +02:00
Robbert van der Helm 717ffb719d Remove resolved todo 2020-04-19 16:05:37 +02:00
Robbert van der Helm 106d1e3907 Use lock guards for mutexes 2020-04-17 15:37:03 +02:00
Robbert van der Helm eed4677ed3 Fix VstTimeinfo responses and allow null responses
The host is allowed to return a null pointer if it doesn't support the
query.
2020-04-14 15:59:23 +02:00
Robbert van der Helm b5b3b69f67 Fix typos 2020-04-09 00:40:50 +02:00
Robbert van der Helm effe584373 Actually only initialize the first value 2020-03-28 23:09:05 +01:00
Robbert van der Helm 8ab5fff914 Fix audioMasterSpecific related segfaults
Not initializing our buffer is fine if something is going to write to
it, but in this case the default way to handle
`audioMasterSpecific` (and any other opcode without specific behaviour)
would be to treat it as a writable string. Since the host wasn't
actually writing to it we would just send some old data from the stack
back which obviously would cause some plugins to crash.
2020-03-28 22:56:48 +01:00
Robbert van der Helm 629fa72e0c Allow for an arbitrary number of midi events
By building the object on the heap in a buffer. I preferred the old
solution but this is more flexible.
2020-03-28 14:07:11 +01:00
Robbert van der Helm cc52c87f34 Properly handle effGet{Input,Output}Properties
Apparently the plugin needs the actual contents of the struct for this
to work.
2020-03-26 16:24:49 +01:00
Robbert van der Helm a85e936059 Reverse engineer IO related opcodes 2020-03-26 15:58:15 +01:00
Robbert van der Helm d2be82285a Make sure messages can't get out of order 2020-03-23 22:33:28 +01:00
Robbert van der Helm f1f7523248 Make the GUI embedding work
There's still a few things that need fixing.
2020-03-19 17:29:30 +01:00
Robbert van der Helm eebfceff56 Implement the rest of the GUI events
The GUI is still not updating though.
2020-03-19 00:58:03 +01:00
Robbert van der Helm 1c17513936 Move all window handling to the Wine host side 2020-03-17 21:31:19 +01:00
Robbert van der Helm d0a86887d3 Explicitely handle editor opening failures 2020-03-17 20:54:49 +01:00
Robbert van der Helm e7e1b26455 Add the base for GUI handling
Still need to embed the opened window into the window provided by the
host.
2020-03-17 01:51:02 +01:00
Robbert van der Helm 44a953c2d2 Change argument order for event handling functions 2020-03-17 00:53:09 +01:00
Robbert van der Helm 7172a42c67 Prevent data races in host callbacks 2020-03-16 13:58:49 +01:00
Robbert van der Helm 37b0e72d4a Increase the number of permitted midi events 2020-03-12 23:17:42 +01:00
Robbert van der Helm 8464706336 Handle AEffect object updates 2020-03-11 16:33:44 +01:00
Robbert van der Helm ea8feb07a9 Reorder arguments 2020-03-11 16:08:09 +01:00
Robbert van der Helm 6ab7af10f9 Use the fancy new variant instead of strings 2020-03-11 16:04:49 +01:00
Robbert van der Helm 8c187e3ca5 Use const references for logging paylaod data 2020-03-11 15:58:56 +01:00
Robbert van der Helm 1ee0ffef8b Wrap event result data in an std::variant
Gets a bit more complicated this way, but this avoids having to use
string to manually serialize and deserialize arbitrary objects.

The new options for `AEffect` and `VstTimeInfo` structs are not yet
used.
2020-03-11 15:52:56 +01:00
Robbert van der Helm aa31665666 Move event handling its own file 2020-03-11 14:42:09 +01:00