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