Difference between revisions of "GstInterpipe - Features and Limitations"
m |
|||
(8 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | {{GstInterpipe | + | {{GstInterpipe/Head |previous=GstInterpipe Overview|next=Building and Installation Guide|metakeywords=}} |
− | |||
− | |||
− | + | __TOC__ | |
− | + | ==GstInterpipe project characteristics== | |
The GstInterpipe project exposes the following characteristics: | The GstInterpipe project exposes the following characteristics: | ||
Line 11: | Line 9: | ||
* Inspired by intervideosrc/intervideosink | * Inspired by intervideosrc/intervideosink | ||
* Uses appsrc and appsink as a base | * Uses appsrc and appsink as a base | ||
− | * Generic data handling | + | * Generic data handling, not limited to video |
* Multiple dynamic interpipesink - interpipesrc connections | * Multiple dynamic interpipesink - interpipesrc connections | ||
− | * Replace tee and selector elements allowing dynamic pipeline flow control with [[Gstd-1.0]] | + | * Replace tee and selector elements allowing dynamic pipeline flow control with tools such as [[Gstd-1.0|GStreamer Deamon]] |
− | |||
==Key Features== | ==Key Features== | ||
Line 20: | Line 17: | ||
The principle list of plug-in features include: | The principle list of plug-in features include: | ||
− | * '''Buffer transfer''' <br>Interpipesink will transfer | + | * '''Buffer transfer''' <br>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''' <br> Interpipesrc can switch | + | *'''Dynamic switching''' <br> 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''' <br> 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). | *'''Caps negotiation''' <br> 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''' <br> Similar to buffers, events may be forwarded from the interpipesinks to the interpipesrcs, and vice versa. The project takes into account downstream and upstream events, as well as in-bounds and out-of-bands events. | + | *'''Event forwarding''' <br> 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''' <br> 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. | *'''Timestamp synchronization''' <br> 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''' <br> An interpipesrc may be set to listen to | + | *'''New node notification''' <br> 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== | ==Limitations== | ||
The current release exposes the following limitations and known bugs: | The current release exposes the following limitations and known bugs: | ||
− | *'''Specialized clocks''' <br>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 responsibility of the application to set the special clock in all the involved pipes by calling [https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html#gst-pipeline-set-clock gst_pipeline_set_clock]. | + | *'''Specialized clocks''' <br>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 [https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html#gst-pipeline-set-clock gst_pipeline_set_clock]. |
+ | |||
− | }} | + | {{GstInterpipe/Foot|previous=GstInterpipe Overview|next=Building and Installation Guide}} |
Latest revision as of 02:50, 6 March 2023
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.