Camera: Mark streams unpreparable when using HAL buffer management

With CameraHal buffer management enabled there is a window of
opportunity where camera clients will be able to prepare streams
that already have submitted capture requests. Depending on timing
if the client is able to trigger prepare immediately after
submitting a capture request, then CameraHal might not be able to
request a buffer quickly enough and the prepare operation will
succeed which contradicts the public API guarantees.
To avoid this, mark the requested stream as unpreparable before
sending the request over to CameraHal.

Bug: 162884320
Test: Camera CTS

Change-Id: If9678fe440a5fbf12a6b2e424b9e63dd40d91fa8
diff --git a/services/camera/libcameraservice/device3/Camera3Stream.cpp b/services/camera/libcameraservice/device3/Camera3Stream.cpp
index 9a8f6fe..13c6a17 100644
--- a/services/camera/libcameraservice/device3/Camera3Stream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Stream.cpp
@@ -418,6 +418,13 @@
     return mStreamUnpreparable;
 }
 
+void Camera3Stream::markUnpreparable() {
+    ATRACE_CALL();
+
+    Mutex::Autolock l(mLock);
+    mStreamUnpreparable = true;
+}
+
 status_t Camera3Stream::startPrepare(int maxCount, bool blockRequest) {
     ATRACE_CALL();