• J
    Implement volume handling · be81276f
    jp9000 提交于
     - Remove obs_source::type because it became redundant now that the
       type is always stored in the obs_source::info variable.
    
     - Apply presentation volumes of 1.0 and 0.0 to sources when they
       activate/deactivate, respectively.  It also applies that presentation
       volume to all sub-sources, with exception of transition sources.
       Transition sources must apply presentation volume manually to their
       sub-sources with the new transition functions below.
    
     - Add a "transition_volume" variable to obs_source structure, and add
       three functions for handling volume for transitions:
    
       * obs_transition_begin_frame
       * obs_source_set_transition_vol
       * obs_transition_end_frame
    
       Because the to/from targets of a transition source might both contain
       some of the same sources, handling the transitioning of volumes for
       that specific situation becomes an issue.
    
       So for transitions, instead of modifying the presentation volumes
       directly for both sets of sources, we do this:
    
       - First, call obs_transition_begin_frame at the beginning of each
         transition frame, which will reset transition volumes for all
         sub-sources to 0.  Presentation volumes remain unchanged.
    
       - Call obs_source_set_transition_vol on each sub-source, which will
         then add the volume to the transition volume for each source in
         that source's tree.  Presentation volumes still remain unchanged.
    
       - Then you call obs_trandition_end_frame when complete, which will
         then finally set the presentation volumes to the transition
         volumes.
    
       For example, let's say that there's one source that's within both the
       "transitioning from" sources and "transition to" sources.  It would
       add both the fade in and fade out volumes to that source, and then
       when the frame is complete, it would set the presentation volume to
       the sum of those two values, rather than set the presentation volume
       for that same source twice which would cause weird volume jittering
       and also set the wrong values.
    be81276f
obs-scene.c 9.9 KB