Merge "Always use audio_configuration_changed_cb_ to notify the config update" into udc-dev am: 98d6368ebb
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/22241290 Change-Id: I2031bfc738b3d1fb97641f5fb252da9b15655688 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
abf0d08ba1
3 changed files with 2 additions and 99 deletions
|
@ -60,14 +60,12 @@ void BluetoothAudioSession::OnSessionStarted(
|
|||
LOG(ERROR) << __func__ << " - SessionType=" << toString(session_type_)
|
||||
<< " MqDescriptor Invalid";
|
||||
audio_config_ = nullptr;
|
||||
leaudio_connection_map_ = nullptr;
|
||||
} else {
|
||||
stack_iface_ = stack_iface;
|
||||
latency_modes_ = latency_modes;
|
||||
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
|
||||
<< ", AudioConfiguration=" << audio_config.toString();
|
||||
ReportSessionStatus();
|
||||
is_streaming_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -76,13 +74,11 @@ void BluetoothAudioSession::OnSessionEnded() {
|
|||
bool toggled = IsSessionReady();
|
||||
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_);
|
||||
audio_config_ = nullptr;
|
||||
leaudio_connection_map_ = nullptr;
|
||||
stack_iface_ = nullptr;
|
||||
UpdateDataPath(nullptr);
|
||||
if (toggled) {
|
||||
ReportSessionStatus();
|
||||
}
|
||||
is_streaming_ = false;
|
||||
}
|
||||
|
||||
/***
|
||||
|
@ -110,14 +106,6 @@ const AudioConfiguration BluetoothAudioSession::GetAudioConfig() {
|
|||
return *audio_config_;
|
||||
}
|
||||
|
||||
const AudioConfiguration BluetoothAudioSession::GetLeAudioConnectionMap() {
|
||||
std::lock_guard<std::recursive_mutex> guard(mutex_);
|
||||
if (!IsSessionReady()) {
|
||||
return AudioConfiguration(LeAudioConfiguration{});
|
||||
}
|
||||
return *leaudio_connection_map_;
|
||||
}
|
||||
|
||||
void BluetoothAudioSession::ReportAudioConfigChanged(
|
||||
const AudioConfiguration& audio_config) {
|
||||
if (session_type_ !=
|
||||
|
@ -134,47 +122,7 @@ void BluetoothAudioSession::ReportAudioConfigChanged(
|
|||
return;
|
||||
}
|
||||
|
||||
if (is_streaming_) {
|
||||
if (audio_config_ == nullptr) {
|
||||
LOG(ERROR) << __func__ << " for SessionType=" << toString(session_type_)
|
||||
<< " audio_config_ is nullptr during streaming. It shouldn't "
|
||||
"be happened";
|
||||
return;
|
||||
}
|
||||
|
||||
auto new_leaudio_config =
|
||||
audio_config.get<AudioConfiguration::leAudioConfig>();
|
||||
auto current_leaudio_config =
|
||||
(*audio_config_).get<AudioConfiguration::leAudioConfig>();
|
||||
if (new_leaudio_config.codecType != current_leaudio_config.codecType) {
|
||||
LOG(ERROR)
|
||||
<< __func__ << " for SessionType=" << toString(session_type_)
|
||||
<< " codec type changed during streaming. It shouldn't be happened ";
|
||||
}
|
||||
auto new_lc3_config = new_leaudio_config.leAudioCodecConfig
|
||||
.get<LeAudioCodecConfiguration::lc3Config>();
|
||||
auto current_lc3_config = current_leaudio_config.leAudioCodecConfig
|
||||
.get<LeAudioCodecConfiguration::lc3Config>();
|
||||
if ((new_lc3_config.pcmBitDepth != current_lc3_config.pcmBitDepth) ||
|
||||
(new_lc3_config.samplingFrequencyHz !=
|
||||
current_lc3_config.samplingFrequencyHz) ||
|
||||
(new_lc3_config.frameDurationUs !=
|
||||
current_lc3_config.frameDurationUs) ||
|
||||
(new_lc3_config.octetsPerFrame != current_lc3_config.octetsPerFrame) ||
|
||||
(new_lc3_config.blocksPerSdu != current_lc3_config.blocksPerSdu)) {
|
||||
LOG(ERROR)
|
||||
<< __func__ << " for SessionType=" << toString(session_type_)
|
||||
<< " lc3 config changed during streaming. It shouldn't be happened";
|
||||
return;
|
||||
}
|
||||
|
||||
leaudio_connection_map_ =
|
||||
std::make_unique<AudioConfiguration>(audio_config);
|
||||
} else {
|
||||
audio_config_ = std::make_unique<AudioConfiguration>(audio_config);
|
||||
leaudio_connection_map_ =
|
||||
std::make_unique<AudioConfiguration>(audio_config);
|
||||
}
|
||||
|
||||
if (observers_.empty()) {
|
||||
LOG(WARNING) << __func__ << " - SessionType=" << toString(session_type_)
|
||||
|
@ -187,11 +135,7 @@ void BluetoothAudioSession::ReportAudioConfigChanged(
|
|||
LOG(INFO) << __func__ << " for SessionType=" << toString(session_type_)
|
||||
<< ", bluetooth_audio=0x"
|
||||
<< ::android::base::StringPrintf("%04x", cookie);
|
||||
if (is_streaming_) {
|
||||
if (cb->soft_audio_configuration_changed_cb_ != nullptr) {
|
||||
cb->soft_audio_configuration_changed_cb_(cookie);
|
||||
}
|
||||
} else if (cb->audio_configuration_changed_cb_ != nullptr) {
|
||||
if (cb->audio_configuration_changed_cb_ != nullptr) {
|
||||
cb->audio_configuration_changed_cb_(cookie);
|
||||
}
|
||||
}
|
||||
|
@ -481,12 +425,6 @@ void BluetoothAudioSession::ReportControlStatus(bool start_resp,
|
|||
<< " has NO port state observer";
|
||||
return;
|
||||
}
|
||||
if (start_resp && status == BluetoothAudioStatus::SUCCESS) {
|
||||
is_streaming_ = true;
|
||||
} else if (!start_resp && (status == BluetoothAudioStatus::SUCCESS ||
|
||||
status == BluetoothAudioStatus::RECONFIGURATION)) {
|
||||
is_streaming_ = false;
|
||||
}
|
||||
for (auto& observer : observers_) {
|
||||
uint16_t cookie = observer.first;
|
||||
std::shared_ptr<PortStatusCallbacks> callback = observer.second;
|
||||
|
|
|
@ -102,13 +102,6 @@ struct PortStatusCallbacks {
|
|||
***/
|
||||
std::function<void(uint16_t cookie, bool allowed)>
|
||||
low_latency_mode_allowed_cb_;
|
||||
/***
|
||||
* soft_audio_configuration_changed_cb_ - when the Bluetooth stack change
|
||||
* the streamMap during the streaming, the BluetoothAudioProvider will invoke
|
||||
* this callback to report to the bluetooth_audio module.
|
||||
* @param: cookie - indicates which bluetooth_audio output should handle
|
||||
***/
|
||||
std::function<void(uint16_t cookie)> soft_audio_configuration_changed_cb_;
|
||||
};
|
||||
|
||||
class BluetoothAudioSession {
|
||||
|
@ -165,12 +158,6 @@ class BluetoothAudioSession {
|
|||
***/
|
||||
const AudioConfiguration GetAudioConfig();
|
||||
|
||||
/***
|
||||
* The control function is for the bluetooth_audio module to get the current
|
||||
* LE audio connection map
|
||||
***/
|
||||
const AudioConfiguration GetLeAudioConnectionMap();
|
||||
|
||||
/***
|
||||
* The report function is used to report that the Bluetooth stack has notified
|
||||
* the audio configuration changed, and will invoke
|
||||
|
@ -219,11 +206,8 @@ class BluetoothAudioSession {
|
|||
std::unique_ptr<DataMQ> data_mq_;
|
||||
// audio data configuration for both software and offloading
|
||||
std::unique_ptr<AudioConfiguration> audio_config_;
|
||||
std::unique_ptr<AudioConfiguration> leaudio_connection_map_;
|
||||
std::vector<LatencyMode> latency_modes_;
|
||||
bool low_latency_allowed_ = true;
|
||||
// saving those steaming state based on the session_type
|
||||
bool is_streaming_ = false;
|
||||
|
||||
// saving those registered bluetooth_audio's callbacks
|
||||
std::unordered_map<uint16_t, std::shared_ptr<struct PortStatusCallbacks>>
|
||||
|
|
|
@ -94,25 +94,6 @@ class BluetoothAudioSessionControl {
|
|||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* The control API for the bluetooth_audio module to get current
|
||||
* LE audio connection map
|
||||
***/
|
||||
static const AudioConfiguration GetLeAudioConnectionMap(
|
||||
const SessionType& session_type) {
|
||||
std::shared_ptr<BluetoothAudioSession> session_ptr =
|
||||
BluetoothAudioSessionInstance::GetSessionInstance(session_type);
|
||||
if ((session_type ==
|
||||
SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type ==
|
||||
SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) &&
|
||||
session_ptr != nullptr) {
|
||||
return session_ptr->GetLeAudioConnectionMap();
|
||||
}
|
||||
|
||||
return AudioConfiguration(LeAudioConfiguration{});
|
||||
}
|
||||
|
||||
/***
|
||||
* Those control APIs for the bluetooth_audio module to start / suspend /
|
||||
stop
|
||||
|
|
Loading…
Reference in a new issue