Dynamic lock timeout is our friend.
Instead of simply waiting for a fixed amount of ms for the next source, we wait for the most sensible amount of time. This is whatever amount of time is remaining to play minus a 0.5 seconds safety delta (time values not precise etc.). A source for which we have no time or for which the remaining time is < 0.5 seconds is immediately unlocked again. Otherwise the consumer has as much time as gst gave us to set a new source. This in particular prevents pointless excessive locking on sources which have a totalTime < whatever fixed lock value we have (so that we'd lock longer than what we are playing). An issue apparent with notification-like sounds, that are rather short and do not need gapless transitioning. BUG: 307530 FIXED-IN: 4.6.3