Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99e1788d authored by jiabin's avatar jiabin Committed by Automerger Merge Worker
Browse files

AHAL: fix StreamUsb crash. am: fdee322c am: 1befadd7

parents ada4a74c 1befadd7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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 {
+9 −0
Original line number Diff line number Diff line
@@ -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));
    }
    {