Merge "Stop audio capture before next start" into main
diff --git a/media/codec2/hal/client/output.cpp b/media/codec2/hal/client/output.cpp
index 4eebd1c..48f9756 100644
--- a/media/codec2/hal/client/output.cpp
+++ b/media/codec2/hal/client/output.cpp
@@ -336,9 +336,25 @@
}
void OutputBufferQueue::stop() {
- std::scoped_lock<std::mutex> l(mMutex);
- mStopped = true;
- mOwner.reset(); // destructor of the block will not triger IGBP::cancel()
+ std::shared_ptr<C2SurfaceSyncMemory> oldMem;
+ {
+ std::scoped_lock<std::mutex> l(mMutex);
+ if (mStopped) {
+ return;
+ }
+ mStopped = true;
+ mOwner.reset(); // destructor of the block will not trigger IGBP::cancel()
+ // basically configuring null surface
+ oldMem = mSyncMem;
+ mSyncMem.reset();
+ mIgbp.clear();
+ mGeneration = 0;
+ mBqId = 0;
+ }
+ {
+ std::scoped_lock<std::mutex> l(mOldMutex);
+ mOldMem = oldMem;
+ }
}
bool OutputBufferQueue::registerBuffer(const C2ConstGraphicBlock& block) {
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 86fd8ab..8082dd7 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -1915,8 +1915,16 @@
}
comp = state->comp;
}
- status_t err = comp->stop();
+
+ // Note: Logically mChannel->stopUseOutputSurface() should be after comp->stop().
+ // But in the case some HAL implementations hang forever on comp->stop().
+ // (HAL is waiting for C2Fence until fetchGraphicBlock unblocks and not
+ // completing stop()).
+ // So we reverse their order for stopUseOutputSurface() to notify C2Fence waiters
+ // prior to comp->stop().
+ // See also b/300350761.
mChannel->stopUseOutputSurface(pushBlankBuffer);
+ status_t err = comp->stop();
if (err != C2_OK) {
// TODO: convert err into status_t
mCallback->onError(UNKNOWN_ERROR, ACTION_CODE_FATAL);
@@ -2004,8 +2012,15 @@
}
comp = state->comp;
}
- comp->release();
+ // Note: Logically mChannel->stopUseOutputSurface() should be after comp->release().
+ // But in the case some HAL implementations hang forever on comp->release().
+ // (HAL is waiting for C2Fence until fetchGraphicBlock unblocks and not
+ // completing release()).
+ // So we reverse their order for stopUseOutputSurface() to notify C2Fence waiters
+ // prior to comp->release().
+ // See also b/300350761.
mChannel->stopUseOutputSurface(pushBlankBuffer);
+ comp->release();
{
Mutexed<State>::Locked state(mState);
diff --git a/media/janitors/media_reliability_OWNERS b/media/janitors/media_reliability_OWNERS
new file mode 100644
index 0000000..cced19c
--- /dev/null
+++ b/media/janitors/media_reliability_OWNERS
@@ -0,0 +1,5 @@
+# Bug component: 1051309
+# go/android-media-reliability
+
+essick@google.com
+nchalko@google.com
diff --git a/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp b/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp
index 87aaeac..7d807b2 100644
--- a/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp
+++ b/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp
@@ -243,7 +243,7 @@
[&](const auto& desc) { return desc.common.id.uuid == uuid; });
if (matchIt == list.end()) {
ALOGE("%s UUID not found in HAL and proxy list %s", __func__, toString(uuid).c_str());
- return BAD_VALUE;
+ return NAME_NOT_FOUND;
}
ALOGI("%s UUID impl found %s", __func__, toString(uuid).c_str());
diff --git a/media/mtp/tests/MtpFuzzer/MtpPacketFuzzerUtils.h b/media/mtp/tests/MtpFuzzer/MtpPacketFuzzerUtils.h
index 87fea9f..9be53a2 100644
--- a/media/mtp/tests/MtpFuzzer/MtpPacketFuzzerUtils.h
+++ b/media/mtp/tests/MtpFuzzer/MtpPacketFuzzerUtils.h
@@ -28,6 +28,7 @@
constexpr size_t kMinSize = 0;
constexpr size_t kMaxSize = 1000;
constexpr size_t kMaxLength = 1000;
+constexpr size_t kMaxPathLength = 64;
class MtpPacketFuzzerUtils {
protected:
@@ -43,7 +44,7 @@
};
void fillFilePath(FuzzedDataProvider* fdp) {
- mPath= fdp->ConsumeRandomLengthString(kMaxLength);
+ mPath= fdp->ConsumeRandomLengthString(kMaxPathLength);
};
void fillUsbDevFsUrb(FuzzedDataProvider* fdp) {