Merge "Spatial Audio: Implement setLowLatencyAllowed functions in BluetoothAudioSession" am: 9e09eec46b

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1978294

Change-Id: I2502dfebc73bffa57342039e0d3cd32234abe4ea
This commit is contained in:
Chen Chen 2022-02-11 01:06:36 +00:00 committed by Automerger Merge Worker
commit b55027e757
4 changed files with 46 additions and 0 deletions

View file

@ -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();
}

View file

@ -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_);

View file

@ -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.

View file

@ -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