# LV2 Worker Extension # Copyright 2012 David Robillard # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. @prefix work: . @prefix lv2: . @prefix rdf: . @prefix rdfs: . @prefix xsd: . @prefix doap: . @prefix foaf: . a lv2:Specification , lv2:Feature ; rdfs:seeAlso , <../../meta/meta.ttl> ; doap:developer ; doap:name "LV2 Worker" ; doap:shortdesc "Support for a non-realtime plugin worker method." ; lv2:documentation """

This extension allows plugins to have a non-realtime worker method, with thread sychronisation and communication issues handled by the host. This allows plugins to perform non-realtime actions (such as loading files) using a simple and portable API without having to worry about the complexities of multi-threading.

Because the worker thread is implemented by the host, many plugins can share the same thread and communication buffers, which reduces bloat and fixed per-plugin buffer size limitations. The host has the power to implement threads in a suitable way, while plugins are simpler and thus less error-prone.

This interface is designed to gracefully handle single-threaded synchronous execution, in which case the host may simply run all work immediately. This makes it possible for the same plugin code to work with sample accuracy for offline rendering, or in real-time with non-real-time work taking place in a separate thread.

""" . work:interface a lv2:ExtensionData ; lv2:documentation """

The interface provided by the plugin to implement a worker. To implement this extension, the plugin must return a valid LV2_Worker_Interface from LV2_Descriptor::extension_data() when it is called with URI LV2_WORKER__interface.

The plugin data file should describe this like so:

@prefix work: <http://lv2plug.in/ns/ext/worker#> .

<plugin>
    a lv2:Plugin ;
    lv2:extensionData work:interface .
""" . work:schedule a lv2:Feature ; lv2:documentation """

A feature which provides functions for use by the plugin to implement a worker method. To support this feature, the host must pass an LV2_Feature to LV2_Descriptor::instantiate() with URI LV2_WORKER__schedule and data pointed to an instance of LV2_Worker_Schedule.

""" .