summaryrefslogtreecommitdiffstats
path: root/libcamera
diff options
context:
space:
mode:
authorJeong-Seok Yang <jseok.yang@samsung.com>2010-11-11 18:38:39 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2010-11-11 18:38:39 -0800
commit19f3cb9d779fcffc568239be822ddd63e4bb38c9 (patch)
treec6230bcdff498e52d44f37583ea6686f3b2e98d7 /libcamera
parent73eaa50344baf70283fac6958948fffebd93bd14 (diff)
parentaa068fa0d6c6fc978cf3f78bb645f5e062201375 (diff)
downloaddevice_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')
-rw-r--r--libcamera/SecCameraHWInterface.cpp29
-rw-r--r--libcamera/SecCameraHWInterface.h5
2 files changed, 33 insertions, 1 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);
}
}
diff --git a/libcamera/SecCameraHWInterface.h b/libcamera/SecCameraHWInterface.h
index 24f7b56..c095645 100644
--- a/libcamera/SecCameraHWInterface.h
+++ b/libcamera/SecCameraHWInterface.h
@@ -162,7 +162,7 @@ private:
int dwVideoHeight, void *pJPEG,
int *pdwJPEGSize, void *pVideo,
int *pdwVideoSize);
-
+ void setSkipFrame(int frame);
/* used by auto focus thread to block until it's told to run */
mutable Mutex mFocusLock;
mutable Condition mCondition;
@@ -187,6 +187,9 @@ private:
int mPreviewFrameRateMicrosec;
const __u8 *mCameraSensorName;
+ mutable Mutex mSkipFrameLock;
+ int mSkipFrame;
+
#if defined(BOARD_USES_OVERLAY)
sp<Overlay> mOverlay;
bool mUseOverlay;