Loading system/audio_hal_interface/le_audio_software.cc +40 −24 Original line number Diff line number Diff line Loading @@ -98,8 +98,15 @@ LeAudioClientInterface* LeAudioClientInterface::Get() { } void LeAudioClientInterface::Sink::Cleanup() { LOG(INFO) << __func__ << " sink"; LOG_INFO("HAL transport: 0x%02x, is broadcast: %d", static_cast<int>(HalVersionManager::GetHalTransport()), is_broadcaster_); StopSession(); /* Cleanup transport interface and instance according to type and role */ if (HalVersionManager::GetHalTransport() == BluetoothAudioHalTransport::HIDL) { if (hidl::le_audio::LeAudioSinkTransport::interface) { delete hidl::le_audio::LeAudioSinkTransport::interface; hidl::le_audio::LeAudioSinkTransport::interface = nullptr; Loading @@ -108,21 +115,30 @@ void LeAudioClientInterface::Sink::Cleanup() { delete hidl::le_audio::LeAudioSinkTransport::instance; hidl::le_audio::LeAudioSinkTransport::instance = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::interface_unicast_) { delete aidl::le_audio::LeAudioSinkTransport::interface_unicast_; aidl::le_audio::LeAudioSinkTransport::interface_unicast_ = nullptr; } } else if (HalVersionManager::GetHalTransport() == BluetoothAudioHalTransport::AIDL) { if (IsBroadcaster()) { if (aidl::le_audio::LeAudioSinkTransport::interface_broadcast_) { delete aidl::le_audio::LeAudioSinkTransport::interface_broadcast_; aidl::le_audio::LeAudioSinkTransport::interface_broadcast_ = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::instance_broadcast_) { delete aidl::le_audio::LeAudioSinkTransport::instance_broadcast_; aidl::le_audio::LeAudioSinkTransport::instance_broadcast_ = nullptr; } } else { if (aidl::le_audio::LeAudioSinkTransport::interface_unicast_) { delete aidl::le_audio::LeAudioSinkTransport::interface_unicast_; aidl::le_audio::LeAudioSinkTransport::interface_unicast_ = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::instance_unicast_) { delete aidl::le_audio::LeAudioSinkTransport::instance_unicast_; aidl::le_audio::LeAudioSinkTransport::instance_unicast_ = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::instance_broadcast_) { delete aidl::le_audio::LeAudioSinkTransport::instance_broadcast_; aidl::le_audio::LeAudioSinkTransport::instance_broadcast_ = nullptr; } } else { LOG_ERROR("Invalid HAL transport: 0x%02x", static_cast<int>(HalVersionManager::GetHalTransport())); } } Loading system/bta/le_audio/audio_hal_client/audio_source_hal_client.cc +23 −22 Original line number Diff line number Diff line Loading @@ -32,13 +32,6 @@ using bluetooth::audio::le_audio::LeAudioClientInterface; namespace le_audio { namespace { // TODO: HAL state should be in the HAL implementation enum { HAL_UNINITIALIZED, HAL_STOPPED, HAL_STARTED, } le_audio_sink_hal_state; struct AudioHalStats { size_t media_read_total_underflow_bytes; size_t media_read_total_underflow_count; Loading @@ -54,6 +47,12 @@ struct AudioHalStats { } sStats; class SourceImpl : public LeAudioSourceAudioHalClient { enum LeAudioSinkHalState { HAL_UNINITIALIZED, HAL_STOPPED, HAL_STARTED, } le_audio_sink_hal_state_; public: // Interface implementation bool Start(const LeAudioCodecConfiguration& codec_configuration, Loading @@ -71,9 +70,11 @@ class SourceImpl : public LeAudioSourceAudioHalClient { void ReconfigurationComplete() override; // Internal functionality SourceImpl(bool is_broadcaster) : is_broadcaster_(is_broadcaster){}; SourceImpl(bool is_broadcaster) : le_audio_sink_hal_state_(HAL_UNINITIALIZED), is_broadcaster_(is_broadcaster){}; ~SourceImpl() override { if (le_audio_sink_hal_state != HAL_UNINITIALIZED) Release(); if (le_audio_sink_hal_state_ != HAL_UNINITIALIZED) Release(); } bool OnResumeReq(bool start_media_task); Loading Loading @@ -130,12 +131,12 @@ bool SourceImpl::Acquire() { } LOG_INFO(); le_audio_sink_hal_state = HAL_STOPPED; le_audio_sink_hal_state_ = HAL_STOPPED; return this->InitAudioSinkThread(); } void SourceImpl::Release() { if (le_audio_sink_hal_state == HAL_UNINITIALIZED) { if (le_audio_sink_hal_state_ == HAL_UNINITIALIZED) { LOG_WARN("Audio HAL Audio sink is not running"); return; } Loading @@ -153,7 +154,7 @@ void SourceImpl::Release() { LOG_ERROR("Can't get LE Audio HAL interface"); } le_audio_sink_hal_state = HAL_UNINITIALIZED; le_audio_sink_hal_state_ = HAL_UNINITIALIZED; halSinkInterface_ = nullptr; } } Loading Loading @@ -299,7 +300,7 @@ bool SourceImpl::Start(const LeAudioCodecConfiguration& codec_configuration, return false; } if (le_audio_sink_hal_state == HAL_STARTED) { if (le_audio_sink_hal_state_ == HAL_STARTED) { LOG_ERROR("Audio HAL Audio sink is already in use"); return false; } Loading @@ -325,7 +326,7 @@ bool SourceImpl::Start(const LeAudioCodecConfiguration& codec_configuration, std::lock_guard<std::mutex> guard(audioSourceCallbacksMutex_); audioSourceCallbacks_ = audioReceiver; le_audio_sink_hal_state = HAL_STARTED; le_audio_sink_hal_state_ = HAL_STARTED; return true; } Loading @@ -335,7 +336,7 @@ void SourceImpl::Stop() { return; } if (le_audio_sink_hal_state != HAL_STARTED) { if (le_audio_sink_hal_state_ != HAL_STARTED) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -343,7 +344,7 @@ void SourceImpl::Stop() { LOG_INFO(); halSinkInterface_->StopSession(); le_audio_sink_hal_state = HAL_STOPPED; le_audio_sink_hal_state_ = HAL_STOPPED; if (CodecManager::GetInstance()->GetCodecLocation() == types::CodecLocation::HOST) { Loading @@ -356,7 +357,7 @@ void SourceImpl::Stop() { void SourceImpl::ConfirmStreamingRequest() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -372,7 +373,7 @@ void SourceImpl::ConfirmStreamingRequest() { void SourceImpl::SuspendedForReconfiguration() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -383,7 +384,7 @@ void SourceImpl::SuspendedForReconfiguration() { void SourceImpl::ReconfigurationComplete() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -394,7 +395,7 @@ void SourceImpl::ReconfigurationComplete() { void SourceImpl::CancelStreamingRequest() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -405,7 +406,7 @@ void SourceImpl::CancelStreamingRequest() { void SourceImpl::UpdateRemoteDelay(uint16_t remote_delay_ms) { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -417,7 +418,7 @@ void SourceImpl::UpdateRemoteDelay(uint16_t remote_delay_ms) { void SourceImpl::UpdateAudioConfigToHal( const ::le_audio::offload_config& config) { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading Loading
system/audio_hal_interface/le_audio_software.cc +40 −24 Original line number Diff line number Diff line Loading @@ -98,8 +98,15 @@ LeAudioClientInterface* LeAudioClientInterface::Get() { } void LeAudioClientInterface::Sink::Cleanup() { LOG(INFO) << __func__ << " sink"; LOG_INFO("HAL transport: 0x%02x, is broadcast: %d", static_cast<int>(HalVersionManager::GetHalTransport()), is_broadcaster_); StopSession(); /* Cleanup transport interface and instance according to type and role */ if (HalVersionManager::GetHalTransport() == BluetoothAudioHalTransport::HIDL) { if (hidl::le_audio::LeAudioSinkTransport::interface) { delete hidl::le_audio::LeAudioSinkTransport::interface; hidl::le_audio::LeAudioSinkTransport::interface = nullptr; Loading @@ -108,21 +115,30 @@ void LeAudioClientInterface::Sink::Cleanup() { delete hidl::le_audio::LeAudioSinkTransport::instance; hidl::le_audio::LeAudioSinkTransport::instance = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::interface_unicast_) { delete aidl::le_audio::LeAudioSinkTransport::interface_unicast_; aidl::le_audio::LeAudioSinkTransport::interface_unicast_ = nullptr; } } else if (HalVersionManager::GetHalTransport() == BluetoothAudioHalTransport::AIDL) { if (IsBroadcaster()) { if (aidl::le_audio::LeAudioSinkTransport::interface_broadcast_) { delete aidl::le_audio::LeAudioSinkTransport::interface_broadcast_; aidl::le_audio::LeAudioSinkTransport::interface_broadcast_ = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::instance_broadcast_) { delete aidl::le_audio::LeAudioSinkTransport::instance_broadcast_; aidl::le_audio::LeAudioSinkTransport::instance_broadcast_ = nullptr; } } else { if (aidl::le_audio::LeAudioSinkTransport::interface_unicast_) { delete aidl::le_audio::LeAudioSinkTransport::interface_unicast_; aidl::le_audio::LeAudioSinkTransport::interface_unicast_ = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::instance_unicast_) { delete aidl::le_audio::LeAudioSinkTransport::instance_unicast_; aidl::le_audio::LeAudioSinkTransport::instance_unicast_ = nullptr; } if (aidl::le_audio::LeAudioSinkTransport::instance_broadcast_) { delete aidl::le_audio::LeAudioSinkTransport::instance_broadcast_; aidl::le_audio::LeAudioSinkTransport::instance_broadcast_ = nullptr; } } else { LOG_ERROR("Invalid HAL transport: 0x%02x", static_cast<int>(HalVersionManager::GetHalTransport())); } } Loading
system/bta/le_audio/audio_hal_client/audio_source_hal_client.cc +23 −22 Original line number Diff line number Diff line Loading @@ -32,13 +32,6 @@ using bluetooth::audio::le_audio::LeAudioClientInterface; namespace le_audio { namespace { // TODO: HAL state should be in the HAL implementation enum { HAL_UNINITIALIZED, HAL_STOPPED, HAL_STARTED, } le_audio_sink_hal_state; struct AudioHalStats { size_t media_read_total_underflow_bytes; size_t media_read_total_underflow_count; Loading @@ -54,6 +47,12 @@ struct AudioHalStats { } sStats; class SourceImpl : public LeAudioSourceAudioHalClient { enum LeAudioSinkHalState { HAL_UNINITIALIZED, HAL_STOPPED, HAL_STARTED, } le_audio_sink_hal_state_; public: // Interface implementation bool Start(const LeAudioCodecConfiguration& codec_configuration, Loading @@ -71,9 +70,11 @@ class SourceImpl : public LeAudioSourceAudioHalClient { void ReconfigurationComplete() override; // Internal functionality SourceImpl(bool is_broadcaster) : is_broadcaster_(is_broadcaster){}; SourceImpl(bool is_broadcaster) : le_audio_sink_hal_state_(HAL_UNINITIALIZED), is_broadcaster_(is_broadcaster){}; ~SourceImpl() override { if (le_audio_sink_hal_state != HAL_UNINITIALIZED) Release(); if (le_audio_sink_hal_state_ != HAL_UNINITIALIZED) Release(); } bool OnResumeReq(bool start_media_task); Loading Loading @@ -130,12 +131,12 @@ bool SourceImpl::Acquire() { } LOG_INFO(); le_audio_sink_hal_state = HAL_STOPPED; le_audio_sink_hal_state_ = HAL_STOPPED; return this->InitAudioSinkThread(); } void SourceImpl::Release() { if (le_audio_sink_hal_state == HAL_UNINITIALIZED) { if (le_audio_sink_hal_state_ == HAL_UNINITIALIZED) { LOG_WARN("Audio HAL Audio sink is not running"); return; } Loading @@ -153,7 +154,7 @@ void SourceImpl::Release() { LOG_ERROR("Can't get LE Audio HAL interface"); } le_audio_sink_hal_state = HAL_UNINITIALIZED; le_audio_sink_hal_state_ = HAL_UNINITIALIZED; halSinkInterface_ = nullptr; } } Loading Loading @@ -299,7 +300,7 @@ bool SourceImpl::Start(const LeAudioCodecConfiguration& codec_configuration, return false; } if (le_audio_sink_hal_state == HAL_STARTED) { if (le_audio_sink_hal_state_ == HAL_STARTED) { LOG_ERROR("Audio HAL Audio sink is already in use"); return false; } Loading @@ -325,7 +326,7 @@ bool SourceImpl::Start(const LeAudioCodecConfiguration& codec_configuration, std::lock_guard<std::mutex> guard(audioSourceCallbacksMutex_); audioSourceCallbacks_ = audioReceiver; le_audio_sink_hal_state = HAL_STARTED; le_audio_sink_hal_state_ = HAL_STARTED; return true; } Loading @@ -335,7 +336,7 @@ void SourceImpl::Stop() { return; } if (le_audio_sink_hal_state != HAL_STARTED) { if (le_audio_sink_hal_state_ != HAL_STARTED) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -343,7 +344,7 @@ void SourceImpl::Stop() { LOG_INFO(); halSinkInterface_->StopSession(); le_audio_sink_hal_state = HAL_STOPPED; le_audio_sink_hal_state_ = HAL_STOPPED; if (CodecManager::GetInstance()->GetCodecLocation() == types::CodecLocation::HOST) { Loading @@ -356,7 +357,7 @@ void SourceImpl::Stop() { void SourceImpl::ConfirmStreamingRequest() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -372,7 +373,7 @@ void SourceImpl::ConfirmStreamingRequest() { void SourceImpl::SuspendedForReconfiguration() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -383,7 +384,7 @@ void SourceImpl::SuspendedForReconfiguration() { void SourceImpl::ReconfigurationComplete() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -394,7 +395,7 @@ void SourceImpl::ReconfigurationComplete() { void SourceImpl::CancelStreamingRequest() { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -405,7 +406,7 @@ void SourceImpl::CancelStreamingRequest() { void SourceImpl::UpdateRemoteDelay(uint16_t remote_delay_ms) { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading @@ -417,7 +418,7 @@ void SourceImpl::UpdateRemoteDelay(uint16_t remote_delay_ms) { void SourceImpl::UpdateAudioConfigToHal( const ::le_audio::offload_config& config) { if ((halSinkInterface_ == nullptr) || (le_audio_sink_hal_state != HAL_STARTED)) { (le_audio_sink_hal_state_ != HAL_STARTED)) { LOG_ERROR("Audio HAL Audio sink was not started!"); return; } Loading