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:
commit
b55027e757
4 changed files with 46 additions and 0 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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_);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue