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;
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;
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 */
{
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) {
}
/* 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;
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 );
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 ||
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;
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);
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;
}
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;
}
{
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;
* @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.
gboolean
(*set_autofocus) (GstCameraSrc *camsrc, gboolean on_off);
-
- gboolean
- (*set_autoexposure) (GstCameraSrc *camsrc, gboolean on_off);
-
gboolean
(*write_settings) (GstCameraSrc *camsrc,
GstPhotoSettings *photoconf,
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,
}
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);
"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",
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",
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",
// 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 =
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;
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:
{
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);
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);
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;
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;
/* 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;
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);
{
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;
-}
-
/*
*
*/