GstInterpipe - Features and Limitations
Open-source project from RidgeRun. |
GstInterpipe project characteristics
The GstInterpipe project exposes the following characteristics:
- Inspired by intervideosrc/intervideosink
- Uses appsrc and appsink as a base
- Generic data handling, not limited to video
- Multiple dynamic interpipesink - interpipesrc connections
- Replace tee and selector elements allowing dynamic pipeline flow control with tools such as GStreamer Deamon
Key Features
The principle list of plug-in features include:
- Buffer transfer
Interpipesink will transfer automatically the buffers it receives to all the interpipesrcs that are currently listening to it. There is no data copy.
- Dynamic switching
Interpipesrc can switch which interpipesink they are listening to at any time just 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...
- Caps negotiation
Even though interpipes break 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).
- Event forwarding
Similar to buffers, events may be forwarded from the interpipesinks to the connected interpipesrcs, and vice versa. The project takes into account downstream and upstream events, as well as in-bounds and out-of-bands events.
- Timestamp synchronization
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.
Limitations
The current release exposes the following limitations and known bugs:
- Specialized clocks
For the time being, pipelines negotiate their clock independently. If a pipeline uses a special clock (i.e.: GstAudioSinkClock), the associated pipes (being independent) may negotiate different clocks, typically GstSystemClock. This could be a big problem if, for example, synchronization between streams is required. It is currently the responsibility of the application to set the special clock in all the involved pipes by calling gst_pipeline_set_clock.