QCamera2: HAL3: Synchronize access to offline buffers

"mOfflineMetaBuffers" and "mOfflineBuffers" can be modified
by two threads at the same leading to crashes. To avoid this
serialize the access by using an additional mutex.

Bug: 64194071
Test: Camera CTS
Change-Id: I358a1412e944084d4a54f3cdd9aa4a7eb08e8a95
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp
index 8bd1deb..dcc94b5 100644
--- a/camera/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp
@@ -4330,6 +4330,7 @@
 int32_t QCamera3ReprocessChannel::unmapOfflineBuffers(bool all)
 {
     int rc = NO_ERROR;
+    Mutex::Autolock l(mOfflineBuffersLock);
     if (!mOfflineBuffers.empty()) {
         QCamera3Stream *stream = NULL;
         List<OfflineBuffer>::iterator it = mOfflineBuffers.begin();
@@ -4738,6 +4739,7 @@
             frame->input_buffer.fd, frame->input_buffer.buffer,
             frame->input_buffer.frame_len);
     if (NO_ERROR == rc) {
+        Mutex::Autolock l(mOfflineBuffersLock);
         mappedBuffer.index = buf_idx;
         mappedBuffer.stream = pStream;
         mappedBuffer.type = CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF;
@@ -4758,6 +4760,7 @@
             frame->metadata_buffer.fd, frame->metadata_buffer.buffer,
             frame->metadata_buffer.frame_len);
     if (NO_ERROR == rc) {
+        Mutex::Autolock l(mOfflineBuffersLock);
         mappedBuffer.index = meta_buf_idx;
         mappedBuffer.stream = pStream;
         mappedBuffer.type = CAM_MAPPING_BUF_TYPE_OFFLINE_META_BUF;
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.h b/camera/QCamera2/HAL3/QCamera3Channel.h
index 3c8cb37..dca7c9f 100644
--- a/camera/QCamera2/HAL3/QCamera3Channel.h
+++ b/camera/QCamera2/HAL3/QCamera3Channel.h
@@ -599,6 +599,7 @@
     } OfflineBuffer;
 
     int32_t resetToCamPerfNormal(uint32_t frameNumber);
+    Mutex mOfflineBuffersLock; // Lock for offline buffers
     android::List<OfflineBuffer> mOfflineBuffers;
     android::List<OfflineBuffer> mOfflineMetaBuffers;
     int32_t mOfflineBuffersIndex;