Difference between revisions of "GstInterpipe - Features and Limitations"

From RidgeRun Developer Connection
Jump to: navigation, search
m
Line 2: Line 2:
 
[[GstInterpipe - GstInterpipe Overview|GstInterpipe Overview]]|
 
[[GstInterpipe - GstInterpipe Overview|GstInterpipe Overview]]|
 
[[GstInterpipe - Building and Installation Guide|Building and Installation Guide]]|
 
[[GstInterpipe - Building and Installation Guide|Building and Installation Guide]]|
 
This page describes the GstInterpipe features and limitations.
 
  
 
__TOC__
 
__TOC__
Line 15: Line 13:
 
* Generic data handling
 
* Generic data handling
 
* 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]]
  
  
Line 24: Line 22:
 
* '''Buffer transfer''' <br>Interpipesink will transfer automagically the buffers it receives to all the interpipesrcs that are currently listening to it.  There is no data copy.
 
* '''Buffer transfer''' <br>Interpipesink will transfer automagically 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 the 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...
+
*'''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 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).
  
*'''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 an inexistent 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.
+
*'''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.
  
  

Revision as of 11:26, 14 February 2019


GstInterpipe Overview


Home

Building and Installation Guide



GstInterpipe project characteristics

The GstInterpipe project exposes the following characteristics:

  • Inspired by intervideosrc/intervideosink
  • Uses appsrc and appsink as a base
  • Generic data handling
  • 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 automagically 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 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).
  • 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 responsibility of the application to set the special clock in all the involved pipes by calling gst_pipeline_set_clock.




GstInterpipe Overview


Home

Building and Installation Guide