From: Marko Ollonen Date: Tue, 4 Sep 2012 12:50:34 +0000 (+0300) Subject: Flash mode setting support down to atom isp X-Git-Tag: 2.1b_release~6^2~74^2~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2d8eef28341b5d96d4cd7212b16072a1369c79d4;p=adaptation%2Fintel_mfld%2Fgst-plugins-atomisp.git Flash mode setting support down to atom isp Change-Id: Ied618eb69c88c649fa33c6e1b6687eda7c4bb116 --- diff --git a/gst-libs/atomisphal/mfld_cam.c b/gst-libs/atomisphal/mfld_cam.c index 5a62aea..1de927c 100644 --- a/gst-libs/atomisphal/mfld_cam.c +++ b/gst-libs/atomisphal/mfld_cam.c @@ -274,18 +274,22 @@ get_scene_mode (int *scene_mode) } static cam_err_t -set_flash_mode (int mode) +set_flash_mode (int fd, int mode) { cam_err_t ret = CAM_ERR_NONE; mfld_cam_settings.flash_mode = mode; + + cam_driver_dbg ("set flash mode: %d\n",mode); + /* TODO check this when making auto modes etc.. */ switch (mode) { case CAM_LIGHT_FLASH_MODE_AUTO: - case CAM_LIGHT_FLASH_MODE_OFF: case CAM_LIGHT_FLASH_MODE_ON: - break; case CAM_LIGHT_FLASH_MODE_FILL_IN: - break; case CAM_LIGHT_FLASH_MODE_RED_EYE: + ret = cam_driver_set_flash_mode(fd,ATOMISP_FLASH_MODE_FLASH); + break; + case CAM_LIGHT_FLASH_MODE_OFF: + ret = cam_driver_set_flash_mode(fd,ATOMISP_FLASH_MODE_OFF); break; } return ret; @@ -955,7 +959,7 @@ cam_feature_set (int fd, cam_photo_feature_t feature, int value) ret = set_scene_mode (value); break; case CAM_LIGHT_FLASH_MODE: - ret = set_flash_mode (value); + ret = set_flash_mode (fd, value); break; case CAM_EXPOSURE_MANUAL_TIME: ret = cam_driver_set_exposure (fd, value); diff --git a/gst-libs/atomisphal/mfld_driver.c b/gst-libs/atomisphal/mfld_driver.c index 5b0f4d5..e7763fa 100644 --- a/gst-libs/atomisphal/mfld_driver.c +++ b/gst-libs/atomisphal/mfld_driver.c @@ -726,3 +726,11 @@ led_flash_off (int fd) } } +cam_err_t +cam_driver_set_flash_mode (int fd,int mode) +{ + cam_driver_dbg ("%s: mode %d\n", __func__, mode); + + return cam_driver_set_attribute (fd, V4L2_CID_FLASH_MODE, mode, "Flash Mode"); +} + diff --git a/gst-libs/atomisphal/mfld_driver.h b/gst-libs/atomisphal/mfld_driver.h index f1ba25e..b54d585 100644 --- a/gst-libs/atomisphal/mfld_driver.h +++ b/gst-libs/atomisphal/mfld_driver.h @@ -107,4 +107,6 @@ void led_flash_off (int fd); cam_err_t cam_driver_get_aperture (int fd, int *aperture); +cam_err_t cam_driver_set_flash_mode(int fd,int mode); + #endif /* _MFLD_DRIVER_H */ diff --git a/gst-libs/gst/camera/gstmfldcameracontroliface.c b/gst-libs/gst/camera/gstmfldcameracontroliface.c index 792cf84..572ce56 100644 --- a/gst-libs/gst/camera/gstmfldcameracontroliface.c +++ b/gst-libs/gst/camera/gstmfldcameracontroliface.c @@ -148,10 +148,30 @@ gst_camerasrc_camera_control_set_strobe( GstCameraSrc* camerasrc, g_return_val_if_fail (opened, FALSE); GST_OBJECT_LOCK (camerasrc); - camerasrc->cam_ctrl.flash_mode = value; + switch (value) { + case MM_CAMCORDER_STROBE_MODE_OFF: + camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_OFF; + break; + case MM_CAMCORDER_STROBE_MODE_ON: + camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_ON; + break; + case MM_CAMCORDER_STROBE_MODE_AUTO: + camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_AUTO; + break; + case MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION: + camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE; + break; + case MM_CAMCORDER_STROBE_MODE_SLOW_SYNC: + case MM_CAMCORDER_STROBE_MODE_FRONT_CURTAIN: + case MM_CAMCORDER_STROBE_MODE_REAR_CURTAIN: + // TODO check if used in torch or indication + case MM_CAMCORDER_STROBE_MODE_PERMANENT: + default: + camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_OFF; + break; + } GST_OBJECT_UNLOCK (camerasrc); - ret = bclass->set_flash_mode(camerasrc, value); return ret; } gboolean @@ -166,7 +186,24 @@ gst_camerasrc_camera_control_get_strobe( GstCameraSrc* camerasrc, g_return_val_if_fail (opened, FALSE); GST_OBJECT_LOCK (camerasrc); - *value = camerasrc->cam_ctrl.flash_mode; + *value = camerasrc->photoconf.flash_mode; + switch (camerasrc->photoconf.flash_mode) { + case GST_PHOTOGRAPHY_FLASH_MODE_OFF: + *value = MM_CAMCORDER_STROBE_MODE_OFF; + break; + case GST_PHOTOGRAPHY_FLASH_MODE_AUTO: + *value = MM_CAMCORDER_STROBE_MODE_AUTO; + break; + case GST_PHOTOGRAPHY_FLASH_MODE_ON: + *value = MM_CAMCORDER_STROBE_MODE_ON; + break; + case GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE: + *value = MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION; + break; + default: + *value = MM_CAMCORDER_STROBE_MODE_OFF; + break; + } GST_OBJECT_UNLOCK (camerasrc); return TRUE; diff --git a/gst-libs/gst/camera/gstmfldcameracontroliface.h b/gst-libs/gst/camera/gstmfldcameracontroliface.h index f887ef0..6883568 100644 --- a/gst-libs/gst/camera/gstmfldcameracontroliface.h +++ b/gst-libs/gst/camera/gstmfldcameracontroliface.h @@ -45,7 +45,7 @@ G_BEGIN_DECLS #define GST_IS_CAMERA_SRC_CAMERA_CONTROL_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CAMERA_SRC_CAMERA_CONTROL_CHANNEL)) - +/* Nicely defined Interface. These are taken from user of interface no definitions in interface itself */ typedef enum{ MM_CAMCORDER_FOCUS_MODE_NONE = 0, /**< Focus mode is None */ MM_CAMCORDER_FOCUS_MODE_PAN, /**< Pan focus mode*/ @@ -55,6 +55,18 @@ typedef enum{ MM_CAMCORDER_FOCUS_MODE_CONTINUOUS, /**< Continuous Autofocus mode*/ } MMCamcorderFocusMode; +/* Nicely defined Interface. These are taken from user of interface no definitions in interface itself */ +enum MMCamcorderStrobeMode { + MM_CAMCORDER_STROBE_MODE_OFF = 0, /**< Always off */ + MM_CAMCORDER_STROBE_MODE_ON, /**< Always splashes */ + MM_CAMCORDER_STROBE_MODE_AUTO, /**< Depending on intensity of light, strobe starts to flash. */ + MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION, /**< Red eye reduction. Multiple flash before capturing. */ + MM_CAMCORDER_STROBE_MODE_SLOW_SYNC, /**< Slow sync. A type of curtain synchronization. */ + MM_CAMCORDER_STROBE_MODE_FRONT_CURTAIN, /**< Front curtain. A type of curtain synchronization. */ + MM_CAMCORDER_STROBE_MODE_REAR_CURTAIN, /**< Rear curtain. A type of curtain synchronization. */ + MM_CAMCORDER_STROBE_MODE_PERMANENT, /**< keep turned on until turning off */ +}; + typedef struct _GstCameraSrcCameraControlChannel { GstCameraControlChannel parent; diff --git a/gst-libs/gst/camera/gstmfldcamerasrc.c b/gst-libs/gst/camera/gstmfldcamerasrc.c index ae71adc..68b7cf7 100644 --- a/gst-libs/gst/camera/gstmfldcamerasrc.c +++ b/gst-libs/gst/camera/gstmfldcamerasrc.c @@ -434,7 +434,7 @@ gst_camerasrc_init (GstCameraSrc * camerasrc, GstCameraSrcClass * klass) camerasrc->photoconf.iso_speed = 0; /* 0 = auto */ camerasrc->photoconf.wb_mode = GST_PHOTOGRAPHY_WB_MODE_AUTO; camerasrc->photoconf.scene_mode = GST_PHOTOGRAPHY_SCENE_MODE_MANUAL; - camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_AUTO; + camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_OFF; camerasrc->photoconf.tone_mode = GST_PHOTOGRAPHY_COLOUR_TONE_MODE_NORMAL; camerasrc->photoconf.flicker_mode = GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ; camerasrc->photoconf.focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_AUTO; diff --git a/gst-libs/gst/camera/gstmfldcamerasrc.h b/gst-libs/gst/camera/gstmfldcamerasrc.h index 527a539..6c8bb0c 100644 --- a/gst-libs/gst/camera/gstmfldcamerasrc.h +++ b/gst-libs/gst/camera/gstmfldcamerasrc.h @@ -159,7 +159,6 @@ typedef struct _GstCameraFocusStatus GstCameraFocusStatus; typedef struct { - guint flash_mode; GstCameraControlExifInfo exif_info; } GstCameraControlInt; diff --git a/gst/mfldv4l2cam/v4l2camsrc_calls.c b/gst/mfldv4l2cam/v4l2camsrc_calls.c index 6ecaf17..a5c7b16 100644 --- a/gst/mfldv4l2cam/v4l2camsrc_calls.c +++ b/gst/mfldv4l2cam/v4l2camsrc_calls.c @@ -26,7 +26,6 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif - #include #include #include @@ -3220,6 +3219,7 @@ gst_v4l2camsrc_set_flash_mode (GstCameraSrc * camsrc, break; } + GST_DEBUG_OBJECT (v4l2camsrc, "Set flash mode: %d",flash); err= cam_feature_set (v4l2camsrc->video_fd, CAM_LIGHT_FLASH_MODE, flash);