*** Magnus_RM has quit IRC | 00:08 | |
*** edogawa has quit IRC | 01:10 | |
*** ricardocrudo has quit IRC | 01:52 | |
*** drobilla has quit IRC | 02:45 | |
*** artfwo has quit IRC | 03:06 | |
*** edogawa has joined #lv2 | 07:32 | |
*** ventosus has joined #lv2 | 07:55 | |
*** deva has joined #lv2 | 07:59 | |
*** aelc665 has joined #lv2 | 08:43 | |
deva | In order for a plugin to have the lv2:hardRTCapable attribute set it is required that "The plugin will not access files, devices, pipes, sockets, IPC or any other mechanism that might result in process or thread blocking within its Audio class functions." | 08:54 |
---|---|---|
deva | Does this imply that it is not allowed to have a mutex guard on getter methods? | 08:54 |
deva | The reason I'm asking is, that it /will/ block, but the amount of time it blocks will be very small - along the lines of the time it takes to make a single assignement for example. | 08:56 |
falktx | mutex lock blocks | 09:09 |
falktx | you can use trylock | 09:09 |
falktx | if it's just a variable or a pointer you can use atomics | 09:10 |
*** falktx has quit IRC | 09:26 | |
*** ricardocrudo has joined #lv2 | 10:00 | |
rgareus | deva: all locks are not realtime safe. there's no such thing as "very short only". | 10:17 |
rgareus | deva: http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing | 10:17 |
deva | rgareus, That's what I thought - just wanted to be absolutely sure. | 10:19 |
deva | But then I think it should be added to the list of "don'ts" in http://lv2plug.in/ns/lv2core/#hardRTCapable bullet 3 | 10:20 |
rgareus | deva: the list of things to not do is pretty much endless. | 10:34 |
rgareus | it really boils down to "If you don't know how long it will take, don’t do it." | 10:34 |
rgareus | and ^^ is in CPU cycles. | 10:34 |
rgareus | a lock can take any amount of cycles, memory-barries,... whatnot | 10:35 |
rgareus | on the other side: a for loop over every sample to process a signal is very well defined. | 10:35 |
*** ricardocrudo has quit IRC | 10:36 | |
rgareus | rt-safe code is usually O(1) or O(n) audio-samples <> CPU instructions | 10:37 |
deva | rgareus, But if you have a non-realtime thread running in the background doing for example sample loading, then how would you syncronize between the realtime thread and this loader thread? | 10:41 |
deva | Or is this just not possible in a hard realtime scenario? | 10:41 |
rgareus | deva: lock free ringbuffers | 10:45 |
rgareus | deva: see the LV2 worker for example | 10:45 |
rgareus | deva: you queue the work in a rinbuffer.. response arrives in a 2nd ringbuffer | 10:45 |
rgareus | deva: the LV2 worker also has various edge cases handled correctly. e.g it becomes blocking during freewheeling. | 10:46 |
deva | That would be a solution, yes | 10:47 |
rgareus | falktx already mentioned trylock. | 10:56 |
rgareus | useful in jack clients where one can easily create custom threads. | 10:57 |
rgareus | not so much for plugins. I'm not aware of any plugin standard that has an API to create threads or get the scheduler priority of the host. | 10:58 |
*** ricardocrudo has joined #lv2 | 11:20 | |
*** wumpus has quit IRC | 13:19 | |
*** wumpus has joined #lv2 | 13:21 | |
*** drobilla has joined #lv2 | 15:04 | |
* drobilla wonders how smart git is about merging if commit messages are rewritten | 15:09 | |
drobilla | rgareus: In related ultra nitpickey news, capitalize your summary lines :) | 15:09 |
drobilla | This approach to plugins versioning seems like it would absolutely murder startup time | 15:12 |
drobilla | ventosus: Similarly, omit the trailing "." | 15:17 |
rgareus | drobilla: I'll keep it in mind. | 15:19 |
rgareus | drobilla: Always capitalize or only if it's a full sentence? | 15:20 |
* drobilla is also trying to clean up his act WRT git conventions | 15:20 | |
drobilla | rgareus: It's supposed to be headline style, so single full sentence, always capitalized, no period | 15:21 |
ventosus | drobilla: ok. want me to rebase? | 15:22 |
drobilla | Preferably describing an action, e.g. start with a verb | 15:22 |
drobilla | ventosus: Nah | 15:22 |
rgareus | drobilla: I don't experience a noticable performance penalty due to the dup check | 15:22 |
drobilla | ventosus: params is really pushing how much state makes sense for this static cases style, but I can't come up with a better pattern... | 15:23 |
drobilla | rgareus: Creating a new LilvWorld seems particularly nutty, but I need to read it more | 15:23 |
rgareus | drobilla: that's only done in case there is a duplicate | 15:23 |
rgareus | drobilla: there might be a better way to do this. but I don't think there is. | 15:24 |
drobilla | rgareus: Not sure. There's is now a double duplicate check | 15:28 |
drobilla | Hm, doesn't look like there is a rule that minorversion and microversion must be in manifest.ttl. Should be | 15:29 |
ventosus | drobilla: btw, shouldn't (property, value) pairs be put into a patch:body object property inside the patch:Put object according to the spec? | 15:30 |
drobilla | Best approach is probably to just do the initial manifest scan and decide what should be loaded before actually doing anything. No unloading | 15:30 |
drobilla | ventosus: mmm... yep | 15:31 |
rgareus | drobilla: then you'll have to parse all manifests first. and that approach will also fail for later cases: clients loads a bundle. | 15:33 |
rgareus | drobilla: my patch does not handle the latter case yet, but that won't be hard to add. | 15:33 |
*** tytel has joined #lv2 | 15:57 | |
*** aelc665 has quit IRC | 16:38 | |
*** rncbc has joined #lv2 | 16:54 | |
*** sigma6 has quit IRC | 17:06 | |
*** artfwo has joined #lv2 | 17:59 | |
*** rncbc has quit IRC | 18:41 | |
*** uncle-j_j has joined #lv2 | 18:41 | |
*** rncbc has joined #lv2 | 18:57 | |
*** falktx has joined #lv2 | 19:03 | |
*** rncbc has quit IRC | 19:14 | |
*** drobilla` has joined #lv2 | 19:30 | |
*** rncbc has joined #lv2 | 19:31 | |
*** _deva has joined #lv2 | 19:32 | |
*** _deva has quit IRC | 19:33 | |
*** kwmiebach_ has joined #lv2 | 19:33 | |
*** drobilla has quit IRC | 19:38 | |
*** deva has quit IRC | 19:38 | |
*** kwmiebach has quit IRC | 19:38 | |
*** rncbc has quit IRC | 19:43 | |
*** kwmiebach_ is now known as kwmiebach | 19:46 | |
*** HarryHaaren has joined #lv2 | 19:48 | |
*** ventosus has left #lv2 | 19:52 | |
*** deva has joined #lv2 | 20:15 | |
*** rncbc has joined #lv2 | 20:26 | |
*** uncle-j_j has quit IRC | 20:35 | |
*** uncle-j_j has joined #lv2 | 20:42 | |
*** ricardocrudo has quit IRC | 20:50 | |
*** drobilla` is now known as drobilla | 21:04 | |
*** ricardocrudo has joined #lv2 | 21:11 | |
*** deva has quit IRC | 21:22 | |
*** Magnus_RM has joined #lv2 | 22:07 | |
*** uncle-j_j has quit IRC | 22:48 | |
*** uncle-j_j has joined #lv2 | 22:50 | |
*** HarryHaaren has quit IRC | 23:04 | |
*** uncle-j_j has quit IRC | 23:10 | |
*** Magnus_RM has quit IRC | 23:13 | |
*** drobilla has quit IRC | 23:32 | |
*** timbyr__ has quit IRC | 23:32 | |
*** rncbc has quit IRC | 23:44 | |
*** timbyr__ has joined #lv2 | 23:48 |
Generated by irclog2html.py 2.13.0 by Marius Gedminas - find it at mg.pov.lt!