Camera: Fix testImmediateZoom CTS test case

Bug: 7235105
Bug: 7197699

Restart preview if preview size changes from application.  Decide VFE output
based on input ZSL snapshot size.

Change-Id: I97a94b18510fd322187f253044c070a509648527
Signed-off-by: Iliyan Malchev <malchev@google.com>
diff --git a/camera/QCameraHWI_Parm.cpp b/camera/QCameraHWI_Parm.cpp
index 82c2943..70dedf6 100755
--- a/camera/QCameraHWI_Parm.cpp
+++ b/camera/QCameraHWI_Parm.cpp
@@ -2564,6 +2564,11 @@
     for (size_t i = 0; i <  mPreviewSizeCount; ++i) {
         if (width ==  mPreviewSizes[i].width
            && height ==  mPreviewSizes[i].height) {
+            int old_width, old_height;
+            mParameters.getPreviewSize(&old_width,&old_height);
+            if(width != old_width || height != old_height) {
+                mRestartPreview = true;
+            }
             mParameters.setPreviewSize(width, height);
             ALOGE("setPreviewSize:  width: %d   heigh: %d", width, height);
             mPreviewWidth = width;
diff --git a/camera/QCameraHWI_Preview.cpp b/camera/QCameraHWI_Preview.cpp
index b83f2eb..c1e027f 100644
--- a/camera/QCameraHWI_Preview.cpp
+++ b/camera/QCameraHWI_Preview.cpp
@@ -250,12 +250,18 @@
     ALOGI(" %s : E ", __FUNCTION__);
 
     mHalCamCtrl->mPreviewMemoryLock.lock();
-	for (int cnt = 0; cnt < mHalCamCtrl->mPreviewMemory.buffer_count; cnt++) {
+    for (int cnt = 0; cnt < mHalCamCtrl->mPreviewMemory.buffer_count; cnt++) {
         if (cnt < mHalCamCtrl->mPreviewMemory.buffer_count) {
             if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_PREVIEW, cnt, mCameraId,
                                                           CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
                 ALOGE("%s: sending data Msg Failed", __func__);
             }
+            if(mHalCamCtrl->isZSLMode()) {
+                if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, cnt, mCameraId,
+                                                          CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
+                    ALOGE("%s: Send socket msg to Unmap Failed", __func__);
+                }
+            }
         }
 
         mHalCamCtrl->mPreviewMemory.camera_memory[cnt]->release(mHalCamCtrl->mPreviewMemory.camera_memory[cnt]);
@@ -371,6 +377,12 @@
                        cnt, mCameraId, CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
               ALOGE("%s: sending data Msg Failed", __func__);
           }
+          if(mHalCamCtrl->isZSLMode()) {
+              if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, cnt, mCameraId,
+                                                            CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
+                  ALOGE("%s: Send socket msg to Unmap Failed", __func__);
+              }
+          }
       }
   }
   mHalCamCtrl->releaseHeapMem(&mHalCamCtrl->mNoDispPreviewMemory);
@@ -603,6 +615,18 @@
       goto error;
     }
 
+    if(mHalCamCtrl->isZSLMode()) {
+         ret = mHalCamCtrl->sendMappingBuf(
+                        MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL,
+                        i,
+                        mDisplayStreamBuf.frame[i].fd,
+                        mHalCamCtrl->mPreviewMemory.private_buffer_handle[i]->size,
+                        mCameraId, CAM_SOCK_MSG_TYPE_FD_MAPPING);
+        if (NO_ERROR != ret) {
+          ALOGE("%s: Send socket msg to map Failed", __func__);
+          goto error;
+        }
+    }
     mDisplayBuf.preview.buf.mp[i].frame = mDisplayStreamBuf.frame[i];
     mDisplayBuf.preview.buf.mp[i].frame_offset = mHalCamCtrl->mPreviewMemory.addr_offset[i];
     mDisplayBuf.preview.buf.mp[i].num_planes = num_planes;
@@ -732,6 +756,16 @@
       ALOGE("%s: sending mapping data Msg Failed", __func__);
     }
 
+    if(mHalCamCtrl->isZSLMode()) {
+        if (NO_ERROR != mHalCamCtrl->sendMappingBuf(
+                    MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL,
+                    i,
+                    mDisplayStreamBuf.frame[i].fd,
+                    mHalCamCtrl->mNoDispPreviewMemory.size,
+                    mCameraId, CAM_SOCK_MSG_TYPE_FD_MAPPING)) {
+            ALOGE("%s: sending mapping data Msg Failed", __func__);
+        }
+    }
     mDisplayBuf.preview.buf.mp[i].frame = mDisplayStreamBuf.frame[i];
     mDisplayBuf.preview.buf.mp[i].frame_offset = mDisplayStreamBuf.frame[i].y_off;
     mDisplayBuf.preview.buf.mp[i].num_planes = num_planes;
diff --git a/camera/QCameraHWI_Still.cpp b/camera/QCameraHWI_Still.cpp
index eaa78e2..cb283ae 100755
--- a/camera/QCameraHWI_Still.cpp
+++ b/camera/QCameraHWI_Still.cpp
@@ -396,14 +396,9 @@
     mHalCamCtrl->getPictureSize(&mPictureWidth, &mPictureHeight);
     ALOGD("%s: Picture size received: %d x %d", __func__,
          mPictureWidth, mPictureHeight);
-    /*Current VFE software design requires picture size >= display size for ZSL*/
-    if (isZSLMode()){
-      mPostviewWidth = dim->display_width;
-      mPostviewHeight = dim->display_height;
-    } else {
-      mPostviewWidth = mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
-      mPostviewHeight =  mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
-    }
+
+    mPostviewWidth = mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
+    mPostviewHeight =  mHalCamCtrl->mParameters.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
     /*If application requested thumbnail size to be (0,0)
        then configure second outout to a default size.
        Jpeg encoder will drop thumbnail as reflected in encodeParams.
@@ -426,7 +421,7 @@
     /* picture size currently set do not match with the one wanted
        by user.*/
     if (!matching) {
-        if (mPictureWidth < mPostviewWidth || mPictureHeight < mPostviewHeight) {
+        if (!isZSLMode() && (mPictureWidth < mPostviewWidth || mPictureHeight < mPostviewHeight)) {
             //Changes to Handle VFE limitation.
             mActualPictureWidth = mPictureWidth;
             mActualPictureHeight = mPictureHeight;
@@ -964,10 +959,6 @@
                  CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
              ALOGE("%s: sending unmapping data Msg Failed", __func__);
              }
-             if (NO_ERROR != mHalCamCtrl->sendUnMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, i, mCameraId,
-                 CAM_SOCK_MSG_TYPE_FD_UNMAPPING)) {
-                 ALOGE("%s: sending unmapping data Msg Failed", __func__);
-             }
          }
     }
 
@@ -1272,11 +1263,6 @@
              CAM_SOCK_MSG_TYPE_FD_MAPPING)) {
              ALOGE("%s: sending mapping data Msg Failed", __func__);
         }
-        if (NO_ERROR != mHalCamCtrl->sendMappingBuf(MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL, i,
-            mPostviewStreamBuf.frame[i].fd, mHalCamCtrl->mThumbnailMemory.size, mCameraId,
-            CAM_SOCK_MSG_TYPE_FD_MAPPING)) {
-            ALOGE("%s: sending mapping data Msg Failed", __func__);
-        }
     }
 
 end:
@@ -1693,7 +1679,7 @@
         /*Thumbnail image*/
         crop.in1_w=mCrop.snapshot.thumbnail_crop.width; //dimension.thumbnail_width;
         crop.in1_h=mCrop.snapshot.thumbnail_crop.height; // dimension.thumbnail_height;
-        if(isLiveSnapshot() || isFullSizeLiveshot()) {
+        if(isLiveSnapshot() || isFullSizeLiveshot() || isZSLMode()) {
             crop.out1_w= mHalCamCtrl->thumbnailWidth;
             crop.out1_h=  mHalCamCtrl->thumbnailHeight;
             ALOGD("Thumbnail width= %d  height= %d for livesnapshot", crop.out1_w, crop.out1_h);