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.