Merge "pal: start input bt devices before creating mmap buffer"
diff --git a/device/inc/Device.h b/device/inc/Device.h
index 638766d..c14a16a 100644
--- a/device/inc/Device.h
+++ b/device/inc/Device.h
@@ -100,6 +100,7 @@
//device atrributues per stream are stored by priority in a map
std::multimap<uint32_t, std::pair<Stream *, struct pal_device *>> mStreamDevAttr;
uint32_t mSampleRate = 0;
+ uint32_t mBitWidth = 0;
Device(struct pal_device *device, std::shared_ptr<ResourceManager> Rm);
Device();
@@ -138,6 +139,7 @@
virtual ~Device();
void getCurrentSndDevName(char *name);
void setSampleRate(uint32_t sr){mSampleRate = sr;};
+ void setBitWidth(uint32_t bw) {mBitWidth = bw;};
void lockDeviceMutex() { mDeviceMutex.lock(); };
void unlockDeviceMutex() { mDeviceMutex.unlock(); };
bool compareStreamDevAttr(const struct pal_device *inDevAttr,
diff --git a/device/src/Device.cpp b/device/src/Device.cpp
index 5694e41..5a75d7c 100644
--- a/device/src/Device.cpp
+++ b/device/src/Device.cpp
@@ -934,7 +934,10 @@
/* update sample rate if it's valid */
if (mSampleRate)
deviceAttr->config.sample_rate = mSampleRate;
-
+ if (mBitWidth) {
+ deviceAttr->config.bit_width = mBitWidth;
+ deviceAttr->config.aud_fmt_id = rm->getAudioFmt(mBitWidth);
+ }
#if DUMP_DEV_ATTR
pal_stream_attributes dumpstrAttr;
(*it).second.first->getStreamAttributes(&dumpstrAttr);
diff --git a/resource_manager/src/ResourceManager.cpp b/resource_manager/src/ResourceManager.cpp
index 8007e33..91352d7 100644
--- a/resource_manager/src/ResourceManager.cpp
+++ b/resource_manager/src/ResourceManager.cpp
@@ -4445,7 +4445,7 @@
* 1. sound model loaded but not started by sthal
* 2. stop recognition called by sthal
*/
- if (!str->isActive())
+ if (!str->isStarted())
continue;
cap_prof = str->GetCurrentCaptureProfile();
diff --git a/stream/inc/StreamSoundTrigger.h b/stream/inc/StreamSoundTrigger.h
index 035c1d7..c8cef55 100644
--- a/stream/inc/StreamSoundTrigger.h
+++ b/stream/inc/StreamSoundTrigger.h
@@ -147,7 +147,7 @@
bool enable __unused) {
return -ENOSYS;
}
-
+ bool isStarted();
void SetDetectedToEngines(bool detected);
int32_t SetEngineDetectionState(int32_t state);
@@ -181,7 +181,6 @@
(GetCurrentStateId() == ST_STATE_BUFFERING);
}
struct st_uuid GetVendorUuid();
-
void *GetGSLEngine() {
if (gsl_engine_)
return (void *)gsl_engine_.get();
diff --git a/stream/src/StreamCommon.cpp b/stream/src/StreamCommon.cpp
index bc00847..3c8c7e1 100644
--- a/stream/src/StreamCommon.cpp
+++ b/stream/src/StreamCommon.cpp
@@ -121,6 +121,8 @@
continue;
rm->getDeviceInfo(devAttr.id, sattr->type, "", &inDeviceInfo);
dev->setSampleRate(inDeviceInfo.samplerate);
+ if (devAttr.id == PAL_DEVICE_OUT_HANDSET)
+ dev->setBitWidth(inDeviceInfo.bit_width);
}
}
for (int i = 0; i < no_of_devices; i++) {
@@ -184,6 +186,7 @@
if (!dev)
continue;
dev->setSampleRate(0);
+ dev->setBitWidth(0);
}
}
diff --git a/stream/src/StreamSoundTrigger.cpp b/stream/src/StreamSoundTrigger.cpp
index afad0bb..8ae6c4a 100644
--- a/stream/src/StreamSoundTrigger.cpp
+++ b/stream/src/StreamSoundTrigger.cpp
@@ -1967,7 +1967,7 @@
}
TransitTo(ST_STATE_LOADED);
- if (st_stream_.isActive()) {
+ if (st_stream_.isStarted()) {
std::shared_ptr<StEventConfig> ev_cfg1(
new StStartRecognitionEventConfig(false));
status = st_stream_.ProcessInternalEvent(ev_cfg1);
@@ -2066,7 +2066,7 @@
}
case ST_EV_RESUME: {
st_stream_.paused_ = false;
- if (!st_stream_.isActive()) {
+ if (!st_stream_.isStarted()) {
// Possible if App has stopped recognition during active
// concurrency.
break;
@@ -2287,7 +2287,7 @@
st_stream_.device_opened_ = true;
}
- if (st_stream_.isActive() && !st_stream_.paused_) {
+ if (st_stream_.isStarted() && !st_stream_.paused_) {
status = dev->start();
if (0 != status) {
PAL_ERR(LOG_TAG, "device %d start failed with status %d",
@@ -2307,7 +2307,7 @@
st_stream_.mDevices.pop_back();
dev->close();
st_stream_.device_opened_ = false;
- } else if (st_stream_.isActive() && !st_stream_.paused_) {
+ } else if (st_stream_.isStarted() && !st_stream_.paused_) {
if (!rm->isDeviceActive_l(dev, &st_stream_))
st_stream_.rm->registerDevice(dev, &st_stream_);
if (st_stream_.second_stage_processing_) {
@@ -3514,6 +3514,12 @@
return status;
}
+bool StreamSoundTrigger::isStarted() {
+ return (currentState == STREAM_STARTED ||
+ GetCurrentStateId() == ST_STATE_BUFFERING ||
+ GetCurrentStateId() == ST_STATE_DETECTED);
+}
+
struct st_uuid StreamSoundTrigger::GetVendorUuid()
{
struct st_uuid uuid;