Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da12d379 authored by Alice Kuo's avatar Alice Kuo Committed by Gerrit Code Review
Browse files

Merge changes I8f59bc34,I0578e104

* changes:
  LE audio hardware offload: audio configuration update for decode
  LE audio hardware offload session switch for decode direction
parents cab8f5d7 7e193363
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1016,7 +1016,9 @@ int BluetoothAudioClientInterface::EndSession() {

void BluetoothAudioClientInterface::FlushAudioData() {
  if (transport_->GetSessionType_2_1() ==
      SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH)
          SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
      transport_->GetSessionType_2_1() ==
          SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH)
    return;

  if (mDataMQ == nullptr || !mDataMQ->isValid()) {
+4 −0
Original line number Diff line number Diff line
@@ -320,6 +320,10 @@ class BluetoothAudioSourceClientInterface
      bluetooth::common::MessageLoopThread* message_loop);
  virtual ~BluetoothAudioSourceClientInterface();

  IBluetoothSourceTransportInstance* GetTransportInstance() const {
    return source_;
  }

  // Write data to audio HAL through fmq
  size_t WriteAudioData(const uint8_t* p_buf, uint32_t len);

+4 −4
Original line number Diff line number Diff line
@@ -352,9 +352,9 @@ void flush_source() {
  LeAudioSourceTransport::interface->FlushAudioData();
}

LeAudioSourceTransport::LeAudioSourceTransport(StreamCallbacks stream_cb)
    : IBluetoothSourceTransportInstance(
          SessionType_2_1::LE_AUDIO_SOFTWARE_DECODED_DATAPATH,
LeAudioSourceTransport::LeAudioSourceTransport(SessionType_2_1 session_type,
                                               StreamCallbacks stream_cb)
    : IBluetoothSourceTransportInstance(session_type,
                                        (AudioConfiguration_2_2){}) {
  transport_ =
      new LeAudioTransport(flush_source, std::move(stream_cb),
+2 −1
Original line number Diff line number Diff line
@@ -152,7 +152,8 @@ class LeAudioSinkTransport
class LeAudioSourceTransport
    : public ::bluetooth::audio::hidl::IBluetoothSourceTransportInstance {
 public:
  LeAudioSourceTransport(StreamCallbacks stream_cb);
  LeAudioSourceTransport(SessionType_2_1 session_type,
                         StreamCallbacks stream_cb);

  ~LeAudioSourceTransport();

+34 −4
Original line number Diff line number Diff line
@@ -252,6 +252,17 @@ void LeAudioClientInterface::Source::StartSession() {
  } else if (HalVersionManager::GetHalVersion() ==
             BluetoothAudioHalVersion::VERSION_2_2) {
    AudioConfiguration_2_2 audio_config;
    if (hidl::le_audio::LeAudioSourceTransport::
            interface->GetTransportInstance()
                ->GetSessionType_2_1() ==
        hidl::SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
      hidl::le_audio::LeAudioConfiguration le_audio_config = {};
      audio_config.leAudioConfig(le_audio_config);
    } else {
      audio_config.pcmConfig(hidl::le_audio::LeAudioSourceTransport::instance
                                 ->LeAudioGetSelectedHalPcmConfig());
    }

    audio_config.pcmConfig(hidl::le_audio::LeAudioSourceTransport::instance
                               ->LeAudioGetSelectedHalPcmConfig());
    if (!hidl::le_audio::LeAudioSourceTransport::
@@ -307,10 +318,20 @@ void LeAudioClientInterface::Source::StopSession() {
}

void LeAudioClientInterface::Source::UpdateAudioConfigToHal(
    const ::le_audio::offload_config& config) {
  LOG(INFO) << __func__ << " source: not handle now";
    const ::le_audio::offload_config& offload_config) {
  if (HalVersionManager::GetHalTransport() ==
      BluetoothAudioHalTransport::HIDL) {
    if (hidl::le_audio::LeAudioSourceTransport::
            interface->GetTransportInstance()
                ->GetSessionType_2_1() !=
        hidl::SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
      return;
    }
    hidl::le_audio::LeAudioSourceTransport::interface->UpdateAudioConfig_2_2(
        hidl::le_audio::offload_config_to_hal_audio_config(offload_config));
    return;
  }
}

size_t LeAudioClientInterface::Source::Write(const uint8_t* p_buf,
                                             uint32_t len) {
@@ -398,8 +419,17 @@ LeAudioClientInterface::Source* LeAudioClientInterface::GetSource(

  if (HalVersionManager::GetHalTransport() ==
      BluetoothAudioHalTransport::HIDL) {
    hidl::SessionType_2_1 session_type =
        hidl::SessionType_2_1::LE_AUDIO_SOFTWARE_DECODED_DATAPATH;
    if (CodecManager::GetInstance()->GetCodecLocation() !=
        CodecLocation::HOST) {
      session_type =
          hidl::SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH;
    }

    hidl::le_audio::LeAudioSourceTransport::instance =
        new hidl::le_audio::LeAudioSourceTransport(std::move(stream_cb));
        new hidl::le_audio::LeAudioSourceTransport(session_type,
                                                   std::move(stream_cb));
    hidl::le_audio::LeAudioSourceTransport::interface =
        new hidl::BluetoothAudioSourceClientInterface(
            hidl::le_audio::LeAudioSourceTransport::instance, message_loop);
Loading