From: Richard B. <ric...@op...> - 2000-09-14 00:25:42
|
On Wed, Sep 13, 2000 at 12:19:48PM -0400, Myers W. Carpenter wrote: > Here's one idea: you don't have gst_type_get_sink_to_src (or you do > have it but not as implemented), but a gst_type_get_point_to_point, > where you can attempt to connect two points. As it comes up with a new > path it checks for other connections from the first point and sees if it > can also us those. > > You could still have a gst_type_get_sink_to_src but it's only for > simple cases. Yes, I think that's the right kind of way to go. A full scheme might be: Users build a pipeline out of various elements, and also specify connections between them. These connections are allowed to be between incompatible pad types (the connections get modified later to be valid). The user then calls an autoplug function on the pipeline: As a special case, if there is one and only one sink node, or one and only one source node, the system will now automatically put a link from the sink to the sources, or the sinks to the source. We now have a network describing what the user wants to happen, but with some connections needing to have intermediate nodes added to make them valid. The system then loops over each connection in the network, checking whether the types are compatible. If not, it calculates a valid path from one node to the next (using a gst_type_get_point_to_point() function), and replaces the connection with the path calculated. As an improvement, probably to be implemented once the above is working, the system could try and calculate paths from each node to the next nodes which share as much of the pathway as possible. A naive algorithm would be to calculate all the paths possible and pick the "cheapest" one. Calling the autoplug function could even be made implicit - if the network has no invalid connections, nothing will happen. What do you think? Should I try and code it? ;-) (Not that I think I'd be able to get it going in a short period of time, but...) -- Richard |