From: Marko Ollonen Date: Thu, 14 Feb 2013 06:43:19 +0000 (+0200) Subject: combine ae/af/awb enable/disable to one 3a property. X-Git-Tag: 2.1b_release~6^2~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=058fb0e37834c9464087d2a3356670ae38187d83;p=adaptation%2Fintel_mfld%2Fgst-plugins-atomisp.git combine ae/af/awb enable/disable to one 3a property. Change-Id: I2591c5b8810987fee43a4ae3050f15abe8551a4e --- diff --git a/gst-libs/atomisphal/mfld_cam.c b/gst-libs/atomisphal/mfld_cam.c index 6e7c84a..56ba274 100644 --- a/gst-libs/atomisphal/mfld_cam.c +++ b/gst-libs/atomisphal/mfld_cam.c @@ -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 || diff --git a/gst-libs/atomisphal/mfld_cam.h b/gst-libs/atomisphal/mfld_cam.h index 240f5ad..21c447c 100644 --- a/gst-libs/atomisphal/mfld_cam.h +++ b/gst-libs/atomisphal/mfld_cam.h @@ -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; diff --git a/gst-libs/gst/camera/gstmfldcamerasrc.c b/gst-libs/gst/camera/gstmfldcamerasrc.c index a109e26..457c56a 100644 --- a/gst-libs/gst/camera/gstmfldcamerasrc.c +++ b/gst-libs/gst/camera/gstmfldcamerasrc.c @@ -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; diff --git a/gst-libs/gst/camera/gstmfldcamerasrc.h b/gst-libs/gst/camera/gstmfldcamerasrc.h index c998021..0d467d4 100644 --- a/gst-libs/gst/camera/gstmfldcamerasrc.h +++ b/gst-libs/gst/camera/gstmfldcamerasrc.h @@ -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, diff --git a/gst/mfldv4l2cam/gstv4l2camsrc.c b/gst/mfldv4l2cam/gstv4l2camsrc.c index cf7eecb..28b66f3 100644 --- a/gst/mfldv4l2cam/gstv4l2camsrc.c +++ b/gst/mfldv4l2cam/gstv4l2camsrc.c @@ -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; diff --git a/gst/mfldv4l2cam/gstv4l2camsrc.h b/gst/mfldv4l2cam/gstv4l2camsrc.h index 4b084ed..b09f1fa 100644 --- a/gst/mfldv4l2cam/gstv4l2camsrc.h +++ b/gst/mfldv4l2cam/gstv4l2camsrc.h @@ -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; diff --git a/gst/mfldv4l2cam/v4l2camsrc_calls.c b/gst/mfldv4l2cam/v4l2camsrc_calls.c index 725a706..72b6332 100644 --- a/gst/mfldv4l2cam/v4l2camsrc_calls.c +++ b/gst/mfldv4l2cam/v4l2camsrc_calls.c @@ -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; -} - /* * */