Merge changes If33bee4e,I0c14c062 am: 6ca63b0e20

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

Change-Id: I55f1bdfca44a02c4ba4f57f8dffeee6041e08446
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-05-12 02:51:42 +00:00
committed by Automerger Merge Worker
2 changed files with 34 additions and 27 deletions

View File

@@ -27,9 +27,31 @@ namespace hardware {
namespace bluetooth { namespace bluetooth {
namespace audio { namespace audio {
struct BluetoothAudioProviderContext {
SessionType session_type;
};
static void binderUnlinkedCallbackAidl(void* cookie) {
LOG(INFO) << __func__;
BluetoothAudioProviderContext* ctx =
static_cast<BluetoothAudioProviderContext*>(cookie);
delete ctx;
}
static void binderDiedCallbackAidl(void* cookie) {
LOG(INFO) << __func__;
BluetoothAudioProviderContext* ctx =
static_cast<BluetoothAudioProviderContext*>(cookie);
CHECK_NE(ctx, nullptr);
BluetoothAudioSessionReport::OnSessionEnded(ctx->session_type);
}
BluetoothAudioProvider::BluetoothAudioProvider() { BluetoothAudioProvider::BluetoothAudioProvider() {
death_recipient_ = ::ndk::ScopedAIBinder_DeathRecipient( death_recipient_ = ::ndk::ScopedAIBinder_DeathRecipient(
AIBinder_DeathRecipient_new(binderDiedCallbackAidl)); AIBinder_DeathRecipient_new(binderDiedCallbackAidl));
AIBinder_DeathRecipient_setOnUnlinked(death_recipient_.get(),
binderUnlinkedCallbackAidl);
} }
ndk::ScopedAStatus BluetoothAudioProvider::startSession( ndk::ScopedAStatus BluetoothAudioProvider::startSession(
@@ -39,17 +61,21 @@ ndk::ScopedAStatus BluetoothAudioProvider::startSession(
DataMQDesc* _aidl_return) { DataMQDesc* _aidl_return) {
if (host_if == nullptr) { if (host_if == nullptr) {
*_aidl_return = DataMQDesc(); *_aidl_return = DataMQDesc();
LOG(ERROR) << __func__ << " - SessionType=" << toString(session_type_)
<< " Illegal argument";
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
} }
latency_modes_ = latencyModes; latency_modes_ = latencyModes;
audio_config_ = std::make_unique<AudioConfiguration>(audio_config); audio_config_ = std::make_unique<AudioConfiguration>(audio_config);
stack_iface_ = host_if; stack_iface_ = host_if;
is_binder_died = false; BluetoothAudioProviderContext* cookie =
new BluetoothAudioProviderContext{session_type_};
AIBinder_linkToDeath(stack_iface_->asBinder().get(), death_recipient_.get(), AIBinder_linkToDeath(stack_iface_->asBinder().get(), death_recipient_.get(),
this); cookie);
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_);
onSessionReady(_aidl_return); onSessionReady(_aidl_return);
return ndk::ScopedAStatus::ok(); return ndk::ScopedAStatus::ok();
} }
@@ -60,10 +86,8 @@ ndk::ScopedAStatus BluetoothAudioProvider::endSession() {
if (stack_iface_ != nullptr) { if (stack_iface_ != nullptr) {
BluetoothAudioSessionReport::OnSessionEnded(session_type_); BluetoothAudioSessionReport::OnSessionEnded(session_type_);
if (!is_binder_died) { AIBinder_unlinkToDeath(stack_iface_->asBinder().get(),
AIBinder_unlinkToDeath(stack_iface_->asBinder().get(), death_recipient_.get(), this);
death_recipient_.get(), this);
}
} else { } else {
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_) LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
<< " has NO session"; << " has NO session";
@@ -77,10 +101,9 @@ ndk::ScopedAStatus BluetoothAudioProvider::endSession() {
ndk::ScopedAStatus BluetoothAudioProvider::streamStarted( ndk::ScopedAStatus BluetoothAudioProvider::streamStarted(
BluetoothAudioStatus status) { BluetoothAudioStatus status) {
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
<< ", status=" << toString(status);
if (stack_iface_ != nullptr) { if (stack_iface_ != nullptr) {
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
<< ", status=" << toString(status);
BluetoothAudioSessionReport::ReportControlStatus(session_type_, true, BluetoothAudioSessionReport::ReportControlStatus(session_type_, true,
status); status);
} else { } else {
@@ -108,8 +131,6 @@ ndk::ScopedAStatus BluetoothAudioProvider::streamSuspended(
ndk::ScopedAStatus BluetoothAudioProvider::updateAudioConfiguration( ndk::ScopedAStatus BluetoothAudioProvider::updateAudioConfiguration(
const AudioConfiguration& audio_config) { const AudioConfiguration& audio_config) {
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_);
if (stack_iface_ == nullptr || audio_config_ == nullptr) { if (stack_iface_ == nullptr || audio_config_ == nullptr) {
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_) LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
<< " has NO session"; << " has NO session";
@@ -125,13 +146,13 @@ ndk::ScopedAStatus BluetoothAudioProvider::updateAudioConfiguration(
audio_config_ = std::make_unique<AudioConfiguration>(audio_config); audio_config_ = std::make_unique<AudioConfiguration>(audio_config);
BluetoothAudioSessionReport::ReportAudioConfigChanged(session_type_, BluetoothAudioSessionReport::ReportAudioConfigChanged(session_type_,
*audio_config_); *audio_config_);
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
<< " | audio_config=" << audio_config.toString();
return ndk::ScopedAStatus::ok(); return ndk::ScopedAStatus::ok();
} }
ndk::ScopedAStatus BluetoothAudioProvider::setLowLatencyModeAllowed( ndk::ScopedAStatus BluetoothAudioProvider::setLowLatencyModeAllowed(
bool allowed) { bool allowed) {
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_);
if (stack_iface_ == nullptr) { if (stack_iface_ == nullptr) {
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_) LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
<< " has NO session"; << " has NO session";
@@ -143,17 +164,6 @@ ndk::ScopedAStatus BluetoothAudioProvider::setLowLatencyModeAllowed(
return ndk::ScopedAStatus::ok(); return ndk::ScopedAStatus::ok();
} }
void BluetoothAudioProvider::binderDiedCallbackAidl(void* ptr) {
LOG(ERROR) << __func__ << " - BluetoothAudio Service died";
auto provider = static_cast<BluetoothAudioProvider*>(ptr);
if (provider == nullptr) {
LOG(ERROR) << __func__ << ": Null AudioProvider HAL died";
return;
}
provider->is_binder_died = true;
provider->endSession();
}
} // namespace audio } // namespace audio
} // namespace bluetooth } // namespace bluetooth
} // namespace hardware } // namespace hardware

View File

@@ -54,7 +54,6 @@ class BluetoothAudioProvider : public BnBluetoothAudioProvider {
protected: protected:
virtual ndk::ScopedAStatus onSessionReady(DataMQDesc* _aidl_return) = 0; virtual ndk::ScopedAStatus onSessionReady(DataMQDesc* _aidl_return) = 0;
static void binderDiedCallbackAidl(void* cookie_ptr);
::ndk::ScopedAIBinder_DeathRecipient death_recipient_; ::ndk::ScopedAIBinder_DeathRecipient death_recipient_;
@@ -62,9 +61,7 @@ class BluetoothAudioProvider : public BnBluetoothAudioProvider {
std::unique_ptr<AudioConfiguration> audio_config_ = nullptr; std::unique_ptr<AudioConfiguration> audio_config_ = nullptr;
SessionType session_type_; SessionType session_type_;
std::vector<LatencyMode> latency_modes_; std::vector<LatencyMode> latency_modes_;
bool is_binder_died = false;
}; };
} // namespace audio } // namespace audio
} // namespace bluetooth } // namespace bluetooth
} // namespace hardware } // namespace hardware