1. 26 Apr, 2020 15 commits
  2. 17 Apr, 2020 1 commit
  3. 15 Apr, 2020 6 commits
    • pali's avatar
      bluetooth: Add more variants of SBC codec · 8c1a6eec
      pali authored
      Specify configuration for Low, Middle, High and eXtreme Quality of SBC
      codec. SBC codec in eXtreme Quality has higher quality than aptX.
      Automatic Quality mode matches configuration of SBC codec which was used
      before this change. Which means that it accept configuration between Low
      and High quality.
      Current SBC code was extended to allow definitions of arbitrary
      configuration variants of SBC codec parameters.
      SBC XQ testing is in following article:
    • pali's avatar
      bluetooth: Add A2DP FastStream codec support · 3f3d3a0f
      pali authored
      This patch provides support for FastStream codec in bluetooth A2DP profile.
      FastStream codec is bi-directional, which means that it supports both music
      playback and microphone voice at the same time.
      FastStream codec is just SBC codec with fixed parameters. For playback are
      used following parameters: 48.0kHz or 44.1kHz, Blocks 16, Sub-bands 8,
      Joint Stereo, Loudness, Bitpool = 29 (data rate = 212kbps, packet size =
      (71+1)*3 <= DM5 = 220, with 3 SBC frames). SBC frame size is 71 bytes, but
      FastStream is zero-padded to the even size (72). For microphone are used
      following SBC parameters: 16kHz, Mono, Blocks 16, Sub-bands 8, Loudness,
      Bitpool = 32 (data rate = 72kbps, packet size = 72*3 <= DM5 = 220, with
      3 SBC frames).
      So FastStream codec is equivalent to SBC in Low Quality settings. But the
      main benefit of FastStream codec is support for microphone voice channel
      for audio calls. Compared to bluetooth HSP profile (with CVSD codec), it
      provides better audio quality for both playback and recording.
    • pali's avatar
      bluetooth: Add A2DP aptX and aptX HD codecs support · 09e87210
      pali authored
      This patch provides support for aptX and aptX HD codecs in bluetooth A2DP
      profile. It uses open source LGPLv2.1+ licensed libopenaptx library which
      can be found at https://github.com/pali/libopenaptx.
      aptX for s24 stereo samples provides fixed 6:1 compression ratio and
      bitrate 352.8 kbit/s, aptX HD provides fixed 4:1 compression ratio and
      bitrate 529.2 kbit/s.
      According to soundexpert research, aptX codec used in bluetooth A2DP is no
      better than SBC High Quality settings. And you cannot hear difference
      between aptX and SBC High Quality, aptX is just a copper-less overpriced
      audio cable.
      aptX HD is high-bitrate version of aptX. It has clearly noticeable increase
      in sound quality (not dramatic though taking into account the increase in
    • pali's avatar
      bluetooth: policy: Treat bi-directional A2DP profiles as suitable for VOIP · 0123c32a
      pali authored
      Previously module-bluetooth-policy was switching from A2DP to HSP profile
      when VOIP application started recording of source. Now it switch to profile
      with the highest priority which has both sink and source. In most cases it
      is HSP profile, but it can be also bi-directional A2DP profile (e.g.
      FastStream codec) as it has better audio quality.
    • pali's avatar
      bluetooth: Set initial A2DP profile which bluez already activated · 878401d9
      pali authored
      Bluez and remote device decide which A2DP codec would use. Use this
      selected A2DP codec as initial profile in pulseaudio.
      In most cases it is either last used codec or codec with higher priority by
      defined by remote device.
      To detect which A2DP profile was activated by bluez, look at bluez
      transport state.
    • pali's avatar
      bluetooth: Implement A2DP codec switching and backchannel support · efef94a8
      pali authored
      Some A2DP codecs (like FastStream or aptX Low Latency) are bi-directional
      and can be used for both music playback and audio calls. This patch
      implements usage of backchannel if A2DP codec provided by pulseaudio API
      supports it.
      A2DP codec switching needs new version of bluez as older version does not
      provide needed org.freedesktop.DBus.ObjectManager and RegisterApplication
      DBus APIs.
      Pulseaudio use for each A2DP codec separate pulseaudio profile, therefore
      codec switching is implemented via changing pulseaudio profile and
      currently used A2DP codec is visible in pulseaudio profile.
      Getting list of supported codecs by remote device is supported only by new
      version of bluez daemon.
      If old bluez version is detected then only one SBC codec is supported.
  4. 14 Apr, 2020 4 commits
    • pali's avatar
      bluetooth: policy: Reflect a2dp profile names · 6f25f0ee
      pali authored
      In next patches, codec name is appended end the end of a2dp profile names.
    • pali's avatar
      bluetooth: Change codec API for choosing remote endpoint · d055e4b5
      pali authored
      Current codec API for choosing remote endpoint was not suitable for
      implementing fallback to another endpoint when first chosen one was not
      possible to establish.
      To overcome this problem change codec API to rather provide generic method
      for comparing two endpoints by their capabilities. Return value is standard
      value what comparator function returns (-1, 0, 1). It can be used e.g. for
      searching the best remote endpoint (like did previous API method) or
      creating a full list of all endpoints in preferred order (e.g. by sorting
      Currently this method is not used (neither old choose remote endpoint).
      It is used by code for switching A2DP codec which is in next patches.
    • pali's avatar
      bluetooth: Do not export pa_a2dp_codecs array · 26675195
      pali authored
      It is not used directly outside of a2dp-codec-util.c file.
    • pali's avatar
      bluetooth: Add missing newlines into inline XML document · 69703c58
      pali authored
      When calling introspection function, newlines in XML document makes it
      better readable. There are already leading spaces for indentation but
      newlines were probably forgotten.
  5. 10 Apr, 2020 1 commit
  6. 09 Apr, 2020 3 commits
  7. 25 Mar, 2020 1 commit
  8. 20 Mar, 2020 1 commit
  9. 19 Mar, 2020 1 commit
  10. 17 Mar, 2020 1 commit
    • Tanu Kaskinen's avatar
      ucm: Don't log errors during normal operation · 9d36210b
      Tanu Kaskinen authored
      It's completely normal to not have explicit channel configuration for
      stereo devices. In fact, the ALSA developers actively avoid configuring
      the channels for stereo devices.
      I also dropped the word "duplex" from the messages, because "stereo
      duplex" implies bidirectionality, but most devices use one direction
  11. 01 Mar, 2020 1 commit
  12. 15 Feb, 2020 1 commit
  13. 14 Feb, 2020 1 commit
  14. 13 Jan, 2020 1 commit
    • Georg Chini's avatar
      virtual sources: Propagate asyncmsgq change after source-output move · 051f7508
      Georg Chini authored
      Currently, when the master of a virtual source is moved, the change of the
      asyncmsgq is not propagated to other attached virtual sources. This leads
      to a crash when the original master source is no longer available.
      This patch fixes the issue by modifying the moving callback to propagate the
      change to attached virtual sources.
      Virtual sinks show a similar bug but that will be fixed in a different patch
  15. 05 Jan, 2020 1 commit
  16. 04 Jan, 2020 1 commit
    • Tanu Kaskinen's avatar
      virtual-source: Don't process the rewind during requesting it · a71136be
      Tanu Kaskinen authored
      The request_rewind() callback of the uplink sink called
      pa_sink_process_rewind(), which is not allowed. Things are supposed to
      happen so that first a rewind is requested, and then during the next
      rtpoll loop the sink will process the request. Calling
      pa_sink_process_rewind() during the request phase caused a crash.
      Having a request_rewind() callback is completely unnecessary, because
      it's only useful for forwarding the request to a downstream sink. In
      this case there is no downstream sink.
      I also set max_rewind to 0, because the sink doesn't support rewinding.
      Fixes: pulseaudio/pulseaudio#775