GstInterpipe: Open Source GStreamer Plug-in
GstInterpipe is a RidgeRun open source GStreamer plug-in that enables pipeline buffers and events to flow between two or more independent pipelines. The plug-in consists of two elements: Interpipesink and interpipesrc. The interpipesrc connects with an interpipesink, from which it receives buffers and events.
GstInterpipe is intended to reduce a big complex pipeline system into smaller and simpler independent pipelines. You can view and handle the independent pipelines as different blocks that can be controlled independently. Each pipeline can change state, have element properties modified, and connect or disconnect with other pipelines at runtime.
The plug-in allows you to have multiple sources and sink pipelines in an application. The connections between source pipelines (src) and sink pipelines (sink) can dynamically change at runtime. If you have a set of different pipes you can plug and unplug between them at runtime, the system will change its behavior according to the pipe interconnection configuration.
GstInterpipe Plug-in Features:
The principle list of plug-in features include:
Interpipesink will transfer the buffers it receives to all the interpipesrcs that are currently listening to it automagically. There is no data copy.
Interpipesrc can switch which interpipesink they are listening to at any time by setting the property to the new value. No need to worry about the pipeline's state, dangerous events like EOS, pad probes, valves, selectors, pad links, etc.
Even though interpipes breaks a big pipeline into smaller ones, the caps negotiation process takes into account all of them. This means that it is guaranteed that the negotiated caps will be supported by the source and all its listeners (or fail due to missing valid intersection).
Similar to buffers, events may be forwarded from the interpipesinks to the connected interpipesrces, and vice versa. The project takes into account downstream and upstream events, as well as in-bounds and out-of-bounds events.
The base times of independent pipelines will likely be different. Given that a buffer will be transferred from one pipe to another, this may represent a problem in situations where synchronization is a must. GstInterpipe takes care of this situation by compensating the buffer's timestamps according to the pipeline's base time, ensuring appropriate synchronization.
New node notification
An interpipesrc may be set to listen to a non-existent node-name. If this is the case, the interpipesrc will be registered to receive a notification when the desired interpipesink is created. At this point, the connection will be made and the buffer flow will start.
Note: RidgeRun assumes that there are no hardware issues that would delay the development process (and increase costs). In case of problems with your hardware, RidgeRun will bill up to 20 hours of engineering services for the time needed to inform you of what is wrong.