AHAL: fix StreamUsb crash. am: fdee322c96 am: 1befadd762

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2504016

Change-Id: I90bf7ab192b83ac119dcef091ee69415e2a1e6ad
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
jiabin 2023-03-23 01:37:16 +00:00 committed by Automerger Merge Worker
commit 99e1788db0
2 changed files with 10 additions and 1 deletions

View file

@ -56,7 +56,7 @@ class DriverUsb : public DriverInterface {
std::vector<::aidl::android::media::audio::common::AudioDeviceAddress> mConnectedDevices
GUARDED_BY(mLock);
std::vector<std::shared_ptr<alsa_device_proxy>> mAlsaDeviceProxies GUARDED_BY(mLock);
bool mIsStandby = false;
bool mIsStandby = true;
};
class StreamInUsb final : public StreamIn {

View file

@ -107,10 +107,13 @@ DriverUsb::DriverUsb(const StreamContext& context, bool isInput)
::android::status_t DriverUsb::transfer(void* buffer, size_t frameCount, size_t* actualFrameCount,
int32_t* latencyMs) {
if (!mConfig.has_value() || mConnectedDevices.empty()) {
LOG(ERROR) << __func__ << ": failed, has config: " << mConfig.has_value()
<< ", has connected devices: " << mConnectedDevices.empty();
return ::android::NO_INIT;
}
if (mIsStandby) {
if (::android::status_t status = exitStandby(); status != ::android::OK) {
LOG(ERROR) << __func__ << ": failed to exit standby, status=" << status;
return status;
}
}
@ -151,6 +154,7 @@ DriverUsb::DriverUsb(const StreamContext& context, bool isInput)
std::vector<std::shared_ptr<alsa_device_proxy>> alsaDeviceProxies;
for (const auto& device : connectedDevices) {
alsa_device_profile profile;
profile_init(&profile, mIsInput ? PCM_IN : PCM_OUT);
profile.card = device.get<AudioDeviceAddress::alsa>()[0];
profile.device = device.get<AudioDeviceAddress::alsa>()[1];
if (!profile_read_device_info(&profile)) {
@ -174,6 +178,11 @@ DriverUsb::DriverUsb(const StreamContext& context, bool isInput)
<< " error=" << err;
return ::android::UNKNOWN_ERROR;
}
if (int err = proxy_open(proxy.get()); err != 0) {
LOG(ERROR) << __func__ << ": failed to open device, address=" << device.toString()
<< " error=" << err;
return ::android::UNKNOWN_ERROR;
}
alsaDeviceProxies.push_back(std::move(proxy));
}
{