#include "gstv4l2mfldadvci.h"
#include <linux/videodev2.h>
#include <sys/ioctl.h>
-#include <stdio.h>
#include <gst/gst.h>
#include "ci_adv_pub.h"
ci_adv_ae_set_exposure_program(ia_3a_ae_exposure_program_auto);
ci_adv_ae_set_mode(ia_3a_ae_mode_auto);
+ ci_adv_ae_set_metering_mode(ia_3a_ae_metering_mode_center);
ci_adv_af_set_range (ia_3a_af_range_full);
ci_adv_awb_set_mode(ia_3a_awb_mode_auto);
ci_adv_af_set_mode(ia_3a_af_mode_auto);
static void lib_3a_AfGetStillAfStatus(ia_3a_af_status *status)
{
- cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
*status = ci_adv_af_get_status();
}
+static bool lib_3a_af_is_complete(void)
+{
+
+ ia_3a_af_status status;
+ bool completed = FALSE;
+
+ lib_3a_AfGetStillAfStatus(&status);
+
+ if (status == ia_3a_af_status_error) {
+ cam_lib_3a_dbg("==== still AF failed \n");
+ completed = TRUE;
+ }
+ else if (status == ia_3a_af_status_success) {
+ cam_lib_3a_dbg("==== still AF success");
+ completed = TRUE;
+ } else if (status == ia_3a_af_status_cancelled) {
+ cam_lib_3a_dbg("==== still AF cancelled \n");
+ completed = TRUE;
+ }
+ else {
+ cam_lib_3a_dbg("==== still AF continue %d \n", status);
+ }
+
+ return completed;
+}
+
static void lib_3a_RerVersion(int * major, int * minor)
{
cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
mfldadvci->af_start = lib_3a_af_start;
mfldadvci->af_stop = lib_3a_af_stop;
- mfldadvci->af_is_complete = lib_3a_int_void;
+ mfldadvci->af_is_complete = lib_3a_af_is_complete;
mfldadvci->awb_apply_results = lib_3a_awb_apply_results;
mfldadvci->awb_calc_flash = lib_3a_void;
/* Still AF processing */
if (mfld_driver.still_af_count) {
- int complete = 1; /* AF status */
+ bool complete = TRUE; /* AF status */
if (mfld_driver.af_enabled)
complete = mfldadvci->af_is_complete ();
cam_capture_init (fd, buffer, capture_settings);
- if (mfld_driver.mode == CAM_CAPTURE_MODE_STILL_CAPTURE ) {
+ if ((mfld_driver.mode == CAM_CAPTURE_MODE_STILL_CAPTURE ) &&
+ (mfld_driver.sensor_type == SENSOR_TYPE_RAW) ) {
/* check flash here not in always when capturing frames */
flash_en = get_flash_status ();
- if (flash_en == TRUE) {
+ // stop still AF processing if running
+ if (mfld_driver.still_af_count) {
+ mfldadvci->af_stop();
+ mfld_driver.still_af_count = 0;
+ }
+ if (flash_en == TRUE){
run_flash_sequence (fd, buffer);
}
else{