summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--[-rwxr-xr-x]include/videodev2_samsung.h1
-rw-r--r--libcamera/SecCamera.cpp34
-rw-r--r--libcamera/SecCamera.h7
3 files changed, 42 insertions, 0 deletions
diff --git a/include/videodev2_samsung.h b/include/videodev2_samsung.h
index 387a186..d4d9e08 100755..100644
--- a/include/videodev2_samsung.h
+++ b/include/videodev2_samsung.h
@@ -80,5 +80,6 @@
#define V4L2_CID_CAMERA_GET_ISO (V4L2_CID_PRIVATE_BASE + 114)
#define V4L2_CID_CAMERA_GET_SHT_TIME (V4L2_CID_PRIVATE_BASE + 115)
#define V4L2_CID_CAMERA_SENSOR_MODE (V4L2_CID_PRIVATE_BASE + 116)
+#define V4L2_CID_ESD_INT (V4L2_CID_PRIVATE_BASE + 117)
#endif /* __LINUX_VIDEODEV2_SAMSUNG_H */
diff --git a/libcamera/SecCamera.cpp b/libcamera/SecCamera.cpp
index fb3ea77..59d9d27 100644
--- a/libcamera/SecCamera.cpp
+++ b/libcamera/SecCamera.cpp
@@ -706,6 +706,10 @@ SecCamera::SecCamera() :
m_camera_af_flag(-1),
m_shot_mode(0),
m_flag_init(0)
+#ifdef ENABLE_ESD_PREVIEW_CHECK
+ ,
+ m_esd_check_count(0)
+#endif // ENABLE_ESD_PREVIEW_CHECK
{
LOGV("%s()", __func__);
#ifdef BOARD_USES_SDTV
@@ -1405,6 +1409,15 @@ int SecCamera::getPreview()
int ret;
#endif
+#ifdef ENABLE_ESD_PREVIEW_CHECK
+ int status = 0;
+
+ if (!(++m_esd_check_count % 60)) {
+ status = getCameraSensorESDStatus();
+ m_esd_check_count = 0;
+ }
+#endif // ENABLE_ESD_PREVIEW_CHECK
+
#ifdef PERFORMANCE
LOG_TIME_DEFINE(0)
@@ -1422,7 +1435,12 @@ int SecCamera::getPreview()
#else
#ifdef SWP1_CAMERA_ADD_ADVANCED_FUNCTION
+
+#ifdef ENABLE_ESD_PREVIEW_CHECK
+ if (m_flag_camera_start == 0 || fimc_esd_poll(&m_events_c) == 0 || status) {
+#else
if (m_flag_camera_start == 0 || fimc_esd_poll(&m_events_c) == 0) {
+#endif
LOGE("ERR(%s):Start Camera Device Reset \n", __func__);
/* GAUDI Project([arun.c@samsung.com]) 2010.05.20. [Implemented ESD code] */
/*
@@ -1442,6 +1460,10 @@ int SecCamera::getPreview()
//setCameraSensorReset();
ret = startPreview();
+#ifdef ENABLE_ESD_PREVIEW_CHECK
+ m_esd_check_count = 0;
+#endif // ENABLE_ESD_PREVIEW_CHECK
+
if (ret < 0) {
LOGE("ERR(%s): startPreview() return %d\n", __func__, ret);
return 0;
@@ -3305,6 +3327,18 @@ int SecCamera::setDataLineCheckStop(void)
#endif
+#ifdef ENABLE_ESD_PREVIEW_CHECK
+int SecCamera::getCameraSensorESDStatus(void)
+{
+ LOGV("%s", __func__);
+
+ // 0 : normal operation, 1 : abnormal operation
+ int status = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_ESD_INT);
+
+ return status;
+}
+#endif // ENABLE_ESD_PREVIEW_CHECK
+
// ======================================================================
// Jpeg
diff --git a/libcamera/SecCamera.h b/libcamera/SecCamera.h
index 282eda7..38f706e 100644
--- a/libcamera/SecCamera.h
+++ b/libcamera/SecCamera.h
@@ -719,6 +719,9 @@ public:
int setDataLineCheckStop(void);
int setDefultIMEI(int imei);
int getDefultIMEI(void);
+#ifdef ENABLE_ESD_PREVIEW_CHECK
+ int getCameraSensorESDStatus(void);
+#endif // ENABLE_ESD_PREVIEW_CHECK
#endif
void setFrameRate(int frame_rate);
@@ -852,6 +855,10 @@ private:
int m_postview_offset;
+#ifdef ENABLE_ESD_PREVIEW_CHECK
+ int m_esd_check_count;
+#endif // ENABLE_ESD_PREVIEW_CHECK
+
exif_attribute_t mExifInfo;
struct fimc_buffer m_buffers_c[MAX_BUFFERS];