Camera: Exit PreviewStreamSpacer when disconnecting stream
- Call requestExit() during Camera3OutputStream disconnect.
- Remove requestExitAndWait() from the PreviewStreamSpacer
destructor.
- Return false if exitPending() is true in threadLoop.
- Use wp<> when accessing parent from PreviewStreamSpacer.
Test: Camera CTS, and vendor testing
Bug: 232046746
Bug: 232829166
Change-Id: I136a93fee37cd6fbdb8050cacea1511170e03ee6
diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
index 1ce7108..4a9b259 100644
--- a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
@@ -689,7 +689,7 @@
mSyncToDisplay = true;
mTotalBufferCount += kDisplaySyncExtraBuffer;
} else if (defaultToSpacer) {
- mPreviewFrameSpacer = new PreviewFrameSpacer(*this, mConsumer);
+ mPreviewFrameSpacer = new PreviewFrameSpacer(this, mConsumer);
mTotalBufferCount ++;
res = mPreviewFrameSpacer->run(String8::format("PreviewSpacer-%d", mId).string());
if (res != OK) {
@@ -970,6 +970,10 @@
returnPrefetchedBuffersLocked();
+ if (mPreviewFrameSpacer != nullptr) {
+ mPreviewFrameSpacer->requestExit();
+ }
+
ALOGV("%s: disconnecting stream %d from native window", __FUNCTION__, getId());
res = native_window_api_disconnect(mConsumer.get(),