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);