bluetooth: Synchronize AVRCP Absolute Volume with A2DP sink
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.
Showing with 101 additions and 14 deletions