summaryrefslogtreecommitdiffstats
path: root/libcamera/SecCameraHWInterface.cpp
diff options
context:
space:
mode:
authorJeong-Seok Yang <jseok.yang@samsung.com>2011-02-14 22:55:21 +0900
committerWu-cheng Li <wuchengli@google.com>2011-02-15 17:15:25 +0800
commit23ce2f833b0dfa8df423195a63877f9565a96d24 (patch)
tree48dde5375b29f029f3070ea2f6bf21d55baaa0f7 /libcamera/SecCameraHWInterface.cpp
parent1fa3b285489b04647eafe2ce87b1b9215032e821 (diff)
downloaddevice_samsung_crespo-23ce2f833b0dfa8df423195a63877f9565a96d24.zip
device_samsung_crespo-23ce2f833b0dfa8df423195a63877f9565a96d24.tar.gz
device_samsung_crespo-23ce2f833b0dfa8df423195a63877f9565a96d24.tar.bz2
libcamera: Add checking of preview sizes on setting parameters
bug fix: If it try to set invalid preview sizes, driver will be stuck in an unrecoverable state. Thus, It is fixed to return error when setting parameters bug:3429909 Change-Id: If51b47439c140410fa03e3a0b66492633f194e53 Signed-off-by: Jeong-Seok Yang <jseok.yang@samsung.com>
Diffstat (limited to 'libcamera/SecCameraHWInterface.cpp')
-rw-r--r--libcamera/SecCameraHWInterface.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/libcamera/SecCameraHWInterface.cpp b/libcamera/SecCameraHWInterface.cpp
index 50d43a0..137653a 100644
--- a/libcamera/SecCameraHWInterface.cpp
+++ b/libcamera/SecCameraHWInterface.cpp
@@ -170,6 +170,8 @@ void CameraHardwareSec::initDefaultParameters(int cameraId)
"640x480");
}
+ p.getSupportedPreviewSizes(mSupportedPreviewSizes);
+
// If these fail, then we are using an invalid cameraId and we'll leave the
// sizes at zero to catch the error.
if (mSecCamera->getPreviewMaxSize(&preview_max_width,
@@ -1401,6 +1403,20 @@ status_t CameraHardwareSec::dump(int fd, const Vector<String16>& args) const
return NO_ERROR;
}
+bool CameraHardwareSec::isSupportedPreviewSize(const int width,
+ const int height) const
+{
+ unsigned int i;
+
+ for (i = 0; i < mSupportedPreviewSizes.size(); i++) {
+ if (mSupportedPreviewSizes[i].width == width &&
+ mSupportedPreviewSizes[i].height == height)
+ return true;
+ }
+
+ return false;
+}
+
status_t CameraHardwareSec::setParameters(const CameraParameters& params)
{
LOGV("%s :", __func__);
@@ -1427,7 +1443,9 @@ status_t CameraHardwareSec::setParameters(const CameraParameters& params)
LOGV("%s : new_preview_width x new_preview_height = %dx%d, format = %s",
__func__, new_preview_width, new_preview_height, new_str_preview_format);
- if (0 < new_preview_width && 0 < new_preview_height && new_str_preview_format != NULL) {
+ if (0 < new_preview_width && 0 < new_preview_height &&
+ new_str_preview_format != NULL &&
+ isSupportedPreviewSize(new_preview_width, new_preview_height)) {
int new_preview_format = 0;
if (!strcmp(new_str_preview_format,
@@ -1463,6 +1481,11 @@ status_t CameraHardwareSec::setParameters(const CameraParameters& params)
}
}
#endif
+ } else {
+ LOGE("%s: Invalid preview size(%dx%d)",
+ __func__, new_preview_width, new_preview_height);
+
+ ret = INVALID_OPERATION;
}
int new_picture_width = 0;