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

Commit 7decbf4f authored by Alice Kuo's avatar Alice Kuo
Browse files

LE audio hardware offload session switch for decode direction

As the offload could be enabled, set offload decode/encode together

Bug: 197296692
Bug: 150670922
Test: Verify LE audio offload/software path
Change-Id: I0578e10415de8758066189531ac6b6aead007143
parent bc10268c
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -1016,7 +1016,9 @@ int BluetoothAudioClientInterface::EndSession() {


void BluetoothAudioClientInterface::FlushAudioData() {
void BluetoothAudioClientInterface::FlushAudioData() {
  if (transport_->GetSessionType_2_1() ==
  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;
    return;


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


  IBluetoothSourceTransportInstance* GetTransportInstance() const {
    return source_;
  }

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


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


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


  ~LeAudioSourceTransport();
  ~LeAudioSourceTransport();


+21 −1
Original line number Original line Diff line number Diff line
@@ -252,6 +252,17 @@ void LeAudioClientInterface::Source::StartSession() {
  } else if (HalVersionManager::GetHalVersion() ==
  } else if (HalVersionManager::GetHalVersion() ==
             BluetoothAudioHalVersion::VERSION_2_2) {
             BluetoothAudioHalVersion::VERSION_2_2) {
    AudioConfiguration_2_2 audio_config;
    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
    audio_config.pcmConfig(hidl::le_audio::LeAudioSourceTransport::instance
                               ->LeAudioGetSelectedHalPcmConfig());
                               ->LeAudioGetSelectedHalPcmConfig());
    if (!hidl::le_audio::LeAudioSourceTransport::
    if (!hidl::le_audio::LeAudioSourceTransport::
@@ -398,8 +409,17 @@ LeAudioClientInterface::Source* LeAudioClientInterface::GetSource(


  if (HalVersionManager::GetHalTransport() ==
  if (HalVersionManager::GetHalTransport() ==
      BluetoothAudioHalTransport::HIDL) {
      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 =
    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 =
    hidl::le_audio::LeAudioSourceTransport::interface =
        new hidl::BluetoothAudioSourceClientInterface(
        new hidl::BluetoothAudioSourceClientInterface(
            hidl::le_audio::LeAudioSourceTransport::instance, message_loop);
            hidl::le_audio::LeAudioSourceTransport::instance, message_loop);
Loading