diff --git a/audio/aidl/default/include/core-impl/StreamUsb.h b/audio/aidl/default/include/core-impl/StreamUsb.h index f1815ddbf5..36e64cbcdb 100644 --- a/audio/aidl/default/include/core-impl/StreamUsb.h +++ b/audio/aidl/default/include/core-impl/StreamUsb.h @@ -56,7 +56,7 @@ class DriverUsb : public DriverInterface { std::vector<::aidl::android::media::audio::common::AudioDeviceAddress> mConnectedDevices GUARDED_BY(mLock); std::vector> mAlsaDeviceProxies GUARDED_BY(mLock); - bool mIsStandby = false; + bool mIsStandby = true; }; class StreamInUsb final : public StreamIn { diff --git a/audio/aidl/default/usb/StreamUsb.cpp b/audio/aidl/default/usb/StreamUsb.cpp index fbfe0f11de..5d1d7febc8 100644 --- a/audio/aidl/default/usb/StreamUsb.cpp +++ b/audio/aidl/default/usb/StreamUsb.cpp @@ -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> alsaDeviceProxies; for (const auto& device : connectedDevices) { alsa_device_profile profile; + profile_init(&profile, mIsInput ? PCM_IN : PCM_OUT); profile.card = device.get()[0]; profile.device = device.get()[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)); } {