mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 10:44:41 +00:00
Add onSessionEnded handle for HIDL 2.2 am: f33cea94ce am: 6fe717551f am: 99a712ab4d
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1928381 Change-Id: I83b9e0f240a9d8ace9204c8ded063063d7663148
This commit is contained in:
@@ -76,6 +76,12 @@ class BluetoothAudioSessionControl_2_2 {
|
||||
} else if (session_type ==
|
||||
SessionType_2_1::A2DP_HARDWARE_OFFLOAD_DATAPATH) {
|
||||
return BluetoothAudioSession_2_2::kInvalidOffloadAudioConfiguration;
|
||||
} else if (
|
||||
session_type ==
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type ==
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
|
||||
return BluetoothAudioSession_2_2::kInvalidLeOffloadAudioConfiguration;
|
||||
} else {
|
||||
return BluetoothAudioSession_2_2::kInvalidSoftwareAudioConfiguration;
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class BluetoothAudioSessionReport_2_2 {
|
||||
std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
|
||||
BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
|
||||
if (session_ptr != nullptr) {
|
||||
session_ptr->GetAudioSession()->OnSessionEnded();
|
||||
session_ptr->OnSessionEnded();
|
||||
}
|
||||
}
|
||||
// The API reports the Bluetooth stack has replied the result of startStream
|
||||
|
||||
@@ -29,6 +29,13 @@ namespace audio {
|
||||
using ::android::hardware::audio::common::V5_0::AudioSource;
|
||||
using ::android::hardware::audio::common::V5_0::RecordTrackMetadata;
|
||||
using ::android::hardware::audio::common::V5_0::SinkMetadata;
|
||||
using ::android::hardware::bluetooth::audio::V2_0::BitsPerSample;
|
||||
using ::android::hardware::bluetooth::audio::V2_0::ChannelMode;
|
||||
using ::android::hardware::bluetooth::audio::V2_2::LeAudioConfiguration;
|
||||
using ::android::hardware::bluetooth::audio::V2_2::LeAudioMode;
|
||||
using PcmParameters_2_1 =
|
||||
::android::hardware::bluetooth::audio::V2_1::PcmParameters;
|
||||
using SampleRate_2_1 = ::android::hardware::bluetooth::audio::V2_1::SampleRate;
|
||||
|
||||
using SessionType_2_1 =
|
||||
::android::hardware::bluetooth::audio::V2_1::SessionType;
|
||||
@@ -38,10 +45,24 @@ using SessionType_2_0 =
|
||||
using AudioConfiguration_2_1 =
|
||||
::android::hardware::bluetooth::audio::V2_1::AudioConfiguration;
|
||||
|
||||
static constexpr PcmParameters_2_1 kInvalidPcmParameters = {
|
||||
.sampleRate = SampleRate_2_1::RATE_UNKNOWN,
|
||||
.channelMode = ChannelMode::UNKNOWN,
|
||||
.bitsPerSample = BitsPerSample::BITS_UNKNOWN,
|
||||
.dataIntervalUs = 0,
|
||||
};
|
||||
|
||||
static LeAudioConfiguration kInvalidLeAudioConfig = {
|
||||
.mode = LeAudioMode::UNKNOWN,
|
||||
.config = {},
|
||||
};
|
||||
|
||||
::android::hardware::bluetooth::audio::V2_2::AudioConfiguration
|
||||
BluetoothAudioSession_2_2::invalidSoftwareAudioConfiguration = {};
|
||||
::android::hardware::bluetooth::audio::V2_2::AudioConfiguration
|
||||
BluetoothAudioSession_2_2::invalidOffloadAudioConfiguration = {};
|
||||
::android::hardware::bluetooth::audio::V2_2::AudioConfiguration
|
||||
BluetoothAudioSession_2_2::invalidLeOffloadAudioConfiguration = {};
|
||||
|
||||
using IBluetoothAudioPort_2_2 =
|
||||
::android::hardware::bluetooth::audio::V2_2::IBluetoothAudioPort;
|
||||
@@ -72,6 +93,10 @@ BluetoothAudioSession_2_2::BluetoothAudioSession_2_2(
|
||||
} else {
|
||||
session_type_2_1_ = (session_type);
|
||||
}
|
||||
invalidSoftwareAudioConfiguration.pcmConfig(kInvalidPcmParameters);
|
||||
invalidOffloadAudioConfiguration.codecConfig(
|
||||
audio_session->kInvalidCodecConfiguration);
|
||||
invalidLeOffloadAudioConfiguration.leAudioConfig(kInvalidLeAudioConfig);
|
||||
}
|
||||
|
||||
bool BluetoothAudioSession_2_2::IsSessionReady() {
|
||||
@@ -149,9 +174,17 @@ const ::android::hardware::bluetooth::audio::V2_2::AudioConfiguration
|
||||
BluetoothAudioSession_2_2::GetAudioConfig() {
|
||||
std::lock_guard<std::recursive_mutex> guard(audio_session->mutex_);
|
||||
if (IsSessionReady()) {
|
||||
auto audio_config_discriminator = audio_config_2_2_.getDiscriminator();
|
||||
// If session is unknown it means it should be 2.0 type
|
||||
if (session_type_2_1_ != SessionType_2_1::UNKNOWN) {
|
||||
if (audio_config_2_2_ != invalidSoftwareAudioConfiguration)
|
||||
if ((audio_config_discriminator ==
|
||||
::android::hardware::bluetooth::audio::V2_2::AudioConfiguration::
|
||||
hidl_discriminator::pcmConfig &&
|
||||
audio_config_2_2_ != kInvalidSoftwareAudioConfiguration) ||
|
||||
(audio_config_discriminator ==
|
||||
::android::hardware::bluetooth::audio::V2_2::AudioConfiguration::
|
||||
hidl_discriminator::leAudioConfig &&
|
||||
audio_config_2_2_ != kInvalidLeOffloadAudioConfiguration))
|
||||
return audio_config_2_2_;
|
||||
|
||||
::android::hardware::bluetooth::audio::V2_2::AudioConfiguration toConf;
|
||||
@@ -181,8 +214,10 @@ BluetoothAudioSession_2_2::GetAudioConfig() {
|
||||
}
|
||||
return toConf;
|
||||
} else if (session_type_2_1_ ==
|
||||
SessionType_2_1::A2DP_HARDWARE_OFFLOAD_DATAPATH) {
|
||||
return kInvalidOffloadAudioConfiguration;
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type_2_1_ ==
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
|
||||
return kInvalidLeOffloadAudioConfiguration;
|
||||
} else {
|
||||
return kInvalidSoftwareAudioConfiguration;
|
||||
}
|
||||
@@ -314,8 +349,11 @@ void BluetoothAudioSession_2_2::OnSessionStarted(
|
||||
LOG(ERROR) << __func__ << " - SessionType=" << toString(session_type_2_1_)
|
||||
<< " DataMQ Invalid";
|
||||
audio_config_2_2_ =
|
||||
(session_type_2_1_ == SessionType_2_1::A2DP_HARDWARE_OFFLOAD_DATAPATH
|
||||
? kInvalidOffloadAudioConfiguration
|
||||
((session_type_2_1_ ==
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type_2_1_ ==
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH)
|
||||
? kInvalidLeOffloadAudioConfiguration
|
||||
: kInvalidSoftwareAudioConfiguration);
|
||||
} else {
|
||||
audio_session->stack_iface_ = stack_iface;
|
||||
@@ -326,6 +364,32 @@ void BluetoothAudioSession_2_2::OnSessionStarted(
|
||||
}
|
||||
}
|
||||
|
||||
// The report function is used to report that the Bluetooth stack has ended the
|
||||
// session, and will invoke session_changed_cb_ to notify registered
|
||||
// bluetooth_audio outputs
|
||||
void BluetoothAudioSession_2_2::OnSessionEnded() {
|
||||
std::lock_guard<std::recursive_mutex> guard(audio_session->mutex_);
|
||||
bool toggled = IsSessionReady();
|
||||
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_2_1_);
|
||||
if (session_type_2_1_ == SessionType_2_1::UNKNOWN) {
|
||||
audio_session->OnSessionEnded();
|
||||
return;
|
||||
}
|
||||
|
||||
audio_config_2_2_ =
|
||||
((session_type_2_1_ ==
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type_2_1_ ==
|
||||
SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH)
|
||||
? kInvalidLeOffloadAudioConfiguration
|
||||
: kInvalidSoftwareAudioConfiguration);
|
||||
audio_session->stack_iface_ = nullptr;
|
||||
audio_session->UpdateDataPath(nullptr);
|
||||
if (toggled) {
|
||||
audio_session->ReportSessionStatus();
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<BluetoothAudioSessionInstance_2_2>
|
||||
BluetoothAudioSessionInstance_2_2::instance_ptr =
|
||||
std::unique_ptr<BluetoothAudioSessionInstance_2_2>(
|
||||
|
||||
@@ -47,6 +47,8 @@ class BluetoothAudioSession_2_2 {
|
||||
invalidSoftwareAudioConfiguration;
|
||||
static ::android::hardware::bluetooth::audio::V2_2::AudioConfiguration
|
||||
invalidOffloadAudioConfiguration;
|
||||
static ::android::hardware::bluetooth::audio::V2_2::AudioConfiguration
|
||||
invalidLeOffloadAudioConfiguration;
|
||||
|
||||
public:
|
||||
BluetoothAudioSession_2_2(
|
||||
@@ -69,6 +71,11 @@ class BluetoothAudioSession_2_2 {
|
||||
const ::android::hardware::bluetooth::audio::V2_2::AudioConfiguration&
|
||||
audio_config);
|
||||
|
||||
// The report function is used to report that the Bluetooth stack has ended
|
||||
// the session, and will invoke session_changed_cb_ to notify registered
|
||||
// bluetooth_audio outputs
|
||||
void OnSessionEnded();
|
||||
|
||||
// Those control functions are for the bluetooth_audio module to start,
|
||||
// suspend, stop stream, to check position, and to update metadata.
|
||||
bool StartStream();
|
||||
@@ -88,6 +95,9 @@ class BluetoothAudioSession_2_2 {
|
||||
static constexpr ::android::hardware::bluetooth::audio::V2_2::
|
||||
AudioConfiguration& kInvalidOffloadAudioConfiguration =
|
||||
invalidOffloadAudioConfiguration;
|
||||
static constexpr ::android::hardware::bluetooth::audio::V2_2::
|
||||
AudioConfiguration& kInvalidLeOffloadAudioConfiguration =
|
||||
invalidLeOffloadAudioConfiguration;
|
||||
};
|
||||
|
||||
class BluetoothAudioSessionInstance_2_2 {
|
||||
|
||||
Reference in New Issue
Block a user