Loading system/audio_hal_interface/aidl/le_audio_software_aidl.cc +38 −2 Original line number Diff line number Diff line Loading @@ -67,7 +67,15 @@ LeAudioTransport::LeAudioTransport(void (*flush)(void), data_position_({}), pcm_config_(std::move(pcm_config)), start_request_state_(StartRequestState::IDLE), dsa_mode_(DsaMode::DISABLED){}; dsa_mode_(DsaMode::DISABLED), cached_source_metadata_({}){}; LeAudioTransport::~LeAudioTransport() { if (cached_source_metadata_.tracks != nullptr) { free(cached_source_metadata_.tracks); cached_source_metadata_.tracks = nullptr; } } BluetoothAudioCtrlAck LeAudioTransport::StartRequest(bool is_low_latency) { // Check if operation is pending already Loading Loading @@ -166,6 +174,9 @@ void LeAudioTransport::SetLatencyMode(LatencyMode latency_mode) { LOG_DEBUG("Latency mode: %s", ::aidl::android::hardware::bluetooth::audio::toString(latency_mode) .c_str()); DsaMode prev_dsa_mode = dsa_mode_; switch (latency_mode) { case LatencyMode::FREE: dsa_mode_ = DsaMode::DISABLED; Loading @@ -181,7 +192,16 @@ void LeAudioTransport::SetLatencyMode(LatencyMode latency_mode) { break; default: LOG(WARNING) << ", invalid latency mode: " << (int)latency_mode; break; return; } if (IS_FLAG_ENABLED(leaudio_dynamic_spatial_audio)) { if (dsa_mode_ != prev_dsa_mode && cached_source_metadata_.tracks != nullptr && cached_source_metadata_.tracks != 0) { LOG(INFO) << ", latency mode changed, update source metadata"; stream_cb_.on_metadata_update_(cached_source_metadata_, dsa_mode_); } } } Loading Loading @@ -211,6 +231,22 @@ void LeAudioTransport::SourceMetadataChanged( return; } if (IS_FLAG_ENABLED(leaudio_dynamic_spatial_audio)) { if (cached_source_metadata_.tracks != nullptr) { free(cached_source_metadata_.tracks); cached_source_metadata_.tracks = nullptr; } LOG(INFO) << ", caching source metadata"; playback_track_metadata_v7* tracks; tracks = (playback_track_metadata_v7*)malloc(sizeof(*tracks) * track_count); memcpy(tracks, source_metadata.tracks, sizeof(*tracks) * track_count); cached_source_metadata_.track_count = track_count; cached_source_metadata_.tracks = tracks; } stream_cb_.on_metadata_update_(source_metadata, dsa_mode_); } Loading system/audio_hal_interface/aidl/le_audio_software_aidl.h +2 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ class LeAudioTransport { public: LeAudioTransport(void (*flush)(void), StreamCallbacks stream_cb, PcmConfiguration pcm_config); ~LeAudioTransport(); BluetoothAudioCtrlAck StartRequest(bool is_low_latency); BluetoothAudioCtrlAck StartRequestV2(bool is_low_latency); Loading Loading @@ -122,6 +123,7 @@ class LeAudioTransport { mutable std::mutex start_request_state_mutex_; std::atomic<StartRequestState> start_request_state_; DsaMode dsa_mode_; source_metadata_v7_t cached_source_metadata_; }; // Sink transport implementation for Le Audio Loading Loading
system/audio_hal_interface/aidl/le_audio_software_aidl.cc +38 −2 Original line number Diff line number Diff line Loading @@ -67,7 +67,15 @@ LeAudioTransport::LeAudioTransport(void (*flush)(void), data_position_({}), pcm_config_(std::move(pcm_config)), start_request_state_(StartRequestState::IDLE), dsa_mode_(DsaMode::DISABLED){}; dsa_mode_(DsaMode::DISABLED), cached_source_metadata_({}){}; LeAudioTransport::~LeAudioTransport() { if (cached_source_metadata_.tracks != nullptr) { free(cached_source_metadata_.tracks); cached_source_metadata_.tracks = nullptr; } } BluetoothAudioCtrlAck LeAudioTransport::StartRequest(bool is_low_latency) { // Check if operation is pending already Loading Loading @@ -166,6 +174,9 @@ void LeAudioTransport::SetLatencyMode(LatencyMode latency_mode) { LOG_DEBUG("Latency mode: %s", ::aidl::android::hardware::bluetooth::audio::toString(latency_mode) .c_str()); DsaMode prev_dsa_mode = dsa_mode_; switch (latency_mode) { case LatencyMode::FREE: dsa_mode_ = DsaMode::DISABLED; Loading @@ -181,7 +192,16 @@ void LeAudioTransport::SetLatencyMode(LatencyMode latency_mode) { break; default: LOG(WARNING) << ", invalid latency mode: " << (int)latency_mode; break; return; } if (IS_FLAG_ENABLED(leaudio_dynamic_spatial_audio)) { if (dsa_mode_ != prev_dsa_mode && cached_source_metadata_.tracks != nullptr && cached_source_metadata_.tracks != 0) { LOG(INFO) << ", latency mode changed, update source metadata"; stream_cb_.on_metadata_update_(cached_source_metadata_, dsa_mode_); } } } Loading Loading @@ -211,6 +231,22 @@ void LeAudioTransport::SourceMetadataChanged( return; } if (IS_FLAG_ENABLED(leaudio_dynamic_spatial_audio)) { if (cached_source_metadata_.tracks != nullptr) { free(cached_source_metadata_.tracks); cached_source_metadata_.tracks = nullptr; } LOG(INFO) << ", caching source metadata"; playback_track_metadata_v7* tracks; tracks = (playback_track_metadata_v7*)malloc(sizeof(*tracks) * track_count); memcpy(tracks, source_metadata.tracks, sizeof(*tracks) * track_count); cached_source_metadata_.track_count = track_count; cached_source_metadata_.tracks = tracks; } stream_cb_.on_metadata_update_(source_metadata, dsa_mode_); } Loading
system/audio_hal_interface/aidl/le_audio_software_aidl.h +2 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ class LeAudioTransport { public: LeAudioTransport(void (*flush)(void), StreamCallbacks stream_cb, PcmConfiguration pcm_config); ~LeAudioTransport(); BluetoothAudioCtrlAck StartRequest(bool is_low_latency); BluetoothAudioCtrlAck StartRequestV2(bool is_low_latency); Loading Loading @@ -122,6 +123,7 @@ class LeAudioTransport { mutable std::mutex start_request_state_mutex_; std::atomic<StartRequestState> start_request_state_; DsaMode dsa_mode_; source_metadata_v7_t cached_source_metadata_; }; // Sink transport implementation for Le Audio Loading