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

Commit 9e09eec4 authored by Chen Chen's avatar Chen Chen Committed by Gerrit Code Review
Browse files

Merge "Spatial Audio: Implement setLowLatencyAllowed functions in BluetoothAudioSession"

parents 3e8d4a1e 81f38e55
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -131,6 +131,8 @@ ndk::ScopedAStatus BluetoothAudioProvider::setLowLatencyModeAllowed(
    return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
  }
  LOG(INFO) << __func__ << " - allowed " << allowed;
  BluetoothAudioSessionReport::ReportLowLatencyModeAllowedChanged(
    session_type_, allowed);
  return ndk::ScopedAStatus::ok();
}

+16 −0
Original line number Diff line number Diff line
@@ -416,6 +416,22 @@ void BluetoothAudioSession::ReportControlStatus(bool start_resp,
  }
}

void BluetoothAudioSession::ReportLowLatencyModeAllowedChanged(bool allowed) {
  std::lock_guard<std::recursive_mutex> guard(mutex_);
  if (observers_.empty()) {
    LOG(WARNING) << __func__ << " - SessionType=" << toString(session_type_)
                 << " has NO port state observer";
    return;
  }
  for (auto& observer : observers_) {
    uint16_t cookie = observer.first;
    std::shared_ptr<PortStatusCallbacks> callback = observer.second;
    LOG(INFO) << __func__ << " - allowed="
              << allowed ? " allowed" : " disallowed";
    callback->low_latency_mode_allowed_cb_(cookie, allowed);
  }
}

bool BluetoothAudioSession::GetPresentationPosition(
    PresentationPosition& presentation_position) {
  std::lock_guard<std::recursive_mutex> guard(mutex_);
+16 −0
Original line number Diff line number Diff line
@@ -92,6 +92,15 @@ struct PortStatusCallbacks {
   * @param: cookie - indicates which bluetooth_audio output should handle
   ***/
  std::function<void(uint16_t cookie)> audio_configuration_changed_cb_;
  /***
   * low_latency_mode_allowed_cb_ - when the Bluetooth stack low latency mode
   * allowed or disallowed, the BluetoothAudioProvider will invoke
   * this callback to report to the bluetooth_audio module.
   * @param: cookie - indicates which bluetooth_audio output should handle
   * @param: allowed - indicates if low latency mode is allowed
   ***/
  std::function<void(uint16_t cookie, bool allowed)>
      low_latency_mode_allowed_cb_;
};

class BluetoothAudioSession {
@@ -155,6 +164,13 @@ class BluetoothAudioSession {
   ***/
  void ReportAudioConfigChanged(const AudioConfiguration& audio_config);

  /***
   * The report function is used to report that the Bluetooth stack has notified
   * the low latency mode allowed changed, and will invoke
   * low_latency_mode_allowed_changed_cb to notify registered bluetooth_audio
   * outputs
   ***/
  void ReportLowLatencyModeAllowedChanged(bool allowed);
  /***
   * Those control functions are for the bluetooth_audio module to start,
   * suspend, stop stream, to check position, and to update metadata.
+12 −0
Original line number Diff line number Diff line
@@ -78,6 +78,18 @@ class BluetoothAudioSessionReport {
      session_ptr->ReportAudioConfigChanged(audio_config);
    }
  }
  /***
   * The API reports the Bluetooth stack has replied the changed of the low
   * latency audio allowed, and will inform registered bluetooth_audio outputs
   ***/
  static void ReportLowLatencyModeAllowedChanged(
    const SessionType& session_type, bool allowed) {
    std::shared_ptr<BluetoothAudioSession> session_ptr =
        BluetoothAudioSessionInstance::GetSessionInstance(session_type);
    if (session_ptr != nullptr) {
      session_ptr->ReportLowLatencyModeAllowedChanged(allowed);
    }
  }
};

}  // namespace audio