diff options
author | Jeong-Seok Yang <jseok.yang@samsung.com> | 2010-11-11 18:38:39 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-11-11 18:38:39 -0800 |
commit | 19f3cb9d779fcffc568239be822ddd63e4bb38c9 (patch) | |
tree | c6230bcdff498e52d44f37583ea6686f3b2e98d7 /libcamera/SecCameraHWInterface.cpp | |
parent | 73eaa50344baf70283fac6958948fffebd93bd14 (diff) | |
parent | aa068fa0d6c6fc978cf3f78bb645f5e062201375 (diff) | |
download | device_samsung_crespo-19f3cb9d779fcffc568239be822ddd63e4bb38c9.zip device_samsung_crespo-19f3cb9d779fcffc568239be822ddd63e4bb38c9.tar.gz device_samsung_crespo-19f3cb9d779fcffc568239be822ddd63e4bb38c9.tar.bz2 |
am aa068fa0: am ae5be4a1: libcamera: Skip some frames on overlay for image quality.
* commit 'aa068fa0d6c6fc978cf3f78bb645f5e062201375':
libcamera: Skip some frames on overlay for image quality.
Diffstat (limited to 'libcamera/SecCameraHWInterface.cpp')
-rw-r--r-- | libcamera/SecCameraHWInterface.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libcamera/SecCameraHWInterface.cpp b/libcamera/SecCameraHWInterface.cpp index 8a0da2c..b521a13 100644 --- a/libcamera/SecCameraHWInterface.cpp +++ b/libcamera/SecCameraHWInterface.cpp @@ -68,6 +68,9 @@ struct addrs_cap { unsigned int height; }; +static const int INITIAL_SKIP_FRAME = 3; +static const int EFFECT_SKIP_FRAME = 1; + CameraHardwareSec::CameraHardwareSec(int cameraId) : mPreviewRunning(false), @@ -82,6 +85,7 @@ CameraHardwareSec::CameraHardwareSec(int cameraId) mRawFrameSize(0), mPreviewFrameRateMicrosec(33000), mCameraSensorName(NULL), + mSkipFrame(0), #if defined(BOARD_USES_OVERLAY) mUseOverlay(false), mOverlayBufferIdx(0), @@ -452,6 +456,14 @@ bool CameraHardwareSec::msgTypeEnabled(int32_t msgType) } // --------------------------------------------------------------------------- +void CameraHardwareSec::setSkipFrame(int frame) +{ + Mutex::Autolock lock(mSkipFrameLock); + if (frame < mSkipFrame) + return; + + mSkipFrame = frame; +} int CameraHardwareSec::previewThread() { @@ -462,6 +474,13 @@ int CameraHardwareSec::previewThread() LOGE("ERR(%s):Fail on SecCamera->getPreview()", __func__); return UNKNOWN_ERROR; } + mSkipFrameLock.lock(); + if (mSkipFrame > 0) { + mSkipFrame--; + mSkipFrameLock.unlock(); + return NO_ERROR; + } + mSkipFrameLock.unlock(); nsecs_t timestamp = systemTime(SYSTEM_TIME_MONOTONIC); @@ -624,6 +643,8 @@ status_t CameraHardwareSec::startPreview() mSecCamera->stopPreview(); + setSkipFrame(INITIAL_SKIP_FRAME); + ret = mSecCamera->startPreview(); LOGV("%s : mSecCamera->startPreview() returned %d", __func__, ret); @@ -1949,6 +1970,14 @@ status_t CameraHardwareSec::setParameters(const CameraParameters& params) LOGE("ERR(%s):Fail on mSecCamera->setImageEffect(effect(%d))", __func__, new_image_effect); ret = UNKNOWN_ERROR; } else { + const char *old_image_effect_str = mParameters.get(CameraParameters::KEY_EFFECT); + + if (old_image_effect_str) { + if (strcmp(old_image_effect_str, new_image_effect_str)) { + setSkipFrame(EFFECT_SKIP_FRAME); + } + } + mParameters.set(CameraParameters::KEY_EFFECT, new_image_effect_str); } } |