clean up flash setting in camera control interface.
authorMarko Ollonen <marko.ollonen@ixonos.com>
Thu, 15 Nov 2012 11:17:41 +0000 (13:17 +0200)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Thu, 15 Nov 2012 11:19:34 +0000 (13:19 +0200)
flash setting method for 3A lib added.

Change-Id: I086e0c74abba099b45a87a46864cc545127cfdef

gst-libs/atomisphal/gstv4l2mfldadvci.c
gst-libs/atomisphal/gstv4l2mfldadvci.h
gst-libs/atomisphal/mfld_cam.c
gst-libs/atomisphal/mfld_cam.h
gst-libs/gst/camera/gstmfldcameracontroliface.c
gst-libs/gst/camera/gstmfldcameracontroliface.h
gst/mfldv4l2cam/v4l2camsrc_calls.c
packaging/mfldv4l2camsrc.changes

index 10f0693..6eba158 100644 (file)
@@ -334,6 +334,12 @@ static void lib_3a_AeGetFlashMode(ia_3a_ae_flash_mode *mode)
   *mode= ia_3a_ae_get_flash_mode();
 }
 
+static void lib_3a_AeSetFlashMode(ia_3a_ae_flash_mode mode)
+{
+  cam_lib_3a_dbg("%s:%d mode:%d \n", __func__, __LINE__, mode);
+  ci_adv_ae_set_flash_mode(mode);
+}
+
 static void lib_3a_AwbGetManualColorTemperature(int *ctemp)
 {
   cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
@@ -535,6 +541,7 @@ lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
   mfldadvci->AeGetManualShutter = lib_3a_AeGetManualShutter;
   mfldadvci->Awbdata = lib_3a_Awbdata;
   mfldadvci->AeGetManualAperture = lib_3a_AeGetManualAperture;
+  mfldadvci->AeSetFlashMode = lib_3a_AeSetFlashMode;
   mfldadvci->AeGetFlashMode = lib_3a_AeGetFlashMode;
   mfldadvci->AwbGetManualColorTemperature = lib_3a_AwbGetManualColorTemperature;
   mfldadvci->Awbmatrix = lib_3a_Awbmatrix;
index 24f053f..62b8ac6 100644 (file)
@@ -154,6 +154,7 @@ struct _GstV4l2MFLDAdvCI
                     unsigned * avg_b, unsigned * avg_gb);
   void (*AeGetManualAperture)(int *aperture);
   void (*AeGetFlashMode)(ia_3a_ae_flash_mode *mode);
+  void (*AeSetFlashMode)(ia_3a_ae_flash_mode mode);
   void (*AwbGetManualColorTemperature)(int *ctemp);
   void (*Awbmatrix)(int msqWbGain[3], int msqCcMtrx[9], unsigned short * shift);
   void (*GetGridInfo)(void * grid_info);
index d2cfbd0..10befb3 100644 (file)
@@ -1814,6 +1814,31 @@ cam_err_t get_ae_flash_mode(int fd, cam_flash_mode_t *mode)
   }
   return CAM_ERR_NONE;
 }
+cam_err_t set_ae_flash_mode(int fd, cam_flash_mode_t mode)
+{
+  ia_3a_ae_flash_mode ia_mode;
+
+  switch(mode)
+  {
+    case CAM_LIGHT_FLASH_MODE_AUTO:
+      ia_mode = ia_3a_ae_flash_mode_auto;
+      break;
+    case CAM_LIGHT_FLASH_MODE_OFF:
+      ia_mode = ia_3a_ae_flash_mode_off;
+      break;
+    case CAM_LIGHT_FLASH_MODE_ON:
+      ia_mode = ia_3a_ae_flash_mode_on;
+      break;
+    default:
+      ia_mode = ia_3a_ae_flash_mode_auto;
+      break;
+  }
+
+  mfldadvci->AeSetFlashMode(ia_mode);
+
+  return CAM_ERR_NONE;
+}
+
 
 cam_err_t get_awb_manual_color_temperature(int fd, int *ctemp)
 {
index f2bfe44..59b73c2 100644 (file)
@@ -296,6 +296,8 @@ cam_err_t get_awb_data(int fd, unsigned * num_p, unsigned * avg_r,
                         unsigned * avg_gr, unsigned * avg_b, unsigned * avg_gb);
 cam_err_t get_ae_manual_aperture(int fd, int *aperture);
 cam_err_t get_ae_flash_mode(int fd, cam_flash_mode_t *mode);
+cam_err_t set_ae_flash_mode(int fd, cam_flash_mode_t mode);
+
 int cam_find_item_new (const int table[][2], const int item, int reverse);
 
 cam_err_t get_awb_manual_color_temperature(int fd, int *ctemp);
index 1f976b9..1a45816 100644 (file)
@@ -191,37 +191,31 @@ gst_camerasrc_camera_control_set_strobe( GstCameraSrc* camerasrc,
 {
   GstCameraSrcClass *bclass;
   gboolean opened;
+  gboolean ret = FALSE;
+
+/* using GstFlashMode enumeration
+ * typedef enum
+ * {
+ * GST_PHOTOGRAPHY_FLASH_MODE_AUTO = 0,
+ * GST_PHOTOGRAPHY_FLASH_MODE_OFF,
+ * GST_PHOTOGRAPHY_FLASH_MODE_ON,
+ * GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN,
+ * GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE
+ * } GstFlashMode;
+*/
 
   bclass = GST_CAMERA_SRC_GET_CLASS (camerasrc);
   opened = bclass->is_open (camerasrc);
   g_return_val_if_fail (opened, FALSE);
 
   GST_OBJECT_LOCK (camerasrc);
-  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;
-   }
+  camerasrc->photoconf.flash_mode = value;
   GST_OBJECT_UNLOCK (camerasrc);
+  if (bclass->is_active (camerasrc)) {
+    ret = bclass->write_settings (camerasrc, &camerasrc->photoconf, FALSE);
+  }
 
-  return TRUE;
+  return ret;
 }
 gboolean
 gst_camerasrc_camera_control_get_strobe( GstCameraSrc* camerasrc,
@@ -236,23 +230,6 @@ gst_camerasrc_camera_control_get_strobe( GstCameraSrc* camerasrc,
 
   GST_OBJECT_LOCK (camerasrc);
   *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 6883568..5814830 100644 (file)
@@ -55,17 +55,6 @@ 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 f8455a4..4153a76 100644 (file)
@@ -3289,6 +3289,8 @@ gst_v4l2camsrc_set_flash_mode (GstCameraSrc * camsrc,
   err= cam_feature_set (v4l2camsrc->video_fd, CAM_LIGHT_FLASH_MODE,
         flash);
 
+  set_ae_flash_mode(v4l2camsrc->video_fd,flash);
+
   if(err)
     goto error;
 
index c5da20c..dd153e4 100644 (file)
@@ -1,3 +1,6 @@
+* Thu Nov 15 2012 Marko Ollonen <marko.ollonen@ixonos.com> accepted/trunk/20121112.215039@c15e86d
+- clean up flash setting in camera control interface. flash setting method for 3A lib added.
+
 * Thu Nov 15 2012 Marko Ollonen <marko.ollonen@ixonos.com> accepted/trunk/20121112.215039@f192b64
 - white bablance control added.