path: root/camera/exynos_camera.h
diff options
authorDheeraj CVR <>2013-12-14 10:54:53 -0600
committerslickrick <>2013-12-14 09:05:00 -0800
commita50844d698f0fbdcaacffb8b52381d44752d85c8 (patch)
treee517f78950274763d389ccdcfc072cebc41a750b /camera/exynos_camera.h
parent6595112a242dc49c4a485da819e39f5d539fc331 (diff)
smdk4412-common: camera: squashed updates from cm-10.2
smdk4412-common: camera: fix EXIF attributes for S5C73M3 sensor S5C73M3 sensor which is the back camera, doesn't return the EXIF attributes using V4L2 IOCTL. This sensor interleaves YUV and JPEG frames along with Metadata which contains the EXIF information. This patch does the following: Manually extract the EXIF information from the interleaved metadata and implement ISO, Flash, Exposure, Exposure Time and Exposure Bias EXIF attributes for S5C73M3. Fix incorrect Exposure EXIF attribute that was reporting as 1'. Change-Id: Id9faa64af498645099cccc9cbf28f2dbdfecd254 smdk4412-common: camera: fix scene mode snapshot capture crashes Few Scene Modes (like Night, High Sensitivity) if set as default, after the camera opens, require the scene mode to be set when the stream is turned on inorder to properly take effect. Not doing so will result in crashes while trying to capture the snapshot. Change-Id: I9e6b67c59699495da6922ac737232f58d98c2b40 smdk4412-common: camera: reorganize camera parameters Few Scene modes require Flash and few don't. However all of the scene modes require the focus to be AUTO. Reorganize the camera parameters to set the Flash and Focus modes based on the scene mode. Changes adapted from Exynos5 Camera HAL. Change-Id: If3ab62a1d8aecf84d2a04d1e899f71d4315a66ea Conflicts: camera/exynos_camera.c smdk4412-common: camera: several fixes for autofocus Setting the AutoFocus off using V4L2_CID_CAMERA_SET_AUTO_FOCUS will reset the AF position of the sensor and this was done whenever autofocus was completed. This totally defeated the purpose of touch to focus since the sensor AF position was being reset after focus and had to be refocussed while taking the snapshot. This also led to several issues with third party applications since this kind of focus behaviour was not intended. S5C73M3 Back camera Interleaves YUV and JPEG along with metadata. This metadata contains the AutoFocus result. Hence we could parse the autofocus result instead of using V4L2 IOCTL, which is more efficient. Also, the sensor exhibits issues when AutoExposure and AutoWhite Balance locks are used with Flash ON. Improper locking could lead to freezing of the sensor while taking a snapshot. Hence, only lock AEAWB when flash is OFF and unlock them after AutoFocus finishes. Change-Id: Ief28005dcacd0f8f04990ef8eafebff4a2f109d5 smdk4412-common: camera: enable ZSL mode on front camera We are querying FIMC2 for the capture output and hence we have no reason to restart the preview to have the preview resolution match the capture resolution, which is not how Zero Shutter Lag works. We could have different resolutions for the preview and capture, hence don't stop the preview for resizing. Change-Id: Iaf2b4d0c51dbedb9516b7c3cdde09aa18cd95f73 smdk4412-common: camera: fix incorrect jpeg thumbnail height Change-Id: I139823883d91ddaa48e2516511539ff5fe150e25 smdk4412-common: camera: fix heap corruption Change-Id: I0111615b9d4552a7880598a83bc98060fa900b13 smdk4412-common: camera: include support for face detection Change-Id: I1d176bdf17abdcf0c593fceb01808348b87b75ce
Diffstat (limited to 'camera/exynos_camera.h')
1 files changed, 16 insertions, 7 deletions
diff --git a/camera/exynos_camera.h b/camera/exynos_camera.h
index 9895ef5..6579305 100644
--- a/camera/exynos_camera.h
+++ b/camera/exynos_camera.h
@@ -144,6 +144,8 @@ struct exynos_camera_params {
char *focus_areas;
int max_num_focus_areas;
+ int max_detected_faces;
int zoom_supported;
int smooth_zoom_supported;
char *zoom_ratios;
@@ -312,12 +314,13 @@ struct exynos_camera {
int capture_enabled;
struct exynos_camera_capture_listener *capture_listeners;
+ struct exynos_exif exif;
camera_memory_t *capture_memory;
int capture_memory_address;
int capture_memory_index;
void *capture_yuv_buffer;
void *capture_jpeg_buffer;
- int capture_auto_focus_result;
+ int auto_focus_result;
int capture_hybrid;
int capture_width;
int capture_height;
@@ -356,6 +359,11 @@ struct exynos_camera {
struct exynos_camera_buffer picture_yuv_buffer;
struct exynos_camera_buffer picture_yuv_thumbnail_buffer;
+ // Face Detection
+ camera_frame_metadata_t mFaceData;
+ camera_memory_t *face_data;
+ int max_detected_faces;
// Recording
pthread_t recording_thread;
@@ -376,10 +384,7 @@ struct exynos_camera {
// Auto-focus
- pthread_t auto_focus_thread;
- pthread_mutex_t auto_focus_mutex;
- int auto_focus_thread_enabled;
- int auto_focus_thread_running;
+ int auto_focus_enabled;
// Camera params
@@ -508,14 +513,16 @@ void exynos_camera_recording_thread_stop(struct exynos_camera *exynos_camera);
// Auto-focus
int exynos_camera_auto_focus(struct exynos_camera *exynos_camera, int auto_focus_status);
-int exynos_camera_auto_focus_thread_start(struct exynos_camera *exynos_camera);
-void exynos_camera_auto_focus_thread_stop(struct exynos_camera *exynos_camera);
+int exynos_camera_auto_focus_start(struct exynos_camera *exynos_camera);
+void exynos_camera_auto_focus_finish(struct exynos_camera *exynos_camera);
+void exynos_camera_auto_focus_stop(struct exynos_camera *exynos_camera);
int exynos_exif_start(struct exynos_camera *exynos_camera, struct exynos_exif *exif);
+int exynos_exif_create(struct exynos_camera *exynos_camera, struct exynos_exif *exif);
void exynos_exif_stop(struct exynos_camera *exynos_camera,
struct exynos_exif *exif);
int exynos_exif(struct exynos_camera *exynos_camera, struct exynos_exif *exif);
@@ -590,6 +597,8 @@ int exynos_v4l2_ioctl(struct exynos_camera *exynos_camera, int exynos_v4l2_id,
int exynos_v4l2_poll(struct exynos_camera *exynos_camera, int exynos_v4l2_id);
int exynos_v4l2_qbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id,
int type, int memory, int index, unsigned long userptr);
+int exynos_v4l2_s_ext_ctrl_face_detection(struct exynos_camera *exynos_camera,
+ int id, void *value);
int exynos_v4l2_qbuf_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id,
int index);
int exynos_v4l2_qbuf_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id,