ADTF  3.18.2
Plugin Description Concept
How does the CE know about the Components?
ADTF is a plugin-based system. Each component within the ADTF Session Files is represented by an concrete implementation within a class. These implementations are packed into Plugins.
What is a Plugin?
A Plugin is a shared object or dynamic link library with a plugin interface and can be loaded within an ADTF Runtime. The contained classes of the Plugin can be instantiated as objects with characterics. One characteristic is the Main Interface.

The main interfaces for the ADTF System are:

  • Service
  • Filter
  • Sample Stream
  • Active Runner
  • Binding Proxy
  • Streaming Sink
  • Streaming Source
Plugin file types
The shared object or dynamic link library has the file suffix *.adtfplugin and is accompanied by an XML file which describes the properties of the elements inside the shared object or dynamic link library. The XML files are called Plugin Description (*.plugindescription) and must comply the XSD rules defined in the ADTF Plugin Description XML Schema file. The ADTF Configuration Editor processes the Plugin Description files on start up and allows the user to create various sessions with the elements of the plugin.
Your own plugin
When developing your own components you should use the ADTF Plugin Description Generator to create a basic Plugin Description file. The generated Plugin Description will already work and make your components available in the ADTF Configuration Editor but to help the user to work with the elements in your plugin, you should fill in all description tags. In order to get a session that is immediately runnable when adding your new components to a configuration, dependecies have to be resolved by the ADTF Configuration Editor. If the Plugin Description does not enumerate its dependencies, the user has to add them manually inside the ADTF Configuration Editor. But we can do better by writing them down inside the Plugin Description. This means all elements in the listing above can define required interfaces if they depend on any services. For Example:
<required_interfaces>
<interface_description>
<iid>reference_clock.ant.streaming.adtf.iid</iid>
</interface_description>
</required_interfaces>
If you follow the coding guide lines Setup dependencies between components the ADTF Plugin Description Generator creates this section for you.
Platform specific dependencies
More general dependencies to platform specific binaries go into the platform_dependencies tag and look like this:
<platform_dependencies>
<platform_dependency>
<name>windows_x86_64_debug</name>
<libraries>
<library_description>
<url>/path/to/some/3rdparty/libraryd.dll</url>
</library_description>
</libraries>
</platform_dependency>
<platform_dependency>
<name>linux_x86_64</name>
<libraries>
<library_description>
<url>/path/to/some/3rdparty/library.so</url>
</library_description>
</libraries>
</platform_dependency>
</platform_dependencies>

This has to be merged, see

Note: Qt libraries need not be declared as platform dependencies and are always loaded from <ADTF_DIR>/3rdparty/qt5.

Services and runlevel
If your new component is a service and needs to be started in a certain runlevel other than system you need to define a runlevel tag:
<service_description>
...
<runlevel>session</runlevel>
</service_description>
For an overview of available runlevels go to adtf::base::ant::tADTFRunLevel
Plugin Directories - Settings
The Plugin Descriptions are usually generated next to the Plugin File. To find the Plugins you need to set the Plugin Directories the CE will look into (see Settings Editor (Options)).
Remarks
The ADTF Configuration Editor WILL NOT create instances of the filters by itself!