Flash mode setting support down to atom isp
authorMarko Ollonen <marko.ollonen@ixonos.com>
Tue, 4 Sep 2012 12:50:34 +0000 (15:50 +0300)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Wed, 5 Sep 2012 11:19:25 +0000 (14:19 +0300)
Change-Id: Ied618eb69c88c649fa33c6e1b6687eda7c4bb116

gst-libs/atomisphal/mfld_cam.c
gst-libs/atomisphal/mfld_driver.c
gst-libs/atomisphal/mfld_driver.h
gst-libs/gst/camera/gstmfldcameracontroliface.c
gst-libs/gst/camera/gstmfldcameracontroliface.h
gst-libs/gst/camera/gstmfldcamerasrc.c
gst-libs/gst/camera/gstmfldcamerasrc.h
gst/mfldv4l2cam/v4l2camsrc_calls.c

index 5a62aea..1de927c 100644 (file)
@@ -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);
index 5b0f4d5..e7763fa 100644 (file)
@@ -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");
+}
+
index f1ba25e..b54d585 100644 (file)
@@ -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 */
index 792cf84..572ce56 100644 (file)
@@ -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;
index f887ef0..6883568 100644 (file)
@@ -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;
 
index ae71adc..68b7cf7 100644 (file)
@@ -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;
index 527a539..6c8bb0c 100644 (file)
@@ -159,7 +159,6 @@ typedef struct _GstCameraFocusStatus GstCameraFocusStatus;
 
 typedef struct
 {
-  guint  flash_mode;
   GstCameraControlExifInfo exif_info;
 } GstCameraControlInt;
 
index 6ecaf17..a5c7b16 100644 (file)
@@ -26,7 +26,6 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
-
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -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);