diff options
author | Jeong-Seok Yang <jseok.yang@samsung.com> | 2011-02-14 22:55:21 +0900 |
---|---|---|
committer | Wu-cheng Li <wuchengli@google.com> | 2011-02-15 17:15:25 +0800 |
commit | 23ce2f833b0dfa8df423195a63877f9565a96d24 (patch) | |
tree | 48dde5375b29f029f3070ea2f6bf21d55baaa0f7 /libcamera/SecCameraHWInterface.cpp | |
parent | 1fa3b285489b04647eafe2ce87b1b9215032e821 (diff) | |
download | device_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.cpp | 25 |
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; |