flash need request to 3A lib used in auto flash mode
authorMarko Ollonen <marko.ollonen@ixonos.com>
Fri, 16 Nov 2012 09:11:14 +0000 (11:11 +0200)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Fri, 16 Nov 2012 13:47:17 +0000 (15:47 +0200)
Change-Id: I91195ae1e231e680d6f07dd4a1743ffa576e2192

gst-libs/atomisphal/gstv4l2mfldadvci.c
gst-libs/atomisphal/gstv4l2mfldadvci.h
gst-libs/atomisphal/mfld_cam.c
gst-libs/atomisphal/mfld_driver.c
gst-libs/atomisphal/mfld_driver.h
packaging/mfldv4l2camsrc.changes

index 988f4be..5343ccf 100644 (file)
@@ -478,7 +478,15 @@ static void
 lib_3a_AwbGetImageEffect(ia_3a_image_effect *effect)
 {
   *effect = ci_adv_isp_get_image_effect();
-  cam_lib_3a_dbg("%s:%d effect: %d\n", __func__, __LINE__);
+  cam_lib_3a_dbg("%s:%d effect: %d\n", __func__, __LINE__, *effect);
+
+}
+
+static void
+lib_ae_is_flash_needed(bool *useflash)
+{
+  ci_adv_ae_is_flash_necessary(useflash);
+  cam_lib_3a_dbg("%s:%d useflash: %d\n", __func__, __LINE__, *useflash);
 
 }
 
@@ -499,6 +507,9 @@ lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
   mfldadvci->ae_calc_for_flash = lib_3a_ae_calc_for_flash;
   mfldadvci->ae_calc_without_flash = lib_3a_calc_without_flash;
   mfldadvci->ae_calc_with_flash = lib_3a_calc_with_flash;
+
+  mfldadvci->ae_is_flash_needed = lib_ae_is_flash_needed;
+
   mfldadvci->ae_apply_results = lib_3a_ae;
 
   mfldadvci->af_start = lib_3a_af_start;
index 62b8ac6..b3d67c9 100644 (file)
@@ -80,6 +80,7 @@ struct _GstV4l2MFLDAdvCI
   void (*ae_calc_for_flash)(void);
   void (*ae_calc_without_flash)(void);
   void (*ae_calc_with_flash)(void);
+  void (*ae_is_flash_needed) (bool *useflash);
   void (*ae_apply_results)(void);
 
   void (*af_start)(void);
index 930b5c7..f1b3f65 100644 (file)
@@ -292,7 +292,7 @@ set_flash_mode (int fd, int mode)
     case CAM_LIGHT_FLASH_MODE_ON:
     case CAM_LIGHT_FLASH_MODE_FILL_IN:
     case CAM_LIGHT_FLASH_MODE_RED_EYE:
-      ret = cam_driver_set_flash_mode(fd,ATOMISP_FLASH_MODE_FLASH);
+      /* 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);
@@ -609,6 +609,7 @@ cam_set_capture_mode (int fd, cam_capture_mode_t mode)
     switch (mode) {
       case CAM_CAPTURE_MODE_VIEWFINDER:
         mfldadvci->switch_mode (ia_3a_isp_mode_preview, mfld_driver.frame_rate);
+        set_flash_mode(fd, mfld_cam_settings.flash_mode);
         if (mfld_driver.ae_enabled)
           //ci_adv_set_3a_mode(ia_3a_isp_mode_preview, &mfld_driver.sensor_config);
           mfld_driver.first_frame = 1;
@@ -1637,22 +1638,37 @@ cam_capture_frames (int fd, struct v4l2_buffer *buffer,
 {
   int index;
   int frame_dis = 1, frame_cnt;
-  cam_err_t ret;
-
+  cam_err_t ret  = 0;
+  bool use_flash = TRUE;
+  int cur_flash_mode;
   int flash_en = 0;
 
   cam_capture_init (fd, buffer, capture_settings);
 
-  flash_en = get_flash_status ();
-
-  if (mfld_driver.mode == CAM_CAPTURE_MODE_STILL_CAPTURE &&
-      flash_en == 1) {
-    run_flash_sequence (fd, buffer);
+  if (mfld_driver.mode == CAM_CAPTURE_MODE_STILL_CAPTURE ) {
+      /* check flash here not in always when capturing frames  */
+      flash_en = get_flash_status ();
+      get_flash_mode(&cur_flash_mode);
+      if (cur_flash_mode == CAM_LIGHT_FLASH_MODE_AUTO)
+         mfldadvci->ae_is_flash_needed(&use_flash);
+      if ((use_flash == TRUE) && (flash_en = 1)){
+        run_flash_sequence (fd, buffer);
+      }
+      else{
+       /* TODO: use indication
+        * cam_driver_set_flash_mode(fd,ATOMISP_FLASH_MODE_INDICATOR);
+        cam_driver_set_indication_intensity(fd, INDICATOR_INTENSITY);
+        * */
+        ret = run_normal_sequence(fd, buffer);
+        /* restore flash mode */
+        cam_driver_set_flash_mode(fd,ATOMISP_FLASH_MODE_OFF);
+       }
   } else {
     ret = run_normal_sequence(fd, buffer);
-    if (ret)
-      return ret;
   }
+  if (ret)
+    return ret;
+
 
   if (mfld_driver.rer_enabled && (mfld_driver.fourcc == V4L2_PIX_FMT_YUV420))
     cam_do_redeye_removal (buffer);
index 8d40d36..995df3a 100644 (file)
@@ -762,3 +762,10 @@ cam_driver_set_flash_mode (int fd,int mode)
   return cam_driver_set_attribute (fd, V4L2_CID_FLASH_MODE, mode, "Flash Mode");
 }
 
+cam_err_t
+cam_driver_set_indication_intensity (int fd,int intensity)
+{
+  cam_driver_dbg ("%s: intensity %d\n", __func__, intensity);
+
+  return cam_driver_set_attribute (fd, V4L2_CID_FLASH_INDICATOR_INTENSITY, intensity, "indication intensity");
+}
index 64c83af..1d3de38 100644 (file)
@@ -25,6 +25,8 @@
 #define ON 1
 #define OFF 0
 
+#define INDICATOR_INTENSITY 20 /* 20% */
+
 void cam_err_print (cam_err_t err);
 
 /* Color effect settings */
@@ -111,4 +113,7 @@ cam_err_t cam_driver_set_flash_mode(int fd,int mode);
 
 cam_err_t cam_driver_set_mipi_interrupt(int fd, int enable);
 
+cam_err_t cam_driver_set_indication_intensity (int fd,int intensity);
+
+
 #endif /* _MFLD_DRIVER_H */
index 1887131..34dcbd1 100644 (file)
@@ -1,3 +1,6 @@
+* Fri Nov 16 2012 Marko Ollonen <marko.ollonen@ixonos.com> accepted/trunk/20121112.215039@3e4a4f2
+- flash need request to 3A lib used in auto flash mode
+
 * Thu Nov 15 2012 Marko Ollonen <marko.ollonen@ixonos.com> accepted/trunk/20121112.215039@ae18d70
 - flash sequence for 3A added.