Camera: Pause callback during stopPreview()
Camera2Client::stopPreview() returns when Camera3Device is drained
(i.e., all results are returned). However since results are
sent/received asynchronously through Camera3Device::getNextResult(),
Camera2Client could potentially receive additional frames after the
return of Camera2Client::stopPreview().
This CL fixes this by adding unpauseCallback() and pauseCallback() to
CallbackProcessor which allows us to explicitly pause and unpause
callbacks during stopPreview() and startPreview().
Bug: 177493760
Test: run cts -m CtsCameraTestCases -t android.hardware.cts.CameraTest
Change-Id: I5c13f50305b1a56f97d4e9c665b62959b3095d0e
diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp
index 1c9e9cf..31cfed6 100644
--- a/services/camera/libcameraservice/api1/Camera2Client.cpp
+++ b/services/camera/libcameraservice/api1/Camera2Client.cpp
@@ -935,6 +935,7 @@
return res;
}
+ mCallbackProcessor->unpauseCallback();
params.state = Parameters::PREVIEW;
return OK;
}
@@ -969,6 +970,7 @@
FALLTHROUGH_INTENDED;
case Parameters::RECORD:
case Parameters::PREVIEW:
+ mCallbackProcessor->pauseCallback();
syncWithDevice();
// Due to flush a camera device sync is not a sufficient
// guarantee that the current client parameters are