Merge "QCamera3: Do not cache Jpeg input buffers" into oc-mr1-dev
diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
index 6307aaa..fd0c9c4 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
@@ -3715,7 +3715,7 @@
         Mutex::Autolock lock(mFreeBuffersLock);
         uint32_t bufIdx;
         if (mFreeBufferList.empty()) {
-            rc = mYuvMemory->allocateOne(mFrameLen);
+            rc = mYuvMemory->allocateOne(mFrameLen, /*isCached*/false);
             if (rc < 0) {
                 LOGE("Failed to allocate heap buffer. Fatal");
                 return rc;
@@ -4049,7 +4049,7 @@
     // Get an available YUV buffer.
     if (mFreeBufferList.empty()) {
         // Allocate a buffer if no one is available.
-        rc = mYuvMemory->allocateOne(mFrameLen);
+        rc = mYuvMemory->allocateOne(mFrameLen, /*isCached*/false);
         if (rc < 0) {
             LOGE("Failed to allocate heap buffer. Fatal");
             return rc;
@@ -4132,9 +4132,6 @@
         return rc;
     }
 
-    // Invalidate YUV buffer cache
-    mYuvMemory->invalidateCache(frame->buf_idx);
-
     // Start postprocessor
     startPostProc(reproc_cfg);
 
diff --git a/msm8998/QCamera2/HAL3/QCamera3Mem.cpp b/msm8998/QCamera2/HAL3/QCamera3Mem.cpp
index 4298bbe..9cccf32 100755
--- a/msm8998/QCamera2/HAL3/QCamera3Mem.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Mem.cpp
@@ -303,7 +303,7 @@
  *              none-zero failure code
  *==========================================================================*/
 int QCamera3HeapMemory::allocOneBuffer(QCamera3MemInfo &memInfo,
-        unsigned int heap_id, size_t size)
+        unsigned int heap_id, size_t size, bool isCached)
 {
     int rc = OK;
     struct ion_handle_data handle_data;
@@ -320,7 +320,9 @@
     /* to make it page size aligned */
     allocData.len = (allocData.len + 4095U) & (~4095U);
     allocData.align = 4096;
-    allocData.flags = ION_FLAG_CACHED;
+    if (isCached) {
+        allocData.flags = ION_FLAG_CACHED;
+    }
     allocData.heap_id_mask = heap_id;
     rc = ioctl(main_ion_fd, ION_IOC_ALLOC, &allocData);
     if (rc < 0) {
@@ -617,7 +619,7 @@
  *              NO_ERROR  -- success
  *              none-zero failure code
  *==========================================================================*/
-int QCamera3HeapMemory::allocateOne(size_t size)
+int QCamera3HeapMemory::allocateOne(size_t size, bool isCached)
 {
     unsigned int heap_id_mask = 0x1 << ION_IOMMU_HEAP_ID;
     int rc = NO_ERROR;
@@ -631,7 +633,7 @@
         return BAD_INDEX;
     }
 
-    rc = allocOneBuffer(mMemInfo[mBufferCount], heap_id_mask, size);
+    rc = allocOneBuffer(mMemInfo[mBufferCount], heap_id_mask, size, isCached);
     if (rc < 0) {
         LOGE("AllocateIonMemory failed");
         return NO_MEMORY;
diff --git a/msm8998/QCamera2/HAL3/QCamera3Mem.h b/msm8998/QCamera2/HAL3/QCamera3Mem.h
index 14224e4..eb1ac6f 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Mem.h
+++ b/msm8998/QCamera2/HAL3/QCamera3Mem.h
@@ -107,7 +107,7 @@
     virtual ~QCamera3HeapMemory();
 
     int allocate(size_t size);
-    int allocateOne(size_t size);
+    int allocateOne(size_t size, bool isCached = true);
     void deallocate();
 
     virtual int cacheOps(uint32_t index, unsigned int cmd);
@@ -123,7 +123,7 @@
     virtual void *getPtrLocked(uint32_t index);
 private:
     int allocOneBuffer(struct QCamera3MemInfo &memInfo,
-            unsigned int heap_id, size_t size);
+            unsigned int heap_id, size_t size, bool isCached = true);
     void deallocOneBuffer(struct QCamera3MemInfo &memInfo);
     uint32_t mMaxCnt;
 };
diff --git a/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp b/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp
index 5412abd..e307539 100644
--- a/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp
@@ -395,10 +395,10 @@
     return mHeapMem.allocate(size);
 }
 
-int QCamera3StreamMem::allocateOne(size_t size)
+int QCamera3StreamMem::allocateOne(size_t size, bool isCached)
 {
     Mutex::Autolock lock(mLock);
-    return mHeapMem.allocateOne(size);
+    return mHeapMem.allocateOne(size, isCached);
 }
 
 /*===========================================================================
diff --git a/msm8998/QCamera2/HAL3/QCamera3StreamMem.h b/msm8998/QCamera2/HAL3/QCamera3StreamMem.h
index cbe3ea6..263d798 100644
--- a/msm8998/QCamera2/HAL3/QCamera3StreamMem.h
+++ b/msm8998/QCamera2/HAL3/QCamera3StreamMem.h
@@ -74,7 +74,7 @@
 
     // Heap buffer related functions
     int allocateAll(size_t size);
-    int allocateOne(size_t size);
+    int allocateOne(size_t size, bool isCached = true);
     void deallocate(); //TODO: replace with unified clear() function?
 
     // Clear function: unregister for gralloc buffer, and deallocate for heap buffer