Camera2: Fix deadlock while zooming during record

Acquired SharedParameters before mMutex in StreamingProcessor,
this avoids any potential deadlocks since Camera2Client code would
always acquire SharedParameters first before invoking StreamingProcessor.

Bug: 7275259
Change-Id: Ia741162c455300378bee049f063590ece5328b95
diff --git a/services/camera/libcameraservice/camera2/StreamingProcessor.cpp b/services/camera/libcameraservice/camera2/StreamingProcessor.cpp
index 744b7ed..8921172 100644
--- a/services/camera/libcameraservice/camera2/StreamingProcessor.cpp
+++ b/services/camera/libcameraservice/camera2/StreamingProcessor.cpp
@@ -422,6 +422,9 @@
     if (client == 0) return;
 
     {
+        /* acquire SharedParameters before mMutex so we don't dead lock
+            with Camera2Client code calling into StreamingProcessor */
+        SharedParameters::Lock l(client->getParameters());
         Mutex::Autolock m(mMutex);
         BufferItemConsumer::BufferItem imgBuffer;
         res = mRecordingConsumer->acquireBuffer(&imgBuffer);
@@ -435,17 +438,14 @@
         mRecordingFrameCount++;
         ALOGV("OnRecordingFrame: Frame %d", mRecordingFrameCount);
 
-        {
-            SharedParameters::Lock l(client->getParameters());
-            // TODO: Signal errors here upstream
-            if (l.mParameters.state != Parameters::RECORD &&
-                    l.mParameters.state != Parameters::VIDEO_SNAPSHOT) {
-                ALOGV("%s: Camera %d: Discarding recording image buffers "
-                        "received after recording done", __FUNCTION__,
-                        client->getCameraId());
-                mRecordingConsumer->releaseBuffer(imgBuffer);
-                return;
-            }
+        // TODO: Signal errors here upstream
+        if (l.mParameters.state != Parameters::RECORD &&
+                l.mParameters.state != Parameters::VIDEO_SNAPSHOT) {
+            ALOGV("%s: Camera %d: Discarding recording image buffers "
+                    "received after recording done", __FUNCTION__,
+                    client->getCameraId());
+            mRecordingConsumer->releaseBuffer(imgBuffer);
+            return;
         }
 
         if (mRecordingHeap == 0) {