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