There are a lot of interfaces you need to know about before starting to implement a Streamer element. For your convenience this section provides a short description of each interface.
These are the interfaces that are implemented by the elements themselves.
This interface is the common interface that every element regardless of type (source, sink, or intermediate) is required to implement. Other than the initialization function and the destruction function the interface also contains the QueryInterface() function used by the Streamer to inquire what other interfaces the element implements.
IInputPad is implemented by all non-source elements. The Streamer calls the Process() function when it wants the element to process the segments and metadata in the input queue of the element.
The ISource interface must be implemented by source elements. It provides the functions needed by the Streamer to control the stream flow. The interface also contains functions to handle buffer allotment to the source element.
In the Source Elements section the special circumstances involved when developing a source element are described in greater detail.
Like source elements, sink elements also need to implement a specific interface. The Streamer uses the ISink interface to tell sink elements if they should be active or not and whether they should block or unblock stream processing in the underlying Hardware Abstraction Layer. When the sink is activated it is allowed to allocate and keep the HAL resource that it needs for processing until it receives a call that it should deactivate itself.
For more information about implementing sink elements, check the Sink Elements section.
The IEventCallback interface is an optional interface only needed by elements that depend on external events for their operation. The interface works in tandem with the IEvent interface supplied by the Streamer, which allow the element to register file descriptors and set timers.
IBlackboardObserver is an optional interface which works in tandem with the IBlackboard interface supplied by the streamer. It is implemented by elements that subscribe to changes of parameters on the blackboard.
ISystemEventObserver is an optional interface which is used to pass notification of system-wide events to the element. An example of such an event is change of IP address.
These are the interfaces provided by the Streamer core.
This is the main interface to the Streamer core. All the other core interfaces are provided by the QueryInterface() function in IPump. This interface is also used to open and close pads as well as to create, destroy and publish metadata and to release segments.
The IDebug interface is used to add messages to the log.
When an element opens a pad it gets a pointer to an IOutputPad interface. The Streamer core will relay all segments and metadata that are committed on the output pad to an input pad of another element. Please see the Element Data Flow section for details on how segments and metadata are moved through the element pipeline.
The IPostponePad interface is the interface to the special postpone pad used by framing elements. The postpone pad is described in detail in the Element Data Flow section.
Source elements use ISourceCallback to indicate state transitions to the Streamer core. It also uses the interface to tell whether a command to the source was successful or not.
This interface is used by sink elements to indicate buffer underflow conditions.
The IEvent interface allows an element to register file descriptors to get event callbacks when the descriptor is ready for reading or writing. It also allows the element to register timers and get event callbacks with a certain time interval.
IBlackboard is the interface to the blackboard. Read more about the blackboard in the Streamer Concepts section.
These interfaces are neither implemented by the Streamer core nor the elements.
Each element has to provide an element descriptor implementing this interface. The element descriptors are used by the Streamer to find an appropriate element to insert in the pipeline when an element opens an output pad.
IStreamerTypes is not an actual interface but rather a set of data types used by the Streamer and the elements.