Merge "audioflinger and hal: Compatibility fixes for Treble"
diff --git a/media/libaudiohal/EffectHalHidl.cpp b/media/libaudiohal/EffectHalHidl.cpp
index 6cf6412..d74ef8a 100644
--- a/media/libaudiohal/EffectHalHidl.cpp
+++ b/media/libaudiohal/EffectHalHidl.cpp
@@ -172,7 +172,7 @@
}
status_t status;
uint32_t replySizeStub = 0;
- if (replySize == nullptr) replySize = &replySizeStub;
+ if (replySize == nullptr || pReplyData == nullptr) replySize = &replySizeStub;
Return<void> ret = mEffect->command(cmdCode, hidlData, *replySize,
[&](int32_t s, const hidl_vec<uint8_t>& result) {
status = s;
diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp
index 343ad25..2ce99e2 100644
--- a/services/audioflinger/Effects.cpp
+++ b/services/audioflinger/Effects.cpp
@@ -1630,11 +1630,16 @@
// and 'update' / 'commit' do nothing for allocated buffers, thus
// it's not needed to consider any other buffers here.
mInBuffer->update();
- mOutBuffer->update();
+ if (mInBuffer->audioBuffer()->raw != mOutBuffer->audioBuffer()->raw) {
+ mOutBuffer->update();
+ }
for (size_t i = 0; i < size; i++) {
mEffects[i]->process();
}
- mOutBuffer->commit();
+ mInBuffer->commit();
+ if (mInBuffer->audioBuffer()->raw != mOutBuffer->audioBuffer()->raw) {
+ mOutBuffer->commit();
+ }
}
bool doResetVolume = false;
for (size_t i = 0; i < size; i++) {
@@ -1935,6 +1940,17 @@
}
}
+static void dumpInOutBuffer(
+ char *dump, size_t dumpSize, bool isInput, EffectBufferHalInterface *buffer) {
+ if (buffer->externalData() != nullptr) {
+ snprintf(dump, dumpSize, "%p -> %p",
+ isInput ? buffer->externalData() : buffer->audioBuffer()->raw,
+ isInput ? buffer->audioBuffer()->raw : buffer->externalData());
+ } else {
+ snprintf(dump, dumpSize, "%p", buffer->audioBuffer()->raw);
+ }
+}
+
void AudioFlinger::EffectChain::dump(int fd, const Vector<String16>& args)
{
const size_t SIZE = 256;
@@ -1952,11 +1968,14 @@
result.append("\tCould not lock mutex:\n");
}
- result.append("\tIn buffer Out buffer Active tracks:\n");
- snprintf(buffer, SIZE, "\t%p %p %d\n",
- mInBuffer->audioBuffer(),
- mOutBuffer->audioBuffer(),
- mActiveTrackCnt);
+ char inBufferStr[64], outBufferStr[64];
+ dumpInOutBuffer(inBufferStr, sizeof(inBufferStr), true, mInBuffer.get());
+ dumpInOutBuffer(outBufferStr, sizeof(outBufferStr), false, mOutBuffer.get());
+ snprintf(buffer, SIZE, "\t%-*s%-*s Active tracks:\n",
+ (int)strlen(inBufferStr), "In buffer ",
+ (int)strlen(outBufferStr), "Out buffer ");
+ result.append(buffer);
+ snprintf(buffer, SIZE, "\t%s %s %d\n", inBufferStr, outBufferStr, mActiveTrackCnt);
result.append(buffer);
write(fd, result.string(), result.size());