Merge c25a6c256d37c0a56801d2cf2aad7c0c232101e8 on remote branch
Change-Id: Icb52132f5bc043904ac8599c07c5b300413b3676
diff --git a/configs/kalama/mixer_paths_kalama_aim.xml b/configs/kalama/mixer_paths_kalama_aim.xml
index dd4b367..c85fb7d 100644
--- a/configs/kalama/mixer_paths_kalama_aim.xml
+++ b/configs/kalama/mixer_paths_kalama_aim.xml
@@ -1094,17 +1094,12 @@
<ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
<ctl name="TX DEC2 MUX" value="SWR_MIC" />
<ctl name="TX DEC3 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX2" value="SWR_MIC4" />
- <ctl name="TX SMIC MUX3" value="SWR_MIC5" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="TX3 MODE" value="ADC_LP" />
- <ctl name="ADC2 MUX" value="INP3" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="ADC1_MIXER Switch" value="1" />
- <ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="AMIC1_MIXER Switch" value="1" />
- <ctl name="AMIC3_MIXER Switch" value="1" />
+ <ctl name="TX SMIC MUX2" value="SWR_MIC1" />
+ <ctl name="TX SMIC MUX3" value="SWR_MIC3" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX1_CH2" />
+ <ctl name="DMIC3 ChMap" value="SWRM_TX1_CH4" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
+ <ctl name="DMIC3_MIXER Switch" value="1" />
</path>
<path name="speaker-dmic-endfire">
diff --git a/configs/kalama/resourcemanager_kalama_rb5_gen2_dvt.xml b/configs/kalama/resourcemanager_kalama_rb5_gen2_dvt.xml
index 6ef74c6..fec0183 100644
--- a/configs/kalama/resourcemanager_kalama_rb5_gen2_dvt.xml
+++ b/configs/kalama/resourcemanager_kalama_rb5_gen2_dvt.xml
@@ -28,7 +28,7 @@
* Changes from Qualcomm Innovation Center, Inc. are provided under the following license:
*
-* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted (subject to the limitations in the
@@ -912,11 +912,13 @@
</out-device>
<out-device>
<id>PAL_DEVICE_OUT_HDMI</id>
- <back_end_name>DISPLAY_PORT-RX</back_end_name>
- <max_channels>32</max_channels>
+ <back_end_name>MI2S-LPAIF-RX-SECONDARY</back_end_name>
+ <max_channels>2</max_channels>
<channels>2</channels>
<fractional_sr>1</fractional_sr>
- <snd_device_name>display-port</snd_device_name>
+ <snd_device_name>hdmi-port</snd_device_name>
+ <samplerate>48000</samplerate>
+ <bit_width>16</bit_width>
<usecase>
<name>PAL_STREAM_VOICE_CALL</name>
<priority>1</priority>
diff --git a/resource_manager/src/ResourceManager.cpp b/resource_manager/src/ResourceManager.cpp
index 61d7ed2..ffd926e 100644
--- a/resource_manager/src/ResourceManager.cpp
+++ b/resource_manager/src/ResourceManager.cpp
@@ -8983,7 +8983,7 @@
}
getOrphanStream_l(orphanStreams, retryStreams);
- if (activeStreams.empty() && orphanStreams.empty()) {
+ if (activeStreams.empty() && orphanStreams.empty() && retryStreams.empty()) {
PAL_DBG(LOG_TAG, "no active streams found");
mActiveStreamMutex.unlock();
goto exit;
@@ -9009,6 +9009,24 @@
}
}
+ // retry all streams which failed to switch to desired device previously.
+ for (sIter = retryStreams.begin(); sIter != retryStreams.end(); sIter++) {
+ (*sIter)->lockStreamMutex();
+ if (std::find((*sIter)->suspendedDevIds.begin(), (*sIter)->suspendedDevIds.end(),
+ a2dpDattr.id) != (*sIter)->suspendedDevIds.end()) {
+ std::vector<std::shared_ptr<Device>> devices;
+ (*sIter)->getAssociatedDevices(devices);
+ if (devices.size() > 0) {
+ for (auto device : devices) {
+ streamDevDisconnect.push_back({ (*sIter), device->getSndDeviceId() });
+ }
+ }
+ restoredStreams.push_back((*sIter));
+ streamDevConnect.push_back({ (*sIter), &a2dpDattr });
+ }
+ (*sIter)->unlockStreamMutex();
+ }
+
if (restoredStreams.empty()) {
PAL_DBG(LOG_TAG, "no streams to be restored");
mActiveStreamMutex.unlock();
@@ -9981,6 +9999,11 @@
struct pal_stream_attributes sAttr;
Stream* stream = NULL;
std::vector<Stream*> activestreams;
+ struct pal_device sco_tx_dattr;
+ std::shared_ptr<Device> sco_tx_dev = nullptr;
+ std::vector<Stream*>::iterator sIter;
+ pal_stream_type_t streamType;
+
mActiveStreamMutex.lock();
sco_rx_dattr.id = PAL_DEVICE_OUT_BLUETOOTH_SCO;
@@ -10001,6 +10024,26 @@
mActiveStreamMutex.lock();
}
}
+
+ /* Handle bt sco running usecase */
+ sco_tx_dattr.id = PAL_DEVICE_IN_BLUETOOTH_SCO_HEADSET;
+ if (isDeviceAvailable(sco_tx_dattr.id)) {
+ sco_tx_dev = Device::getInstance(&sco_tx_dattr, rm);
+ getActiveStream_l(activestreams, sco_tx_dev);
+ for (sIter = activestreams.begin(); sIter != activestreams.end(); sIter++) {
+ status = (*sIter)->getStreamType(&streamType);
+ if (0 != status) {
+ PAL_ERR(LOG_TAG, "getStreamType failed with status = %d", status);
+ continue;
+ }
+ if ((streamType == PAL_STREAM_VOIP_TX) ||
+ (streamType == PAL_STREAM_DEEP_BUFFER)) {
+ (*sIter)->suspendedDevIds.clear();
+ (*sIter)->suspendedDevIds.push_back(a2dp_dattr.id);
+ PAL_DBG(LOG_TAG, "a2dp resumed, mark sco streams as to route them later");
+ }
+ }
+ }
mActiveStreamMutex.unlock();
}
diff --git a/session/src/SessionAlsaCompress.cpp b/session/src/SessionAlsaCompress.cpp
index e6b9e9e..abedfc9 100644
--- a/session/src/SessionAlsaCompress.cpp
+++ b/session/src/SessionAlsaCompress.cpp
@@ -939,17 +939,43 @@
deviceToConnect->getDeviceAttributes(&dAttr);
if (!rxAifBackEndsToConnect.empty()) {
- status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
- dAttr, compressDevIds, rxAifBackEndsToConnect);
for (const auto &elem : rxAifBackEndsToConnect)
rxAifBackEnds.push_back(elem);
+ status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
+ dAttr, compressDevIds, rxAifBackEndsToConnect);
+ if (status) {
+ int cnt = 0;
+ for (const auto &elem : rxAifBackEnds) {
+ cnt++;
+ for (const auto &connectElem : rxAifBackEndsToConnect) {
+ if (std::get<0>(elem) == std::get<0>(connectElem)) {
+ rxAifBackEnds.erase(rxAifBackEnds.begin() + cnt - 1, rxAifBackEnds.begin() + cnt);
+ cnt--;
+ break;
+ }
+ }
+ }
+ }
}
if (!txAifBackEndsToConnect.empty()) {
- status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
- dAttr, compressDevIds, txAifBackEndsToConnect);
for (const auto &elem : txAifBackEndsToConnect)
txAifBackEnds.push_back(elem);
+ status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
+ dAttr, compressDevIds, txAifBackEndsToConnect);
+ if (status) {
+ int cnt = 0;
+ for (const auto &elem : txAifBackEnds) {
+ cnt++;
+ for (const auto &connectElem : txAifBackEndsToConnect) {
+ if (std::get<0>(elem) == std::get<0>(connectElem)) {
+ txAifBackEnds.erase(txAifBackEnds.begin() + cnt - 1, txAifBackEnds.begin() + cnt);
+ cnt--;
+ break;
+ }
+ }
+ }
+ }
}
diff --git a/session/src/SessionAlsaPcm.cpp b/session/src/SessionAlsaPcm.cpp
index efd5284..e34436a 100644
--- a/session/src/SessionAlsaPcm.cpp
+++ b/session/src/SessionAlsaPcm.cpp
@@ -2178,6 +2178,9 @@
deviceToConnect->getDeviceAttributes(&dAttr);
if (!rxAifBackEndsToConnect.empty()) {
+ for (const auto &elem : rxAifBackEndsToConnect)
+ rxAifBackEnds.push_back(elem);
+
if (streamType != PAL_STREAM_ULTRASOUND &&
streamType != PAL_STREAM_LOOPBACK)
status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
@@ -2186,16 +2189,27 @@
status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
dAttr, pcmDevTxIds, pcmDevRxIds, rxAifBackEndsToConnect);
- if (!status) {
- for (const auto &elem : rxAifBackEndsToConnect)
- rxAifBackEnds.push_back(elem);
- } else {
+ if (status) {
PAL_ERR(LOG_TAG, "failed to connect rxAifBackEnds: %d",
(pcmDevIds.size() ? pcmDevIds.at(0) : pcmDevRxIds.at(0)));
+ int cnt = 0;
+ for (const auto &elem : rxAifBackEnds) {
+ cnt++;
+ for (const auto &connectElem : rxAifBackEndsToConnect) {
+ if (std::get<0>(elem) == std::get<0>(connectElem)) {
+ rxAifBackEnds.erase(rxAifBackEnds.begin() + cnt - 1, rxAifBackEnds.begin() + cnt);
+ cnt--;
+ break;
+ }
+ }
+ }
}
}
if (!txAifBackEndsToConnect.empty()) {
+ for (const auto &elem : txAifBackEndsToConnect)
+ txAifBackEnds.push_back(elem);
+
if (streamType != PAL_STREAM_LOOPBACK)
status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
dAttr, (pcmDevIds.size() ? pcmDevIds : pcmDevTxIds), txAifBackEndsToConnect);
@@ -2203,12 +2217,20 @@
status = SessionAlsaUtils::connectSessionDevice(this, streamHandle, streamType, rm,
dAttr, pcmDevTxIds, pcmDevRxIds, txAifBackEndsToConnect);
- if (!status) {
- for (const auto &elem : txAifBackEndsToConnect)
- txAifBackEnds.push_back(elem);
- } else {
+ if (status) {
+ int cnt = 0;
PAL_ERR(LOG_TAG, "failed to connect txAifBackEnds: %d",
(pcmDevIds.size() ? pcmDevIds.at(0) : pcmDevTxIds.at(0)));
+ for (const auto &elem : txAifBackEnds) {
+ cnt++;
+ for (const auto &connectElem : txAifBackEndsToConnect) {
+ if (std::get<0>(elem) == std::get<0>(connectElem)) {
+ txAifBackEnds.erase(txAifBackEnds.begin() + cnt - 1, txAifBackEnds.begin() + cnt);
+ cnt--;
+ break;
+ }
+ }
+ }
}
}
@@ -2404,8 +2426,10 @@
{
pal_param_device_rotation_t *rotation =
(pal_param_device_rotation_t *)payload;
- status = handleDeviceRotation(streamHandle, rotation->rotation_type,
- device, mixer, builder, rxAifBackEnds);
+ if (!rxAifBackEnds.empty()) {
+ status = handleDeviceRotation(streamHandle, rotation->rotation_type,
+ device, mixer, builder, rxAifBackEnds);
+ }
goto exit;
}
case PAL_PARAM_ID_LOAD_SOUND_MODEL:
diff --git a/session/src/SessionAlsaUtils.cpp b/session/src/SessionAlsaUtils.cpp
index 8118ead..c9f7a7b 100644
--- a/session/src/SessionAlsaUtils.cpp
+++ b/session/src/SessionAlsaUtils.cpp
@@ -2383,6 +2383,15 @@
goto exit;
}
}
+ if (sAttr.direction == PAL_AUDIO_INPUT) {
+ if (strstr(dAttr.custom_config.custom_key , "unprocessed-hdr-mic")) {
+ status = sess->setConfig(streamHandle, MODULE, ORIENTATION_TAG);
+ if (0 != status) {
+ PAL_ERR(LOG_TAG, "setting HDR record orientation config failed with status %d", status);
+ goto exit;
+ }
+ }
+ }
} else if (!(SessionAlsaUtils::isMmapUsecase(sAttr))) {
if (sess) {
SessionAlsaVoice *voiceSession = dynamic_cast<SessionAlsaVoice *>(sess);