Skip to content
  • Marijn Suijten's avatar
    bluetooth: Synchronize AVRCP Absolute Volume with A2DP sink · 534a80a5
    Marijn Suijten authored
    Like the previous commit this handles `Volume` property changes but
    applies them to an A2DP sink instead of source stream.  As mentioned in
    the AVRCP spec v1.6.2 §5.8 the rendering device (A2DP sink) is
    responsible for performing volume attenuation meaning PulseAudio should
    pass through audio as-is without performing any attenuation in SW.
    Setting a valid pointer to `set_sink_volume` and returning `true` from
    `should_attenuate_volume` attaches a hardware callback to `pa_sink` such
    that no volume attenuation is performed anymore.
    
    In addition to receiving volume change notifications it is also possible
    to control remote volume by writing a new value to the DBus property.
    This is especially useful when playing back to in-ear audio devices
    which usually lack physical buttons to adjust the final volume on the
    sink.
    
    While software volume (used before this patch) is generally fine it is
    annoying to crank it up all the way to 100% when a previous connection
    to a different device left saved volume on the peer at a low volume.
    Providing this bidirectional synchronization is most natural to users
    who wish to use physical controls on their headphones, are used to this
    from their smartphone, or aforementioned volume mismatches where both PA
    as source and the peer as sink/rendering device are performing
    attenutation.
    534a80a5