c431ac6aa5
This changes the way source volume handles transitioning between being active and inactive states. The previous way that transitioning handled volume was that it set the presentation volume of the source and all of its sub-sources to 0.0 if the source was inactive, and 1.0 if active. Transition sources would then also set the presentation volume for sub-sources to whatever their transitioning volume was. However, the problem with this is that the design didn't take in to account if the source or its sub-sources were active anywhere else, so because of that it would break if that ever happened, and I didn't realize that when I was designing it. So instead, this completely overhauls the design of handling transitioning volume. Each frame, it'll go through all sources and check whether they're active or inactive and set the base volume accordingly. If transitions are currently active, it will actually walk the active source tree and check whether the source is in a transitioning state somewhere. - If the source is a sub-source of a transition, and it's not active outside of the transition, then the transition will control the volume of the source. - If the source is a sub-source of a transition, but it's also active outside of the transition, it'll defer to whichever is louder. This also adds a new callback to the obs_source_info structure for transition sources, get_transition_volume, which is called to get the transitioning volume of a sub-source.