Allow clearing effect hal buffers
Test: SoloTest with int effects
Bug: 69855634
Change-Id: I273c9da600f3ab04890a7a1cb74b606cc28bea53
diff --git a/media/libaudiohal/EffectHalHidl.cpp b/media/libaudiohal/EffectHalHidl.cpp
index 61fb6bab..f4d1958 100644
--- a/media/libaudiohal/EffectHalHidl.cpp
+++ b/media/libaudiohal/EffectHalHidl.cpp
@@ -121,16 +121,24 @@
}
status_t EffectHalHidl::setInBuffer(const sp<EffectBufferHalInterface>& buffer) {
- if (mInBuffer == 0 || buffer->audioBuffer() != mInBuffer->audioBuffer()) {
- mBuffersChanged = true;
+ if (!mBuffersChanged) {
+ if (buffer.get() == nullptr || mInBuffer.get() == nullptr) {
+ mBuffersChanged = buffer.get() != mInBuffer.get();
+ } else {
+ mBuffersChanged = buffer->audioBuffer() != mInBuffer->audioBuffer();
+ }
}
mInBuffer = buffer;
return OK;
}
status_t EffectHalHidl::setOutBuffer(const sp<EffectBufferHalInterface>& buffer) {
- if (mOutBuffer == 0 || buffer->audioBuffer() != mOutBuffer->audioBuffer()) {
- mBuffersChanged = true;
+ if (!mBuffersChanged) {
+ if (buffer.get() == nullptr || mOutBuffer.get() == nullptr) {
+ mBuffersChanged = buffer.get() != mOutBuffer.get();
+ } else {
+ mBuffersChanged = buffer->audioBuffer() != mOutBuffer->audioBuffer();
+ }
}
mOutBuffer = buffer;
return OK;
diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp
index e77907a..e0d0d7b 100644
--- a/services/audioflinger/Effects.cpp
+++ b/services/audioflinger/Effects.cpp
@@ -903,9 +903,7 @@
mConfig.inputCfg.buffer.raw = NULL;
}
mInBuffer = buffer;
- if (buffer != nullptr) { // FIXME: EffectHalHidl::setInBuffer should accept null input.
- mEffectInterface->setInBuffer(buffer);
- }
+ mEffectInterface->setInBuffer(buffer);
#ifdef FLOAT_EFFECT_CHAIN
// aux effects do in place conversion to float - we don't allocate mInBuffer16 for them.
@@ -947,9 +945,7 @@
mConfig.outputCfg.buffer.raw = NULL;
}
mOutBuffer = buffer;
- if (buffer != nullptr) {
- mEffectInterface->setOutBuffer(buffer);
- }
+ mEffectInterface->setOutBuffer(buffer);
#ifdef FLOAT_EFFECT_CHAIN
// Note: Any effect that does not accumulate does not need mOutBuffer16 and