Merge "Spatial Audio: Implement setLowLatencyAllowed functions in BluetoothAudioSession"

This commit is contained in:
Chen Chen 2022-02-11 00:53:24 +00:00 committed by Gerrit Code Review
commit 9e09eec46b
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); return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
} }
LOG(INFO) << __func__ << " - allowed " << allowed; LOG(INFO) << __func__ << " - allowed " << allowed;
BluetoothAudioSessionReport::ReportLowLatencyModeAllowedChanged(
session_type_, allowed);
return ndk::ScopedAStatus::ok(); 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( bool BluetoothAudioSession::GetPresentationPosition(
PresentationPosition& presentation_position) { PresentationPosition& presentation_position) {
std::lock_guard<std::recursive_mutex> guard(mutex_); 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 * @param: cookie - indicates which bluetooth_audio output should handle
***/ ***/
std::function<void(uint16_t cookie)> audio_configuration_changed_cb_; 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 { class BluetoothAudioSession {
@ -155,6 +164,13 @@ class BluetoothAudioSession {
***/ ***/
void ReportAudioConfigChanged(const AudioConfiguration& audio_config); 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, * Those control functions are for the bluetooth_audio module to start,
* suspend, stop stream, to check position, and to update metadata. * suspend, stop stream, to check position, and to update metadata.

View file

@ -78,6 +78,18 @@ class BluetoothAudioSessionReport {
session_ptr->ReportAudioConfigChanged(audio_config); 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 } // namespace audio