combine ae/af/awb enable/disable to one 3a property.
authorMarko Ollonen <marko.ollonen@ixonos.com>
Thu, 14 Feb 2013 06:43:19 +0000 (08:43 +0200)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Fri, 15 Feb 2013 07:21:46 +0000 (09:21 +0200)
Change-Id: I2591c5b8810987fee43a4ae3050f15abe8551a4e

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

index 6e7c84a..56ba274 100644 (file)
@@ -90,7 +90,7 @@ struct mfld_driver_t
   cam_capture_mode_t capture_mode;
   int rer_enabled;
   int dis_enabled, dvs_enabled;
-  int af_enabled, ae_enabled, awb_enabled;
+  int ae_awb_af_enabled;
   int af_result;  // 0 means fail, it will be filled when captured finished.
   int still_af_count, start_still_af;
   advci_window window;
@@ -1187,9 +1187,7 @@ libmfld_cam_init (GstV4l2MFLDAdvCI * advci)
   mfld_cam_settings.flicker_mode = CAM_GENERAL_FLICKER_REDUCTION_MODE_50HZ;
   mfld_cam_settings.focus_mode = CAM_FOCUS_MODE_AUTO;
 
-  mfld_driver.ae_enabled = 0;
-  mfld_driver.af_enabled = 0;
-  mfld_driver.awb_enabled = 0;
+  mfld_driver.ae_awb_af_enabled = 0;
   mfld_driver.dis_enabled = 0;
   mfld_driver.dvs_enabled = 0;
   mfld_driver.rer_enabled = 0;
@@ -1480,8 +1478,7 @@ mfldcam_3a_process (gpointer data)
   for (;;) {
     sem_wait(&g_sem_3a);
     /* Read 3A statistics */
-    if ((mfld_driver.ae_enabled || mfld_driver.af_enabled
-        || mfld_driver.awb_enabled || mfld_driver.dis_enabled
+    if ((mfld_driver.ae_awb_af_enabled || mfld_driver.dis_enabled
         || mfld_driver.dvs_enabled) && (mfld_driver.sensor_type == SENSOR_TYPE_RAW) )
     {
       /* AE, AWB and AF Process */
@@ -1581,9 +1578,7 @@ cam_capture_init (int fd, struct v4l2_buffer *buffer,
 {
   gboolean need_assist = FALSE;
   mfld_driver.mmap = capture_settings->mmap;
-  mfld_driver.ae_enabled = capture_settings->ae;
-  mfld_driver.af_enabled = capture_settings->af;
-  mfld_driver.awb_enabled = capture_settings->awb;
+  mfld_driver.ae_awb_af_enabled = capture_settings->ae_awb_af;
 
   /* Discard the first two frames */
   if (mfld_driver.first_frame) {
@@ -1592,7 +1587,7 @@ cam_capture_init (int fd, struct v4l2_buffer *buffer,
   }
   /* Still AF start */
   if ((mfld_driver.start_still_af)  && (mfld_driver.sensor_type == SENSOR_TYPE_RAW)) {
-    if (mfld_driver.af_enabled && mfld_driver.still_af_count > 0)
+    if (mfld_driver.ae_awb_af_enabled && mfld_driver.still_af_count > 0)
       mfldadvci->af_stop ();
     mfld_driver.focus_done = 0;
     mfld_driver.start_still_af = 0;
@@ -1603,7 +1598,7 @@ cam_capture_init (int fd, struct v4l2_buffer *buffer,
        mfld_driver.enable_torch = TRUE;
        cam_driver_set_torch(fd, TRUE);
     }
-    if (mfld_driver.af_enabled) {
+    if (mfld_driver.ae_awb_af_enabled) {
       mfldadvci->af_start ();
       if(mfld_cam_settings.focus_mode  == CAM_FOCUS_MODE_TOUCH_AUTO) {
         mfldadvci->AfSetWindows (1, &mfld_driver.window );
@@ -1746,7 +1741,7 @@ run_normal_sequence(int fd, struct v4l2_buffer *buffer)
   if (mfld_driver.still_af_count) {
     gboolean complete = TRUE;           /* AF status */
 
-    if (mfld_driver.af_enabled)
+    if (mfld_driver.ae_awb_af_enabled)
       complete = cam_af_is_complete();
 
    if (complete ||
index 240f5ad..21c447c 100644 (file)
@@ -216,7 +216,7 @@ struct mfld_cam_settings_t
 struct cam_capture_settings
 {
   int mmap;
-  int ae, af, awb;
+  int ae_awb_af;
   int dump_raw;
   unsigned int raw_output_size;
   int dump_image;
index a109e26..457c56a 100644 (file)
@@ -752,10 +752,6 @@ gst_camerasrc_set_property (GObject * object,
 
       if (camerasrc->capture_mode == GST_CAMERA_SRC_CAPTURE_MODE_VIDEO &&
           bclass->is_active (camerasrc)) {
-        /* Stop autofocus in video mode */
-        bclass->set_autofocus (camerasrc, FALSE);
-        /* AutoExposure must be run always in video mode */
-        bclass->set_autoexposure (camerasrc, TRUE);
       }
       if (bclass->set_capture_mode) {
         bclass->set_capture_mode (camerasrc, camerasrc->capture_mode);
@@ -1828,21 +1824,11 @@ start_over:
     if (camerasrc->requested_af_mode == AF_ON_REQUESTED) {
       gboolean ret;
 
-      /* In still capture mode AE will be locked during AF operation */
-      if (camerasrc->viewfinder_mode == GST_CAMERA_SRC_VIEWFINDER_MODE_STILL) {
-        bclass->set_autoexposure (camerasrc, FALSE);
-      }
       ret = bclass->set_autofocus (camerasrc, TRUE);
-
       if (ret) {
         camerasrc->photo_capture_phase = GST_CAMERA_AUTOFOCUS;
-      } else {
-        /* Starting AF failed, so start AE again */
-        bclass->set_autoexposure (camerasrc, TRUE);
       }
     } else {
-      bclass->set_autofocus (camerasrc, FALSE);
-      bclass->set_autoexposure (camerasrc, TRUE);
       camerasrc->photo_capture_phase = GST_CAMERA_VIEWFINDER;
     }
 
@@ -2172,19 +2158,6 @@ gst_camerasrc_af_update (GstCameraSrc * camsrc, GstCameraFocusStatus * fs)
       GST_WARNING ("This element has no bus, therefore no message sent!");
     }
 
-    /* In still capture mode we don't turn off AF algorithm yet, since it  */
-    /* would enable CAF. Instead, it is turned off when application        */
-    /* explicitly calls set_autofocus (FALSE), which in turn raises        */
-    /* af_requested = OFF flag and AF is finally stopped.                  */
-
-    /* In video capture mode AF will be stopped immediately to enable AE   */
-    if (camsrc->viewfinder_mode == GST_CAMERA_SRC_VIEWFINDER_MODE_VIDEO) {
-      bclass->set_autofocus (camsrc, FALSE);
-    }
-
-    /* We don't turn on autoexposure here either. This way AE stays        */
-    /* "locked" until application explicitly calls set_autofocus (FALSE).  */
-
     camsrc->photo_capture_phase = GST_CAMERA_AUTOFOCUS_DONE;
   }
 
@@ -2581,7 +2554,6 @@ gst_camerasrc_default_functions_init (GstCameraSrcClass * camera_class)
 {
   camera_class->get_capabilities = gst_camerasrc_default_capabilities;
   camera_class->set_autofocus = gst_camerasrc_default_set_onoff;
-  camera_class->set_autoexposure = gst_camerasrc_default_set_onoff;
   camera_class->read_settings = gst_camerasrc_default_ret_true_with_settings;
   camera_class->write_settings = gst_camerasrc_default_write_settings;
   camera_class->get_supported_caps = gst_camerasrc_default_get_caps;
index c998021..0d467d4 100644 (file)
@@ -274,7 +274,6 @@ struct _GstCameraSrc {
  * @set_vfinder_mode: Set viewfinder mode.
  * @set_capture_mode: Set capturing mode.
  * @set_autofocus: Turn on / off autofocus algorithm.
- * @set_autoexposure: Turn on / off auto exposure algorithm.
  * @write_settings: Write all GstPhotoSettings to subclass at once.
  * @read_settings: Read all device settings to given GstPhotoSettings structure.
  * @set_zoom: Set the zoom factor.
@@ -354,10 +353,6 @@ struct _GstCameraSrcClass
 
   gboolean
   (*set_autofocus)     (GstCameraSrc *camsrc, gboolean on_off);
-
-  gboolean
-  (*set_autoexposure)  (GstCameraSrc *camsrc, gboolean on_off);
-
   gboolean
   (*write_settings)    (GstCameraSrc *camsrc,
                         GstPhotoSettings *photoconf,
index cf7eecb..28b66f3 100644 (file)
@@ -100,14 +100,12 @@ typedef enum
   PROP_INPUT_SENSOR,
   PROP_USE_MMAP,
   PROP_USE_COPY,
-  PROP_AE,
+  PROP_3A,
   PROP_AE_METERING_MODE,
   PROP_AE_WINDOW,
   PROP_AE_MODE,
-  PROP_AF,
   PROP_AF_METERING_MODE,
   PROP_AF_WINDOW,
-  PROP_AWB,
   PROP_STILL_AF,
   PROP_FOCUS_POSITION,
   PROP_VFLIP,
@@ -721,7 +719,6 @@ gst_v4l2camsrc_base_init (gpointer klass)
 }
 
 gboolean gst_v4l2camsrc_set_autofocus (GstCameraSrc * camsrc, gboolean on);
-gboolean gst_v4l2camsrc_set_autoexposure (GstCameraSrc * camsrc, gboolean on);
 GstPhotoCaps gst_v4l2camsrc_get_capabilities (GstCameraSrc * camsrc);
 gboolean gst_v4l2camsrc_set_capture_mode (GstCameraSrc * camsrc,
     GstCameraSrcCaptureMode mode);
@@ -794,9 +791,9 @@ gst_v4l2camsrc_class_init (GstMFLDV4l2CamSrcClass * klass)
           "Whether copy the buffer from driver, debug only", FALSE, G_PARAM_READWRITE));
 
   /* AE, AF, and AWB settings */
-  g_object_class_install_property (gobject_class, PROP_AE,
-      g_param_spec_boolean ("ae", "Auto Exposure",
-          "Auto Exposure is On or Off", TRUE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
+  g_object_class_install_property (gobject_class, PROP_3A,
+      g_param_spec_boolean ("use-3a", "Use 3A",
+          "3A processsing is On or Off", TRUE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
 
   g_object_class_install_property (gobject_class, PROP_AE_METERING_MODE,
       g_param_spec_enum ("ae-metering-mode", "AE Metering Mode",
@@ -819,11 +816,6 @@ gst_v4l2camsrc_class_init (GstMFLDV4l2CamSrcClass * klass)
          DEFAULT_PROP_AE_WINDOW,
          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ));
 
-
-  g_object_class_install_property (gobject_class, PROP_AF,
-      g_param_spec_boolean ("af", "Auto Focus",
-          "Auto Focus is On or Off", TRUE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
-
   g_object_class_install_property (gobject_class, PROP_AF_METERING_MODE,
       g_param_spec_enum ("af-metering-mode", "AF Metering Mode",
           "Select AF Metering Mode",
@@ -838,11 +830,6 @@ gst_v4l2camsrc_class_init (GstMFLDV4l2CamSrcClass * klass)
          DEFAULT_PROP_AF_WINDOW,
          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ));
 
-  g_object_class_install_property (gobject_class, PROP_AWB,
-      g_param_spec_boolean ("awb", "White Balance",
-          "White Balance is On or Off",
-         TRUE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
-
   g_object_class_install_property (gobject_class, PROP_STILL_AF,
       g_param_spec_boolean ("still-af", "still image slow focus",
           "Turn On or Off slow focus when doing the still image capture",
@@ -986,8 +973,6 @@ gst_v4l2camsrc_class_init (GstMFLDV4l2CamSrcClass * klass)
 //  camera_class->set_vfinder_mode = GST_DEBUG_FUNCPTR(gst_v4l2camsrc_set_viewfinder_mode);
   camera_class->set_autofocus =
       GST_DEBUG_FUNCPTR (gst_v4l2camsrc_set_autofocus);
-  camera_class->set_autoexposure =
-      GST_DEBUG_FUNCPTR (gst_v4l2camsrc_set_autoexposure);
   camera_class->read_settings =
       GST_DEBUG_FUNCPTR (gst_v4l2camsrc_read_settings);
   camera_class->write_settings =
@@ -1100,9 +1085,7 @@ gst_v4l2camsrc_init (GstMFLDV4l2CamSrc * v4l2camsrc,
   v4l2camsrc->sc_enabled = TRUE;
   v4l2camsrc->cc_updated = FALSE;
   v4l2camsrc->gamma_updated = FALSE;
-  v4l2camsrc->ae_enabled = TRUE;
-  v4l2camsrc->af_enabled = TRUE;
-  v4l2camsrc->awb_enabled = TRUE;
+  v4l2camsrc->ae_awb_af_enabled = TRUE;
   v4l2camsrc->still_af = FALSE;
   v4l2camsrc->bayer_downscaling = FALSE;
   v4l2camsrc->tone.gamma = 2.2;
@@ -1232,8 +1215,8 @@ gst_v4l2camsrc_set_property (GObject * object,
     case PROP_USE_COPY:
       v4l2camsrc->use_copy = g_value_get_boolean (value);
       break;
-    case PROP_AE:
-      v4l2camsrc->ae_enabled = g_value_get_boolean (value);
+    case PROP_3A:
+      v4l2camsrc->ae_awb_af_enabled = g_value_get_boolean (value);
       break;
     case PROP_AE_WINDOW:
     {
@@ -1387,13 +1370,6 @@ gst_v4l2camsrc_set_property (GObject * object,
       break;
     }
 
-    case PROP_AF:
-      v4l2camsrc->af_enabled = g_value_get_boolean (value);
-      break;
-
-    case PROP_AWB:
-      v4l2camsrc->awb_enabled = g_value_get_boolean (value);
-      break;
     case PROP_STILL_AF:
       v4l2camsrc->still_af = g_value_get_boolean (value);
       cam_set_autofocus (v4l2camsrc->still_af);
@@ -1577,8 +1553,8 @@ gst_v4l2camsrc_get_property (GObject * object,
     case PROP_USE_COPY:
       g_value_set_boolean (value, v4l2camsrc->use_copy);
       break;
-    case PROP_AE:
-      g_value_set_boolean (value, v4l2camsrc->ae_enabled);
+    case PROP_3A:
+      g_value_set_boolean (value, v4l2camsrc->ae_awb_af_enabled);
       break;
     case PROP_AE_METERING_MODE:
       g_value_set_enum (value, v4l2camsrc->ae_metering_mode);
@@ -1607,10 +1583,6 @@ gst_v4l2camsrc_get_property (GObject * object,
       gst_structure_free(tmp);
       break;
     }
-
-    case PROP_AF:
-      g_value_set_boolean (value, v4l2camsrc->af_enabled);
-      break;
     case PROP_AF_METERING_MODE:
       g_value_set_enum (value, v4l2camsrc->af_metering_mode);
       break;
@@ -1635,10 +1607,6 @@ gst_v4l2camsrc_get_property (GObject * object,
       gst_structure_free(tmp);
       break;
     }
-
-    case PROP_AWB:
-      g_value_set_boolean (value, v4l2camsrc->awb_enabled);
-      break;
     case PROP_STILL_AF:
       g_value_set_boolean (value, v4l2camsrc->still_af);
       break;
index 4b084ed..b09f1fa 100644 (file)
@@ -267,7 +267,7 @@ struct _GstMFLDV4l2CamSrc {
 
   /* MFLD camera advanced features */
   gboolean gdc_enabled, cac_enabled, ee_enabled, sc_enabled, dvs_enabled;
-  gboolean rer_enabled, dis_enabled, ae_enabled, af_enabled, awb_enabled;
+  gboolean rer_enabled, dis_enabled, ae_awb_af_enabled;
   gboolean blc_enabled, bpd_enabled;
   gboolean caf_enabled;
 
index 725a706..72b6332 100644 (file)
@@ -2141,16 +2141,13 @@ gst_v4l2camsrc_libmfld_grab_hq_frame (GstMFLDV4l2CamSrc * v4l2camsrc,
   struct cam_capture_settings st;
 
   st.mmap = v4l2camsrc->use_mmap;
-  st.ae = v4l2camsrc->ae_enabled;
-  st.af = v4l2camsrc->af_enabled;
-  st.awb = v4l2camsrc->awb_enabled;
+  st.ae_awb_af = v4l2camsrc->ae_awb_af_enabled;
   st.dump_raw = v4l2camsrc->dump_raw;
   st.raw_output_size = v4l2camsrc->raw_output_size;
   st.dump_image = v4l2camsrc->dump_image;
 
   err = cam_capture_frames (v4l2camsrc->video_fd, buffer, &st);
-  if (v4l2camsrc->ae_enabled || v4l2camsrc->af_enabled ||
-      v4l2camsrc->awb_enabled)
+  if (v4l2camsrc->ae_awb_af_enabled)
     mfldcam_3a_start ();
   ret = (err == CAM_ERR_NONE);
 
@@ -3483,57 +3480,17 @@ gst_v4l2camsrc_set_autofocus (GstCameraSrc * camsrc, gboolean on)
 {
   GstMFLDV4l2CamSrc *v4l2camsrc;
   gboolean ret = FALSE;
+  cam_err_t err = CAM_ERR_NONE;
 
   v4l2camsrc = GST_V4L2CAMSRC (camsrc);
-
   g_mutex_lock (v4l2camsrc->device_mutex);
-
-  cam_err_t err = CAM_ERR_NONE;
-
   err= cam_set_autofocus(on);
-  v4l2camsrc->af_enabled = on;
-
   ret = (err == CAM_ERR_NONE);
-
   g_mutex_unlock (v4l2camsrc->device_mutex);
 
   GST_DEBUG ("setting autofocus: %s", ret ? "ok" : "failed");
-
   return ret;
 }
-
-/*
- *
- */
-gboolean
-gst_v4l2camsrc_set_autoexposure (GstCameraSrc * camsrc, gboolean on)
-{
-  GstMFLDV4l2CamSrc *v4l2camsrc;
-  gboolean ret = FALSE;
-  gchar *mode;
-
-  v4l2camsrc = GST_V4L2CAMSRC (camsrc);
-  mode = on ? "ON" : "OFF";
-
-  GST_DEBUG_OBJECT (v4l2camsrc, "setting autoexposure: %s", mode);
-
-
-  g_mutex_lock (v4l2camsrc->device_mutex);
-
-  cam_err_t err = CAM_ERR_NONE;
-
- err = cam_set_autoexposure(v4l2camsrc->video_fd, on);
-  v4l2camsrc->ae_enabled = on;
-
-  ret = (err == CAM_ERR_NONE);
-  g_mutex_unlock (v4l2camsrc->device_mutex);
-
-  GST_DEBUG_OBJECT (v4l2camsrc, "Setting autoexposure %s: %s", mode,
-      ret ? "SUCCESS" : "FAILED");
-
-  return ret;
-}
-
 /*
  *
  */