blob: 4cf16a4ef54aaae62ddcb240c4b7b68463c33419 [file] [log] [blame]
The autoplugger is a custom bin with a set of custom add/remove methods.
The point is to virtually add a set of plugins that should take part in
the autoplugging (like the src, sink elements). The autoplugger should
try hard to included these plugins in the final pipeline.
The autoplugger has to be a bin because else we cannot put it into the
paused state when dynamically connecting elements.
We cannot include the intermediate elements or sink/src elements to the bin
right away because else they will be scheduled by the scheduler.
The bin will use the elementfactory klass field to get a basic idea about
the plugin:
- the 'Source' keyword is used to detect source elements
- the 'Sink' keyword is used to detect the sink elements or targets
of the autoplugging.
- other elements are considered intermediate elements and will be
inserted when possible.
algorithm:
- Autoplugging starts from a source element, it will be added to the real bin.
- for all unconnected pads:
- if pad has NULL padtemplate caps add typefind + autoplugcache to the pad
- if unconnected pad has fixed caps, find element in repository that can
connect.
- first check elements added to the bin
- test elements ordered by rank
- favour 'Demux' type elements close to sources, 'Decoder' elements after
that and 'Filter' elements close to sinks.
- link dummy element with pads with non-fixed caps. The dummy element getcaps
function will use the repository to return a list of compatible caps, so that
the element can choose freely. The dummy element is replaced with a real
element when caps become fixed.
- all new_pad signals and caps notifications trigger the above actions.