libaudiohal@aidl: Fix drain expectation
drain in IDLE or STANDBY is treated as success
BUG: 353460645
Test: play compress offload playback
Change-Id: I169d9f23fcacc9b7a614945d58c269f78e03a72e
diff --git a/media/libaudiohal/impl/StreamHalAidl.cpp b/media/libaudiohal/impl/StreamHalAidl.cpp
index 94de8ea..eba8d8b 100644
--- a/media/libaudiohal/impl/StreamHalAidl.cpp
+++ b/media/libaudiohal/impl/StreamHalAidl.cpp
@@ -798,9 +798,9 @@
status_t StreamOutHalAidl::drain(bool earlyNotify) {
if (!mStream) return NO_INIT;
- if(const auto state = getState(); state == StreamDescriptor::State::IDLE) {
- ALOGD("%p %s stream already in IDLE state", this, __func__);
- if(mContext.isAsynchronous()) onDrainReady();
+ if (const auto state = getState(); isInDrainedState(state)) {
+ ALOGD("%p %s stream already in %s", this, __func__, toString(state).c_str());
+ if (mContext.isAsynchronous()) onDrainReady();
return OK;
}
diff --git a/media/libaudiohal/impl/StreamHalAidl.h b/media/libaudiohal/impl/StreamHalAidl.h
index 0587640..62a1737 100644
--- a/media/libaudiohal/impl/StreamHalAidl.h
+++ b/media/libaudiohal/impl/StreamHalAidl.h
@@ -220,6 +220,16 @@
return mLastReply.state;
}
+ bool isInDrainedState(
+ const ::aidl::android::hardware::audio::core::StreamDescriptor::State state) {
+ if (state == ::aidl::android::hardware::audio::core::StreamDescriptor::State::IDLE ||
+ state == ::aidl::android::hardware::audio::core::StreamDescriptor::State::STANDBY) {
+ // drain equivalent states
+ return true;
+ }
+ return false;
+ }
+
status_t getLatency(uint32_t *latency);
// Always returns non-negative values.