Skip to content
  • Chris Holland's avatar
    Increment volume by percent instead of a constant volumeStep · dedcbccf
    Chris Holland authored
    Jumping by a fixed volumeStep has issues as the value is rounded.
    65536/100 = 655.36
    65536/100*5 = 3276.8
    volumeStep = round(3276.8) = 3277
    
    The floor() patch has an easy to test bug when jumping from 100% to
    94% instead of 95% since volumeStep is rounded up.
    Eg: 65536 => 62259 (-3277) 100% => 94%  (-6%)
    
    The original round() logic also has issues when volume is around:
    f(x) = (65536/100) / 2 + (65536/100) * x
    
    amixer sset Master 983 # f(1)=983.04
    Eg: 983 => 4260 (+3277) 1% => 7%  (+6%)
    
    This patch adds changeVolumeByPercent(volumeObject, deltaPercent) to
    increment any sink or source by a %volume. It also moves the common
    code in increaseVolume() and decreaseVolume() into a new function.
    
    BUG: 434769
    BUG: 435522
    FIXED-IN: 5.21.5
    dedcbccf