From 15aeb07138e7bb95169027eacb77e1b271a51088 Mon Sep 17 00:00:00 2001 From: Marko Ollonen Date: Fri, 16 Nov 2012 11:11:14 +0200 Subject: [PATCH] flash need request to 3A lib used in auto flash mode Change-Id: I91195ae1e231e680d6f07dd4a1743ffa576e2192 --- gst-libs/atomisphal/gstv4l2mfldadvci.c | 13 +++++++++++- gst-libs/atomisphal/gstv4l2mfldadvci.h | 1 + gst-libs/atomisphal/mfld_cam.c | 36 ++++++++++++++++++++++++---------- gst-libs/atomisphal/mfld_driver.c | 7 +++++++ gst-libs/atomisphal/mfld_driver.h | 5 +++++ packaging/mfldv4l2camsrc.changes | 3 +++ 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/gst-libs/atomisphal/gstv4l2mfldadvci.c b/gst-libs/atomisphal/gstv4l2mfldadvci.c index 988f4be..5343ccf 100644 --- a/gst-libs/atomisphal/gstv4l2mfldadvci.c +++ b/gst-libs/atomisphal/gstv4l2mfldadvci.c @@ -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; diff --git a/gst-libs/atomisphal/gstv4l2mfldadvci.h b/gst-libs/atomisphal/gstv4l2mfldadvci.h index 62b8ac6..b3d67c9 100644 --- a/gst-libs/atomisphal/gstv4l2mfldadvci.h +++ b/gst-libs/atomisphal/gstv4l2mfldadvci.h @@ -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); diff --git a/gst-libs/atomisphal/mfld_cam.c b/gst-libs/atomisphal/mfld_cam.c index 930b5c7..f1b3f65 100644 --- a/gst-libs/atomisphal/mfld_cam.c +++ b/gst-libs/atomisphal/mfld_cam.c @@ -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); diff --git a/gst-libs/atomisphal/mfld_driver.c b/gst-libs/atomisphal/mfld_driver.c index 8d40d36..995df3a 100644 --- a/gst-libs/atomisphal/mfld_driver.c +++ b/gst-libs/atomisphal/mfld_driver.c @@ -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"); +} diff --git a/gst-libs/atomisphal/mfld_driver.h b/gst-libs/atomisphal/mfld_driver.h index 64c83af..1d3de38 100644 --- a/gst-libs/atomisphal/mfld_driver.h +++ b/gst-libs/atomisphal/mfld_driver.h @@ -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 */ diff --git a/packaging/mfldv4l2camsrc.changes b/packaging/mfldv4l2camsrc.changes index 1887131..34dcbd1 100644 --- a/packaging/mfldv4l2camsrc.changes +++ b/packaging/mfldv4l2camsrc.changes @@ -1,3 +1,6 @@ +* Fri Nov 16 2012 Marko Ollonen accepted/trunk/20121112.215039@3e4a4f2 +- flash need request to 3A lib used in auto flash mode + * Thu Nov 15 2012 Marko Ollonen accepted/trunk/20121112.215039@ae18d70 - flash sequence for 3A added. -- 2.7.4