diff --git a/wiki/support_library.html b/wiki/support_library.html index ffb80559d..a8f456a93 100644 --- a/wiki/support_library.html +++ b/wiki/support_library.html @@ -1812,7 +1812,7 @@ Note: the protoname and version args for ~CINELERRA_INTERFACE_FUNC will be used -
! Cinelerra Plugin API
There are only few functions to manage Plugins. Actually a user requests interfaces, the libraries which implement Plugins are managed transparently.
@@ -1822,12 +1822,14 @@ Interfaces are exported as instances and are not necessary singleton, this means
!! opening an Interface
{{{
CinelerraInterface
-cinelerra_interface_open (const char* plugin, const char* interface, size_t min_revision);
+cinelerra_interface_open (const char* plugin,
+ const char* name,
+ size_t min_revision);
}}}
!!! Parameters
* ''{{{plugin}}}'' is the name of the Plugin which interface to use. Plugins are looked up in $~CINELERRA_PLUGIN_PATH, which is a colon separated list of directories, and then in $plugin_install_dir which is the directory where standard plugins get installed when installing cinelerra (example: /usr/local/lib/cinelerra3/). The name itself can contain slashes, see PluginHierachy for details. It shall not include a library extension (.so). When NULL is passed, a interface from the main application is queried.
-* ''{{{interface}}}'' is the name of the queried interface.
+* ''{{{name}}}'' is the name of the queried interface.
* ''{{{min_revision}}}'' is the expected minimal size of the interface structure, since interfaces are extended by adding new protos at the end, the size gives a unique value for each new revision.
!!! Semantic
@@ -1836,15 +1838,6 @@ Interfaces can opened multiple times and need to be closed for each call to open
!!! Return
This function returns a pointer to the requested interface on success or NULL in case of an error. See {{{cinelerra_interface_error}}} about handing errors.
-{{{
-interface
-CINELERRA_INTERFACE_OPEN(plugin, interface)
-}}}
-
-This macro form does the casting of the result and uses the current size for the min_revison argument.
-
-
----
!! closing an Interface
{{{
void
@@ -1897,7 +1890,18 @@ Calls {{{cinelerra_plugin_unload()}}} for each Plugin which is not used for more
always succeeds.
!! error handling
-TODO
+{{{
+const char*
+cinelerra_plugin_error ();
+}}}
+
+!!! Semantic
+Indicate last error, reset error state. Errors are thread local.
+
+!!! Return
+Returns a pointer to the most recent error occurred in the plugin loader. This pointer is guaranteed to point to a C string with a unique comparable address. NULL if no error happened.
+
+Note that the error state gets cleared by calling this function. The application may store it temporary for further handling.
!! C++ exceptions
TODO
@@ -1929,7 +1933,7 @@ For binary compatibility everything will work well, provided that the caller kep
Cinelerra3 will use a very simple and language neutral plugin system. It focuses easy and independent distribution of plugins and small specific interfaces. Ultimate flexibility is of second concern. ! Concept @@ -1944,7 +1948,7 @@ The Plugin System is written in C with some preprocessor macros helpers. There w ! Versioning -Each interface/prototype is versioned. How this works together is explained in PluginVersioningCases. Version identifiers will be used to form a C identifier, they need to be syntactically compatible. I suggest to use a monotonic incrementing number, starting at 1 for versioning and maybe using a special name 'dev' for interfaces which are in development. When the interface development is finished they have to be replaced by the next number. This ensures that noone accidentally uses/relies on an interface which is not yet well defined. +Each interface/prototype is versioned. How this works together is explained in PluginVersioningCases. Version identifiers will be used to form a C identifier. I suggest to use a monotonic incrementing number, starting at 1 for versioning and maybe using a special number 0 for interfaces which are in development. When the interface development is finished the 0 has to be replaced by the next number in turn. This ensures that noone accidentally uses/relies on an interface which is not yet well defined. ! Plugin Support includes * [[An interface definition language|PluginInterfaceDefinition]]