use 3a lib dynamically linked
authorMarko Ollonen <marko.ollonen@ixonos.com>
Wed, 9 Jan 2013 16:27:04 +0000 (18:27 +0200)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Thu, 10 Jan 2013 06:52:49 +0000 (08:52 +0200)
Change-Id: I485c1a2ee22f9b3c853771e4d27eb4a212fdf61f

configure.ac
gst-libs/atomisphal/gstv4l2mfldadvci.c
gst-libs/atomisphal/gstv4l2mfldadvci.h
gst-libs/atomisphal/mfld_cam.c
gst-libs/atomisphal/mfld_cam.h
gst/mfldv4l2cam/gstv4l2camsrc.c
gst/mfldv4l2cam/v4l2camsrc_calls.c
packaging/mfldv4l2camsrc.changes
packaging/mfldv4l2camsrc.spec

index 9d9f636..33f463c 100644 (file)
@@ -161,8 +161,8 @@ HAVE_LIBMFLDADVCI=yes
 PKG_CHECK_MODULES(LIBMFLDADVCI, libmfldadvci >= $LIBMFLD_REQUIRED, HAVE_LIBMFLDADVCI=yes, HAVE_LIBMFLDADVCI=no)
 AM_CONDITIONAL(HAVE_LIBMFLDADVCI, test ! "x$LIBMFLDADVCI" = "xyes")
 if test "x$HAVE_LIBMFLDADVCI" = "xyes"; then
-LIBMFLDADVCI_CFLAGS="-DUSE_STATIC_3A -I/usr/include/libmfldadvci/"
-LIBMFLDADVCI_LIBS="-Bstatic -lmfldadvci"
+LIBMFLDADVCI_CFLAGS=""
+LIBMFLDADVCI_LIBS=""
 AC_SUBST(LIBMFLDADVCI_CFLAGS)
 AC_SUBST(LIBMFLDADVCI_LIBS)
 fi
index 48596ae..e63b281 100644 (file)
@@ -70,14 +70,7 @@ static void wrapper_default_uninit(void)
 {
 }
 
-static void
-wrapper_default_dis_process (struct atomisp_dis_statistics *stats,
-                     struct atomisp_dis_vector *motion_vector)
-{
-}
-
-static void
-wrapper_default_dis_calc_still (struct atomisp_dis_vector * vector, int frame_number)
+static void wrapper_default_enable(gboolean enable)
 {
 }
 
@@ -87,23 +80,18 @@ wrapper_default_do_redeye_removal (advci_frame_t *frame)
 }
 
 static void
-wrapper_default_still_compose (advci_frame_t *com_buf,
-                     advci_frame_t bufs[],
-                     int frame_dis,
-                     struct atomisp_dis_vector vectors[])
-{
-}
-
-static void
 wrapper_default_AeSetFlickerMode(advci_ae_flicker_mode mode)
 {
 }
 
-static void
-wrapper_default_AeGetFlickerMode(advci_ae_flicker_mode *mode)
+static advci_ae_flicker_mode
+wrapper_default_AeGetFlickerMode(void)
 {
+
+return advci_ae_flicker_mode_off;
 }
 
+
 static void
 wrapper_default_AeSetExposureProgram(advci_ae_exposure_program program)
 {
@@ -118,33 +106,37 @@ static void wrapper_default_AfSetMode(advci_af_mode mode)
 {
 }
 
-static void wrapper_default_AfGetMode(advci_af_mode *mode)
+static advci_af_mode wrapper_default_AfGetMode()
 {
+return advci_af_mode_auto;
 }
 
 static void wrapper_default_AfSetRange(advci_af_range range)
 {
 }
 
-static void wrapper_default_AfGetRange(advci_af_range *range)
+static advci_af_range wrapper_default_AfGetRange(advci_af_range *range)
 {
+  return advci_af_range_norm;
 }
 
 static void wrapper_default_AwbSetMode(advci_awb_mode mode)
 {
 }
 
-static void wrapper_default_AwbGetMode(advci_awb_mode *mode)
+static advci_awb_mode wrapper_default_AwbGetMode()
 {
+  return advci_awb_mode_auto;
 }
 
 static void wrapper_default_AwbSetLightSource(advci_awb_light_source ls)
 {
 }
 
-static void
-wrapper_default_AwbGetLightSource(advci_awb_light_source *ls)
+static advci_awb_light_source
+wrapper_default_AwbGetLightSource(void)
 {
+return advci_awb_light_source_other;
 }
 
 static ci_adv_Err
@@ -188,13 +180,9 @@ static void wrapper_default_AfVersion(int * major, int * minor)
 {
 }
 
-static void wrapper_default_AfGetStillAfStatus(advci_af_status *status)
-{
-}
-
-static gboolean wrapper_default_af_is_complete(void)
+static advci_af_status wrapper_default_AfGetStillAfStatus()
 {
-  return TRUE;
+  return advci_af_status_busy;
 }
 
 static void wrapper_default_RerVersion(int * major, int * minor)
@@ -202,21 +190,14 @@ static void wrapper_default_RerVersion(int * major, int * minor)
   return;
 }
 
-static ci_adv_Err wrapper_default_AeGetManualShutter(int *time)
+static ci_adv_Err wrapper_default_AeGetManualShutter(float *time)
 {
   return ci_adv_Success;
 }
 
-static void
-wrapper_default_Awbdata(unsigned * num_p, unsigned * avg_r,
-                       unsigned * avg_gr,
-                        unsigned * avg_b, unsigned * avg_gb)
-{
-  return;
-}
-
-static void wrapper_default_AeGetManualAperture(int *aperture)
+static int wrapper_default_AeGetManualAperture()
 {
+return 1;
 }
 
 static void wrapper_default_AeGetFlashMode(advci_ae_flash_mode *mode)
@@ -227,17 +208,9 @@ static void wrapper_default_AeSetFlashMode(advci_ae_flash_mode mode)
 {
 }
 
-static void wrapper_default_AwbGetManualColorTemperature(int *ctemp)
-{
-}
-
-static void
-wrapper_default_Awbmatrix(int msqWbGain[3], int msqCcMtrx[9], unsigned short * shift)
-{
-}
-
-static void wrapper_default_GetGridInfo(void * grid_info)
+static int wrapper_default_AwbGetManualColorTemperature()
 {
+return 0;
 }
 
 static void
@@ -267,7 +240,7 @@ wrapper_default_Ae_Af_GetWindow(advci_window *window)
 }
 
 static void
-wrapper_default_Ae_Af_SetWindow( advci_window *window)
+wrapper_default_Ae_Af_SetWindows(int count, advci_window *window)
 {
 }
 static void wrapper_default_af_start( )
@@ -277,27 +250,13 @@ static void wrapper_default_af_start( )
 static void wrapper_default_af_stop( )
 {
 }
-static void wrapper_default_ae_calc_for_flash( )
-{
-}
-static void wrapper_default_calc_without_flash( )
-{
-}
-
-static void wrapper_default_calc_with_flash( )
+static void wrapper_default_process_flash(advci_flash_stage stage )
 {
 }
 
 static void wrapper_default_AeAfAwb_process( struct timeval *frame_timestamp)
 {
 }
-static void wrapper_default_get_statistics( )
-{
-}
-
-static void wrapper_default_awb_apply_results( )
-{
-}
 static void wrapper_default_AwbSetImageEffect(advci_image_effect effect)
 {
 }
@@ -312,10 +271,9 @@ wrapper_default_is_flash_needed(gboolean *useflash)
 {
 
 }
-static gboolean
-wrapper_default_af_assist_light_needed(void)
+static void
+wrapper_default_af_assist_light_needed(gboolean *need)
 {
-return FALSE;
 }
 
 static ci_adv_Err wrapper_default_AeSetManualIso(int sensitivity)
@@ -328,633 +286,82 @@ static ci_adv_Err wrapper_default_AeGetManualIso(int *sensitivity)
   return 0;
 }
 
-static void
-wrapper_default_GetMakerNote(advci_mknote_mode mknMode, advci_mknote *note)
-{
-}
-
-static void
-wrapper_default_PutMakerNote(advci_mknote *mknData)
-{
-
-}
-
-static void
-wrapper_default_ResetMakerNote(void)
-{
-}
-
 /*------------------------------------------------------------------------------------------------*/
-#ifdef USE_STATIC_3A
-static void
-lib_3a_void (void)
-{
-  return;
-}
-
-static int
-lib_3a_int_void (void)
-{
-  return 0;
-}
-
-static void
-lib_3a_ae (void)
-{
-  return;
-}
-
-static void
-lib_3a_init(void)
+void
+lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci,  GModule *mod)
 {
+  gboolean ret = TRUE;
   const char *env;
   use_3A_debug= ((env = getenv ("LIBMFLDCAM_DEBUG")) && strstr (env, "verbose"));
-  cam_lib_3a_dbg("%s:%d", __func__, __LINE__);
-}
-
-static void
-lib_3a_uninit(void)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_uninit();
-}
-
-static void
-lib_3a_dis_process (struct atomisp_dis_statistics *stats,
-                     struct atomisp_dis_vector *motion_vector)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  return;
-}
 
-static void
-lib_3a_dis_calc_still (struct atomisp_dis_vector * vector, int frame_number)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  return;
-}
-
-static void
-lib_3a_do_redeye_removal (advci_frame_t *frame)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-}
-
-static void
-lib_3a_still_compose (advci_frame_t *com_buf,
-                     advci_frame_t bufs[],
-                     int frame_dis,
-                     struct atomisp_dis_vector vectors[])
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  return;
-}
-
-static void
-lib_3a_AeSetFlickerMode(advci_ae_flicker_mode mode)
-{
-  cam_lib_3a_dbg("%s:%d mode:%d\n", __func__, __LINE__,mode);
-  ci_adv_ae_set_flicker_mode((advci_ae_flicker_mode)mode);
-}
-
-static void
-lib_3a_AeGetFlickerMode(advci_ae_flicker_mode *mode)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *mode= ia_3a_ae_get_flicker_mode();
-}
-
-static void
-lib_3a_AeSetExposureProgram(advci_ae_exposure_program program)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_ae_set_exposure_program(program);
-}
-
-static void
-lib_3a_AeGetExposureProgram(advci_ae_exposure_program *program)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_ae_get_exposure_program((ia_3a_ae_exposure_program *)program);
-}
-
-static void
-lib_3a_AfSetMode(advci_af_mode mode)
-{
-  cam_lib_3a_dbg("%s:%d mode:%d\n", __func__, __LINE__,mode);
-  ci_adv_af_set_mode(mode);
-}
-
-static void
-lib_3a_AfGetMode(advci_af_mode *mode)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *mode = ia_3a_af_get_focus_mode();
-}
-
-static void
-lib_3a_AfSetRange(advci_af_range range)
-{
-  cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
-  ci_adv_af_set_range(range);
-}
-
-static void
-lib_3a_AfGetRange(advci_af_range *range)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *range = ia_3a_af_get_focus_range();
-}
-
-static void
-lib_3a_AwbSetMode(advci_awb_mode mode)
-{
-  cam_lib_3a_dbg("%s:%d mode:%d\n" , __func__, __LINE__,mode);
-  ci_adv_awb_set_mode(mode);
-}
-
-static void
-lib_3a_AwbGetMode(advci_awb_mode *mode)
-{
-  *mode = ia_3a_awb_get_mode();
-}
-
-static void
-lib_3a_AwbSetLightSource(advci_awb_light_source ls)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_awb_set_light_source(ls);
-}
-
-static void
-lib_3a_AwbGetLightSource(advci_awb_light_source *ls)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *ls = ia_3a_awb_get_light_source();
-}
-
-static ci_adv_Err
-lib_3a_int_int (int i)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  return ci_adv_Success;
-}
-
-static ci_adv_Err
-lib_3a_intp (int *p)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  return ci_adv_Success;
-}
-
-static int
-lib_3a_isp_set_fd (int fd, const char *sensor_id)
-{
-  int sensor_type;
-  ia_3a_window window;
-
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  if (ci_adv_init(sensor_id, fd, NULL) == 0) {
-    sensor_type = SENSOR_TYPE_RAW;
-  } else {
-    sensor_type = SENSOR_TYPE_SOC;
- }
-
-  if (sensor_type == SENSOR_TYPE_RAW) {
-    cam_lib_3a_dbg("SENSOR_TYPE_RAW");
-    ci_adv_awb_enable(TRUE);
-    ci_adv_awb_lock(FALSE);
-
-    ci_adv_ae_enable(TRUE);
-    ci_adv_ae_lock(FALSE);
-
-    ci_adv_af_enable(TRUE);
-    ci_adv_af_lock(FALSE);
-
-    window.x_left = 0;
-    window.x_right = 0,
-    window.y_top = 0;
-    window.y_bottom = 0;
-    window.weight = 0;
-
-    ci_adv_ae_set_window(&window);
-
-    ci_adv_ae_set_exposure_program(advci_ae_exposure_program_auto);
-    ci_adv_ae_set_mode(ia_3a_ae_mode_auto);
-    ci_adv_ae_set_metering_mode(advci_ae_metering_mode_center);
-    ci_adv_af_set_range (advci_af_range_full);
-    ci_adv_awb_set_mode(advci_awb_mode_auto);
-    ci_adv_af_set_mode(advci_af_mode_auto);
-    ci_adv_af_set_metering_mode (advci_af_metering_mode_auto);
-
-  }
-
-  return sensor_type;
-}
-
-static void
-lib_3a_switch_mode (advci_isp_mode mode, float frame_rate)
-{
-  cam_lib_3a_dbg("%s:%d mode:%d frame_rate:%f\n", __func__, __LINE__, mode,frame_rate);
-  ci_adv_configure((ia_3a_isp_mode)mode, frame_rate);
-}
-
-static ci_adv_Err lib_3a_AeGetWindowsNum(int *num)
-{
-  cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
-  return ci_adv_Success;
-}
+  g_module_symbol (mod, "ci_adv_af_set_mode", (gpointer) &mfldadvci->AfSetMode);
+  g_module_symbol (mod, "ia_3a_af_get_focus_mode", (gpointer) &mfldadvci->AfGetMode);
+
+  g_module_symbol (mod, "ci_adv_af_start", (gpointer) &mfldadvci->af_start);
+  g_module_symbol (mod, "ci_adv_af_stop", (gpointer) &mfldadvci->af_stop);
+
+  g_module_symbol (mod, "ci_adv_process_frame", (gpointer) &mfldadvci->AeAfAwb_process);
+  g_module_symbol (mod, "ci_adv_uninit", (gpointer) &mfldadvci->uninit);
+  g_module_symbol (mod, "ci_adv_init", (gpointer) &mfldadvci->isp_set_fd);
+  g_module_symbol (mod, "ci_adv_configure", (gpointer) &mfldadvci->switch_mode);
+  g_module_symbol (mod, "ci_adv_ae_set_flash_mode", (gpointer) &mfldadvci->AeSetFlashMode);
+  g_module_symbol (mod, "ia_3a_ae_get_flash_mode", (gpointer) &mfldadvci->AeGetFlashMode);
+  g_module_symbol (mod, "ci_adv_awb_set_mode", (gpointer) &mfldadvci->AwbSetMode);
+  g_module_symbol (mod, "ia_3a_awb_get_mode", (gpointer) &mfldadvci->AwbGetMode);
+  g_module_symbol (mod, "ci_adv_ae_is_flash_necessary", (gpointer) &mfldadvci->ae_is_flash_needed);
+  g_module_symbol (mod, "ci_adv_af_need_assist_light", (gpointer) &mfldadvci->af_assist_light_needed);
+  g_module_symbol (mod, "ci_adv_ae_set_manual_iso", (gpointer) &mfldadvci->AeSetIso);
+  g_module_symbol (mod, "ci_adv_ae_set_flicker_mode", (gpointer) &mfldadvci->AeSetFlickerMode);
+  g_module_symbol (mod, "ia_3a_ae_get_flicker_mode", (gpointer) &mfldadvci->AeGetFlickerMode);
+  g_module_symbol (mod, "ci_adv_ae_set_exposure_program", (gpointer) &mfldadvci->AeSetExposureProgram);
+  g_module_symbol (mod, "ci_adv_ae_get_exposure_program", (gpointer) &mfldadvci->AeGetExposureProgram);
+  g_module_symbol (mod, "ci_adv_process_for_flash", (gpointer) &mfldadvci->process_flash);
+  g_module_symbol (mod, "ci_adv_af_set_range", (gpointer) &mfldadvci->AfSetRange);
+  g_module_symbol (mod, "ia_3a_af_get_focus_range", (gpointer) &mfldadvci->AfGetRange);
+  g_module_symbol (mod, "ci_adv_af_version", (gpointer) &mfldadvci->AfVersion);
+  g_module_symbol (mod, "ci_adv_awb_version", (gpointer) &mfldadvci->AwbVersion);
+  g_module_symbol (mod, "ci_adv_ae_version", (gpointer) &mfldadvci->AeVersion);
+  g_module_symbol (mod, "ci_adv_awb_set_light_source", (gpointer) &mfldadvci->AwbSetLightSource);
+  g_module_symbol (mod, "ia_3a_awb_get_light_source", (gpointer) &mfldadvci->AwbGetLightSource);
+  g_module_symbol (mod, "ci_adv_ae_set_manual_shutter", (gpointer) &mfldadvci->AeGetManualShutter);
+  g_module_symbol (mod, "ia_3a_ae_get_manual_aperture", (gpointer) &mfldadvci->AeGetManualAperture);
+  g_module_symbol (mod, "ia_3a_awb_get_manual_color_temperature", (gpointer) &mfldadvci->AwbGetManualColorTemperature);
+  g_module_symbol (mod, "ci_adv_ae_set_window", (gpointer) &mfldadvci->AeSetWindow);
+  g_module_symbol (mod, "ci_adv_af_set_windows", (gpointer) &mfldadvci->AfSetWindows);
+  g_module_symbol (mod, "ia_3a_ae_get_window", (gpointer) &mfldadvci->AeGetWindow);
+  g_module_symbol (mod, "ci_adv_ae_set_metering_mode", (gpointer) &mfldadvci->AeSetMeteringMode);
+  g_module_symbol (mod, "ia_3a_ae_get_metering_mode", (gpointer) &mfldadvci->AeGetMeteringMode);
+  g_module_symbol (mod, "ci_adv_af_set_metering_mode", (gpointer) &mfldadvci->AfSetMeteringMode);
+  g_module_symbol (mod, "ci_adv_af_get_metering_mode", (gpointer) &mfldadvci->AfGetMeteringMode);
+  g_module_symbol (mod, "ia_3a_ae_get_window", (gpointer) &mfldadvci->AfGetWindow);
+  g_module_symbol (mod, "ci_adv_isp_set_image_effect", (gpointer) &mfldadvci->AwbSetImageEffect);
+  g_module_symbol (mod, "ci_adv_isp_get_image_effect", (gpointer) &mfldadvci->AwbGetImageEffect);
+  g_module_symbol (mod, "ci_adv_af_get_status", (gpointer) &mfldadvci->AfGetStillAfStatus);
+
+  g_module_symbol (mod, "ci_adv_ae_enable", (gpointer) &mfldadvci->AwbEnable);
+  g_module_symbol (mod, "ci_adv_af_enable", (gpointer) &mfldadvci->AeEnable);
+  g_module_symbol (mod, "ci_adv_awb_enable", (gpointer) &mfldadvci->AfEnable);
+
+
+  g_module_symbol (mod, "ci_adv_awb_lock", (gpointer) &mfldadvci->AwbLock);
+  g_module_symbol (mod, "ci_adv_ae_lock", (gpointer) &mfldadvci->AeLock);
+  g_module_symbol (mod, "ci_adv_af_lock", (gpointer) &mfldadvci->AfLock);
 
-static void lib_3a_AwbVersion(int * major, int * minor)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_awb_version(major,minor);
-}
-
-static void lib_3a_AeVersion(int * major, int * minor)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_ae_version(major,minor);
-}
-
-static void lib_3a_AfVersion(int * major, int * minor)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_af_version(major,minor);
-}
-
-static void lib_3a_AfGetStillAfStatus(advci_af_status *status)
-{
-  *status = ci_adv_af_get_status();
-}
-
-static gboolean lib_3a_af_is_complete(void)
-{
-
-  advci_af_status status;
-  gboolean completed = FALSE;
-
-  lib_3a_AfGetStillAfStatus(&status);
-
-  if (status == advci_af_status_error) {
-    cam_lib_3a_dbg("==== still AF failed \n");
-    completed = TRUE;
-  }
-   else if (status == advci_af_status_success) {
-    cam_lib_3a_dbg("==== still AF success");
-    completed = TRUE;
-  } else if (status == advci_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__);
-  return;
-}
-
-static ci_adv_Err lib_3a_AeGetManualShutter(int *time)
-{
-  /* TODO time is float */
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_ae_set_manual_shutter((float)*time);
-  return ci_adv_Success;
-}
-
-static void lib_3a_Awbdata(unsigned * num_p, unsigned * avg_r, unsigned * avg_gr,
-        unsigned * avg_b, unsigned * avg_gb)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  return;
-}
-
-static void lib_3a_AeGetManualAperture(int *aperture)
-{
-  // TODO returns float
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *aperture = (int)ia_3a_ae_get_manual_aperture();
-}
-
-static void lib_3a_AeGetFlashMode(advci_ae_flash_mode *mode)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *mode= ia_3a_ae_get_flash_mode();
-}
-
-static void lib_3a_AeSetFlashMode(advci_ae_flash_mode mode)
-{
-  cam_lib_3a_dbg("%s:%d mode:%d \n", __func__, __LINE__, mode);
-  ci_adv_ae_set_flash_mode(mode);
-}
-
-static void lib_3a_AwbGetManualColorTemperature(int *ctemp)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *ctemp = ia_3a_awb_get_manual_color_temperature();
-}
-
-static void
-lib_3a_Awbmatrix(int msqWbGain[3], int msqCcMtrx[9], unsigned short * shift)
-{
-  cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
-}
-
-static void lib_3a_GetGridInfo(void * grid_info)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-}
-
-static void
-lib_3a_AeSetMeteringMode(advci_ae_metering_mode mode)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_ae_set_metering_mode((ia_3a_ae_metering_mode)mode);
-}
-
-static void
-lib_3a_AeGetMeteringMode(advci_ae_metering_mode *mode)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  *mode = ia_3a_ae_get_metering_mode();
-}
-
-static void
-lib_3a_AfSetMeteringMode(advci_af_metering_mode mode)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_af_set_metering_mode(mode);
-}
-
-static void
-lib_3a_AfGetMeteringMode(advci_af_metering_mode *mode)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_af_get_metering_mode((ia_3a_af_metering_mode *)mode);
-}
-
-static void
-lib_3a_Ae_Af_GetWindow(advci_window *window)
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ia_3a_ae_get_window((ia_3a_window *)window);
-}
-
-static void
-lib_3a_Ae_Af_SetWindow( advci_window *window)
-{
-  cam_lib_3a_dbg("%s:window....%d:%d:%d:%d:%d\n",
-      __func__, window->x_left,window->x_right,
-      window->y_top , window->y_bottom, window->weight);
-
-  ci_adv_ae_set_window((ia_3a_window *)window);
-  ci_adv_af_set_windows(1, (ia_3a_window *)window);
-}
-
-static void
-lib_3a_af_start( )
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_af_start();
-}
-
-static void
-lib_3a_af_stop( )
-{
-  cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
-  ci_adv_af_stop();
-}
-
-static void
-lib_3a_ae_calc_for_flash( )
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_process_for_flash(ia_3a_flash_stage_none);
-}
-static void
-lib_3a_calc_without_flash( )
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_process_for_flash(ia_3a_flash_stage_pre);
-}
-
-static void
-lib_3a_calc_with_flash( )
-{
-  cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_process_for_flash(ia_3a_flash_stage_main);
-}
-
-static void
-lib_3a_AeAfAwb_process( struct timeval *frame_timestamp)
-{
-  int status;
-  // cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  status =  ci_adv_process_frame(TRUE,frame_timestamp);
-}
-static void
-lib_3a_get_statistics( )
-{
- // cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
-  ci_adv_3a_stat cur_stat;
-  ci_adv_get_3a_stat (&cur_stat);
- /* cam_lib_3a_dbg("%8.3f, %8.3f, %8.3f, %8.3f, %8d, %8.3f, %8.3f, %8.3f\n",
-                cur_stat.bv,
-                cur_stat.tv,
-                cur_stat.sv,
-                cur_stat.av,
-                cur_stat.focus_pos,
-                cur_stat.wb_gain_r,
-                cur_stat.wb_gain_g,
-                cur_stat.wb_gain_b);
-*/
-}
-
-static void
-lib_3a_awb_apply_results( )
-{
-}
-static void
-lib_3a_AwbSetImageEffect(advci_image_effect effect)
-{
-  cam_lib_3a_dbg("%s:%d effect %d\n", __func__, __LINE__, effect);
-
-  ci_adv_isp_set_image_effect(effect);
-}
-
-static void
-lib_3a_AwbGetImageEffect(advci_image_effect *effect)
-{
-  *effect = ci_adv_isp_get_image_effect();
-  cam_lib_3a_dbg("%s:%d effect: %d\n", __func__, __LINE__, *effect);
-
-}
-
-static void
-lib_ae_is_flash_needed(gboolean *useflash)
-{
-  ci_adv_ae_is_flash_necessary((_Bool *)useflash);
-  cam_lib_3a_dbg("%s:%d useflash: %d\n", __func__, __LINE__, *useflash);
-
-}
-
-static ci_adv_Err
-lib_3a_AeSetManualIso(int sensitivity)
-{
-       float sv;
-       if (sensitivity <=0)
-       {
-               cam_lib_3a_dbg("error in get log2 math computation in line %d; sensitivity: %d\n", __LINE__, sensitivity);
-               return ci_adv_InvalidArgument;
-       }
-
-       sv = log10((float)sensitivity / 3.125) / log10(2.0);
-       ci_adv_err ret = ci_adv_ae_set_manual_iso(sv);
-       if(ci_adv_success != ret)
-               return ret;
-
-       cam_lib_3a_dbg(" *** manual set iso in EV: %f\n", sv);
-
-       return ci_adv_success;
-}
-
-static ci_adv_Err
-lib_3a_AeGetManualIso(int *sensitivity)
-{
-       float sv;
-       ci_adv_err ret = ci_adv_ae_get_manual_iso(&sv);
-       if(ci_adv_success != ret)
-               return ret;
-       *sensitivity = (int)(3.125 * pow(2, sv));
-
-       return ci_adv_success;
-}
-
-static void
-lib_3a_GetMakerNote(advci_mknote_mode mknMode, advci_mknote *note)
-{
-    note = (advci_mknote *)ci_adv_get_maker_note((ia_3a_mknote_mode)mknMode);
-}
-
-static void
-lib_3a_PutMakerNote(advci_mknote *mknData)
-{
-    if (mknData != NULL)
-    {
-        ci_adv_put_maker_note((ia_3a_mknote *)mknData);
-    }
-}
-
-static void
-lib_3a_ResetMakerNote(void)
-{
-    ci_adv_reset_maker_note();
-}
-
-static gboolean
-lib_3a_af_assist_light_needed(void)
-{
-  bool bNeed = FALSE;
-  ci_adv_err ret = ci_adv_af_need_assist_light(&bNeed);
-  cam_lib_3a_dbg("%s:%d assist_light_needed: %d\n", __func__, __LINE__, bNeed);
+  mfldadvci->initialized = 0;
+  // TODO
+  mfldadvci->init = wrapper_default_init;
+  mfldadvci->mode_spec_init = wrapper_default_int_void;
+  mfldadvci->update_dis_results = wrapper_default_void;
+  mfldadvci->do_redeye_removal = wrapper_default_do_redeye_removal;
+  mfldadvci->load_gdc_table = wrapper_default_void;
+  mfldadvci->AeSetBias = wrapper_default_int_int;
+  mfldadvci->AeGetBias = wrapper_default_intp;
+  mfldadvci->AeGetIso = wrapper_default_AeGetManualIso;
+  mfldadvci->RerVersion = wrapper_default_RerVersion;
 
-  return bNeed;
 }
 
 void
-lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
-{
-
-  mfldadvci->initialized = 0;
-  mfldadvci->init = lib_3a_init;
-  mfldadvci->uninit = lib_3a_uninit;
-  mfldadvci->isp_set_fd = lib_3a_isp_set_fd;
-  mfldadvci->mode_spec_init = lib_3a_int_void; /* TODO */
-  mfldadvci->switch_mode = lib_3a_switch_mode;
-
-  mfldadvci->AeAfAwb_process = lib_3a_AeAfAwb_process;
-  mfldadvci->get_statistics = lib_3a_get_statistics; /* TODO atomisp_dis_statistics  ? */
-
-  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->af_assist_light_needed = lib_3a_af_assist_light_needed;
-
-  mfldadvci->ae_apply_results = lib_3a_ae;
-
-  mfldadvci->af_start = lib_3a_af_start;
-  mfldadvci->af_stop = lib_3a_af_stop;
-  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;
-
-  mfldadvci->dis_read_statistics = lib_3a_void;
-  mfldadvci->update_dis_results = lib_3a_void;
-  mfldadvci->dis_process = lib_3a_dis_process;
-  mfldadvci->dis_calc_still = lib_3a_dis_calc_still;
-
-  mfldadvci->do_redeye_removal = lib_3a_do_redeye_removal;
-  mfldadvci->still_compose = lib_3a_still_compose;
-  mfldadvci->load_gdc_table = lib_3a_void;
-
-  mfldadvci->AeSetBias = lib_3a_int_int;
-  mfldadvci->AeGetBias = lib_3a_intp;
-  mfldadvci->AeSetFlickerMode = lib_3a_AeSetFlickerMode;
-  mfldadvci->AeGetFlickerMode = lib_3a_AeGetFlickerMode;
-  mfldadvci->AeSetExposureProgram = lib_3a_AeSetExposureProgram;
-  mfldadvci->AeGetExposureProgram = lib_3a_AeGetExposureProgram;
-  mfldadvci->AeSetMeteringMode = lib_3a_AeSetMeteringMode;
-  mfldadvci->AeGetMeteringMode = lib_3a_AeGetMeteringMode;
-  mfldadvci->AeGetWindow = lib_3a_Ae_Af_GetWindow;
-  mfldadvci->AeSetWindow = lib_3a_Ae_Af_SetWindow;
-  mfldadvci->AeSetIso = lib_3a_AeSetManualIso;
-  mfldadvci->AeGetIso = lib_3a_AeGetManualIso;
-
-
-  mfldadvci->AfSetMode = lib_3a_AfSetMode;
-  mfldadvci->AfGetMode = lib_3a_AfGetMode;
-  mfldadvci->AfSetRange = lib_3a_AfSetRange;
-  mfldadvci->AfGetRange = lib_3a_AfGetRange;
-  mfldadvci->AfSetMeteringMode = lib_3a_AfSetMeteringMode;
-  mfldadvci->AfGetMeteringMode = lib_3a_AfGetMeteringMode;
-  mfldadvci->AfGetWindow = lib_3a_Ae_Af_GetWindow;
-  mfldadvci->AfSetWindow = lib_3a_Ae_Af_SetWindow;
-
-  mfldadvci->AwbSetMode = lib_3a_AwbSetMode;
-  mfldadvci->AwbGetMode = lib_3a_AwbGetMode;
-  mfldadvci->AwbSetLightSource = lib_3a_AwbSetLightSource;
-  mfldadvci->AwbGetLightSource = lib_3a_AwbGetLightSource;
-  mfldadvci->AwbSetImageEffect = lib_3a_AwbSetImageEffect;
-  mfldadvci->AwbGetImageEffect = lib_3a_AwbGetImageEffect;
-
-  mfldadvci->AeGetWindowsNum = lib_3a_AeGetWindowsNum;
-  mfldadvci->AwbVersion = lib_3a_AwbVersion;
-  mfldadvci->AeVersion = lib_3a_AeVersion;
-  mfldadvci->AfVersion = lib_3a_AfVersion;
-  mfldadvci->AfGetStillAfStatus = lib_3a_AfGetStillAfStatus;
-  mfldadvci->RerVersion = lib_3a_RerVersion;
-  mfldadvci->AeGetManualShutter = lib_3a_AeGetManualShutter;
-  mfldadvci->Awbdata = lib_3a_Awbdata;
-  mfldadvci->AeGetManualAperture = lib_3a_AeGetManualAperture;
-  mfldadvci->AeSetFlashMode = lib_3a_AeSetFlashMode;
-  mfldadvci->AeGetFlashMode = lib_3a_AeGetFlashMode;
-  mfldadvci->AwbGetManualColorTemperature = lib_3a_AwbGetManualColorTemperature;
-  mfldadvci->Awbmatrix = lib_3a_Awbmatrix;
-  mfldadvci->GetGridInfo = lib_3a_GetGridInfo;
-  mfldadvci->GetMakerNote  = lib_3a_GetMakerNote;
-  mfldadvci->PutMakerNote = lib_3a_PutMakerNote;
-  mfldadvci->ResetMakerNote = lib_3a_ResetMakerNote;
-}
-#endif /* USE_STATIC_3A */
-void
 wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
 {
 
@@ -966,11 +373,8 @@ wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
   mfldadvci->switch_mode = wrapper_default_switch_mode;
 
   mfldadvci->AeAfAwb_process = wrapper_default_AeAfAwb_process;
-  mfldadvci->get_statistics = wrapper_default_get_statistics; /* TODO atomisp_dis_statistics  ? */
 
-  mfldadvci->ae_calc_for_flash = wrapper_default_ae_calc_for_flash;
-  mfldadvci->ae_calc_without_flash = wrapper_default_calc_without_flash;
-  mfldadvci->ae_calc_with_flash = wrapper_default_calc_with_flash;
+  mfldadvci->process_flash = wrapper_default_process_flash;
 
   mfldadvci->ae_is_flash_needed = wrapper_default_is_flash_needed;
   mfldadvci->af_assist_light_needed = wrapper_default_af_assist_light_needed;
@@ -979,17 +383,10 @@ wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
 
   mfldadvci->af_start = wrapper_default_af_start;
   mfldadvci->af_stop = wrapper_default_af_stop;
-  mfldadvci->af_is_complete = wrapper_default_af_is_complete;
-  mfldadvci->awb_apply_results = wrapper_default_awb_apply_results;
-  mfldadvci->awb_calc_flash = wrapper_default_void;
 
-  mfldadvci->dis_read_statistics = wrapper_default_void;
   mfldadvci->update_dis_results = wrapper_default_void;
-  mfldadvci->dis_process = wrapper_default_dis_process;
-  mfldadvci->dis_calc_still = wrapper_default_dis_calc_still;
 
   mfldadvci->do_redeye_removal = wrapper_default_do_redeye_removal;
-  mfldadvci->still_compose = wrapper_default_still_compose;
   mfldadvci->load_gdc_table = wrapper_default_void;
 
   mfldadvci->AeSetBias = wrapper_default_int_int;
@@ -1001,7 +398,7 @@ wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
   mfldadvci->AeSetMeteringMode = wrapper_default_AeSetMeteringMode;
   mfldadvci->AeGetMeteringMode = wrapper_default_AeGetMeteringMode;
   mfldadvci->AeGetWindow = wrapper_default_Ae_Af_GetWindow;
-  mfldadvci->AeSetWindow = wrapper_default_Ae_Af_SetWindow;
+  mfldadvci->AeSetWindow = wrapper_default_Ae_Af_SetWindows;
   mfldadvci->AeSetIso = wrapper_default_AeSetManualIso;
   mfldadvci->AeGetIso = wrapper_default_AeGetManualIso;
 
@@ -1013,7 +410,7 @@ wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
   mfldadvci->AfSetMeteringMode = wrapper_default_AfSetMeteringMode;
   mfldadvci->AfGetMeteringMode = wrapper_default_AfGetMeteringMode;
   mfldadvci->AfGetWindow = wrapper_default_Ae_Af_GetWindow;
-  mfldadvci->AfSetWindow = wrapper_default_Ae_Af_SetWindow;
+  mfldadvci->AfSetWindows = wrapper_default_Ae_Af_SetWindows;
 
   mfldadvci->AwbSetMode = wrapper_default_AwbSetMode;
   mfldadvci->AwbGetMode = wrapper_default_AwbGetMode;
@@ -1029,14 +426,17 @@ wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
   mfldadvci->AfGetStillAfStatus = wrapper_default_AfGetStillAfStatus;
   mfldadvci->RerVersion = wrapper_default_RerVersion;
   mfldadvci->AeGetManualShutter = wrapper_default_AeGetManualShutter;
-  mfldadvci->Awbdata = wrapper_default_Awbdata;
   mfldadvci->AeGetManualAperture = wrapper_default_AeGetManualAperture;
   mfldadvci->AeSetFlashMode = wrapper_default_AeSetFlashMode;
   mfldadvci->AeGetFlashMode = wrapper_default_AeGetFlashMode;
   mfldadvci->AwbGetManualColorTemperature = wrapper_default_AwbGetManualColorTemperature;
-  mfldadvci->Awbmatrix = wrapper_default_Awbmatrix;
-  mfldadvci->GetGridInfo = wrapper_default_GetGridInfo;
-  mfldadvci->GetMakerNote  = wrapper_default_GetMakerNote;
-  mfldadvci->PutMakerNote = wrapper_default_PutMakerNote;
-  mfldadvci->ResetMakerNote = wrapper_default_ResetMakerNote;
+
+  mfldadvci->AwbEnable = wrapper_default_enable;
+  mfldadvci->AeEnable = wrapper_default_enable;
+  mfldadvci->AfEnable = wrapper_default_enable;
+
+  mfldadvci->AwbLock = wrapper_default_enable;
+  mfldadvci->AeLock = wrapper_default_enable;
+  mfldadvci->AfLock = wrapper_default_enable;
+
 }
index 32e546c..d24fc78 100644 (file)
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <gmodule.h>
 #include <glib.h>
 #include "atomisp.h"
 
-#ifdef USE_STATIC_3A
-#include "ci_adv_pub.h"
-#include "ia_types.h"
-#include "ia_redeye.h"
-#include "ia_dvs.h"
-#include "ia_dis.h"
-#endif /* USE_STATIC_3A */
-
 typedef enum {
   ci_adv_Success,
   ci_adv_NotImplemented,
@@ -175,6 +168,12 @@ typedef enum {
   advci_af_status_idle       /* AF not running */
 } advci_af_status;
 
+typedef enum {
+        advci_flash_stage_none,
+        advci_flash_stage_pre,
+        advci_flash_stage_main
+} advci_flash_stage;
+
 
 typedef struct _GstV4l2MFLDAdvCI GstV4l2MFLDAdvCI;
 /**
@@ -191,98 +190,85 @@ struct _GstV4l2MFLDAdvCI
   void (*switch_mode)(advci_isp_mode mode, float frame_rate);
   void (*init) (void);
   void (*uninit) (void);
-  int (*isp_set_fd)(int fd, const char *sensor_id);
+  int (*isp_set_fd)(const char *sensor_id,int fd, const char *file);
 
-  void (*get_statistics)(void);
+  void (*AeAfAwb_process)(gboolean process, struct timeval *frame_timestamp);
 
-  void (*AeAfAwb_process)( struct timeval *frame_timestamp);
-
-  void (*ae_calc_for_flash)(void);
-  void (*ae_calc_without_flash)(void);
-  void (*ae_calc_with_flash)(void);
+  void (*process_flash)(advci_flash_stage stage);
   void (*ae_is_flash_needed)(gboolean *useflash);
   void (*ae_apply_results)(void);
 
   void (*af_start)(void);
   void (*af_stop)(void);
-  gboolean (*af_is_complete)(void);
-  gboolean (*af_assist_light_needed)(void);
-
-  void (*awb_apply_results)(void);
-  void (*awb_calc_flash)(void);
+  void (*af_assist_light_needed)(gboolean *needed);
 
-  void (*dis_read_statistics)(void);
   void (*update_dis_results)(void);
 
-  void (*dis_process)(struct atomisp_dis_statistics *stats, struct atomisp_dis_vector *motion_vector);
-
-  void (*dis_calc_still)(struct atomisp_dis_vector *vector, int frame_number);
-
   void (*do_redeye_removal) (advci_frame_t *user_buf);
 
-  void (*still_compose) (advci_frame_t *com_buf, advci_frame_t bufs[],
-                   int frame_dis, struct atomisp_dis_vector vectors[]);
-
   void (*load_gdc_table)(void);
 
   /* 3A property API */
   ci_adv_Err (*AeSetBias)(int bias); /* bias: -2.0(EV) to +2.0(EV) */
   ci_adv_Err (*AeGetBias)(int *bias); /* bias: -2.0(EV) to +2.0(EV) */
   void (*AeSetFlickerMode)(advci_ae_flicker_mode mode);
-  void (*AeGetFlickerMode)(advci_ae_flicker_mode *mode);
+  advci_ae_flicker_mode  (*AeGetFlickerMode)(void);
   void (*AeSetExposureProgram)(advci_ae_exposure_program program);
   void (*AeGetExposureProgram)(advci_ae_exposure_program *program);
   void (*AeSetMeteringMode)(advci_ae_metering_mode mode);
-  void (*AeGetMeteringMode)(advci_ae_metering_mode *mode);
+  advci_ae_metering_mode (*AeGetMeteringMode)(void);
   void (*AeSetWindow)(advci_window *window);
+
   void (*AeGetWindow)(advci_window *window);
   ci_adv_Err (*AeSetIso)(int sensitivity);
   ci_adv_Err (*AeGetIso)(int *sensitivity);
 
   void (*AfSetMode)(advci_af_mode mode);
-  void (*AfGetMode)(advci_af_mode *mode);
+  advci_af_mode (*AfGetMode)(void);
   void (*AfSetMeteringMode)(advci_af_metering_mode mode);
   void (*AfGetMeteringMode)(advci_af_metering_mode *mode);
-  void (*AfSetWindow)(advci_window *window);
+  void (*AfSetWindows)(int count, advci_window *window);
   void (*AfGetWindow)(advci_window *window);
 
   void (*AfSetRange)(advci_af_range range);
-  void (*AfGetRange)(advci_af_range *range);
+  advci_af_range (*AfGetRange)(void);
 
   /* AWB mode */
   void (*AwbSetMode)(advci_awb_mode mode);
-  void (*AwbGetMode)(advci_awb_mode *mode);
+  advci_awb_mode (*AwbGetMode)(void);
 
   /* color tone */
   void (*AwbSetImageEffect) (advci_image_effect effect);
-  void (*AwbGetImageEffect)(advci_image_effect *effect);
+  advci_image_effect (*AwbGetImageEffect)(void);
 
 
   /* AWB Light Source */
   void (*AwbSetLightSource)(advci_awb_light_source ls);
-  void (*AwbGetLightSource)(advci_awb_light_source *ls);
+  advci_awb_light_source (*AwbGetLightSource)(v);
 
   ci_adv_Err (*AeGetWindowsNum)(int *num);
   void (*AwbVersion)(int * major, int * minor);
   void (*AeVersion)(int * major, int * minor);
   void (*AfVersion)(int * major, int * minor);
-  void (*AfGetStillAfStatus)(advci_af_status *status);
+  advci_af_status (*AfGetStillAfStatus)(void);
   void (*RerVersion)(int * major, int * minor);
-  ci_adv_Err (*AeGetManualShutter)(int *time);
-  void (*Awbdata)(unsigned * num_p, unsigned * avg_r, unsigned * avg_gr,
-                    unsigned * avg_b, unsigned * avg_gb);
-  void (*AeGetManualAperture)(int *aperture);
-  void (*AeGetFlashMode)(advci_ae_flash_mode *mode);
+  ci_adv_Err (*AeGetManualShutter)(float *time);
+  int (*AeGetManualAperture)(void);
+  advci_ae_flash_mode (*AeGetFlashMode)(void);
   void (*AeSetFlashMode)(advci_ae_flash_mode mode);
   void (*AwbGetManualColorTemperature)(int *ctemp);
-  void (*Awbmatrix)(int msqWbGain[3], int msqCcMtrx[9], unsigned short * shift);
-  void (*GetGridInfo) (void * grid_info);
-  void (*GetMakerNote) (advci_mknote_mode mknMode, advci_mknote * note);
-  void (*PutMakerNote)(advci_mknote *mknData);
-  void (*ResetMakerNote)(void);
+
+  void (*AwbEnable)(gboolean enable);
+  void (*AeEnable)(gboolean enable);
+  void (*AfEnable)(gboolean enable);
+
+  void (*AwbLock)(gboolean lock);
+  void (*AeLock)(gboolean lock);
+  void (*AfLock)(gboolean lock);
+
 };
 
-void lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci);
+void lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci, GModule *mod);
 void wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci);
 
 #endif
index 6ed1083..b9fb3c9 100644 (file)
@@ -207,7 +207,7 @@ get_wb_mode (int *wb_mode)
     return CAM_ERR_NONE;
   }
 
-  mfldadvci->AwbGetMode (&mode);
+  mode = mfldadvci->AwbGetMode();
   if (mode == advci_awb_mode_auto) {
     *wb_mode = CAM_AWB_MODE_AUTO;
     return CAM_ERR_NONE;
@@ -309,8 +309,13 @@ static cam_err_t
 set_iso_speed (int iso)
 {
   cam_err_t ret = CAM_ERR_NONE;
+
+  float sv;
   mfld_cam_settings.iso_speed = iso;
   if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) {
+    if (iso <=0)
+      return CAM_ERR_PARAM;
+    sv = log10((float)iso / 3.125) / log10(2.0);
     ret = mfldadvci->AeSetIso(mfld_cam_settings.iso_speed);
   }
   return ret;
@@ -388,7 +393,7 @@ get_flicker_mode (int *mode)
     *mode  = CAM_GENERAL_FLICKER_REDUCTION_MODE_AUTO;
     return ret;
   }
-  mfldadvci->AeGetFlickerMode (&flicker_mode);
+  flicker_mode = mfldadvci->AeGetFlickerMode();
 
   /* Convert AE flicker mode to camera general flicker mode */
   switch (flicker_mode) {
@@ -830,7 +835,7 @@ cam_checkfocus_status (cam_focus_status_t * status, int force_update)
     do_read = TRUE;
   }
   if ((do_read == TRUE) || (force_update == 1)) {
-    mfldadvci->AfGetStillAfStatus (&af_status);
+    af_status = mfldadvci->AfGetStillAfStatus();
     *status = cam_find_item_new (focus_status_map, af_status, 1);
     cam_driver_dbg ("%s *status : %d\n ", __func__, *status);
     return 1;
@@ -1205,11 +1210,41 @@ libmfld_cam_dispose (void)
 cam_err_t
 cam_driver_init (int fd, const char *sensor_id)
 {
+  advci_window window;
   cam_driver_dbg ("%s\n", __func__);
 
   mfld_driver.fd = fd;
 
-  mfld_driver.sensor_type =  mfldadvci->isp_set_fd (fd, sensor_id);
+  if (mfldadvci->isp_set_fd (sensor_id, fd, NULL) == 0){
+    mfld_driver.sensor_type =  SENSOR_TYPE_RAW;
+
+    mfldadvci->AwbEnable(TRUE);
+    mfldadvci->AwbLock(FALSE);
+    mfldadvci->AeEnable(TRUE);
+    mfldadvci->AeLock(FALSE);
+    mfldadvci->AfEnable(TRUE);
+    mfldadvci->AfLock(FALSE);
+
+    window.x_left = 0;
+    window.x_right = 0,
+    window.y_top = 0;
+    window.y_bottom = 0;
+    window.weight = 0;
+    mfldadvci->AeSetWindow(&window);
+
+    mfldadvci->AeSetExposureProgram(advci_ae_exposure_program_auto);
+//    ci_adv_ae_set_mode(ia_3a_ae_mode_auto);
+   mfldadvci->AeSetMeteringMode(advci_ae_metering_mode_center);
+   mfldadvci->AfSetRange (advci_af_range_full);
+   mfldadvci->AwbSetMode(advci_awb_mode_auto);
+   mfldadvci->AfSetMode(advci_af_mode_auto);
+   mfldadvci->AfSetMeteringMode (advci_af_metering_mode_auto);
+
+
+
+  }
+  else
+    mfld_driver.sensor_type =  SENSOR_TYPE_SOC;
 
   cam_driver_init_gamma (fd);
 
@@ -1311,8 +1346,6 @@ cam_still_compose (struct v4l2_buffer *buf, advci_frame_t bufs[],
   com_buf.width = mfld_driver.width;
   com_buf.height = mfld_driver.height;
 
-  mfldadvci->still_compose (&com_buf, bufs, frame_dis, vectors);
-
   if (mfld_driver.mmap)
     munmap (com_buf.addr, com_buf.length);
 }
@@ -1437,17 +1470,10 @@ mfldcam_3a_process (gpointer data)
         || mfld_driver.awb_enabled || mfld_driver.dis_enabled
         || mfld_driver.dvs_enabled) && (mfld_driver.sensor_type == SENSOR_TYPE_RAW) )
     {
-      mfldadvci->get_statistics ();
-
       /* AE, AWB and AF Process */
-      mfldadvci->AeAfAwb_process(&mfld_driver.timestamp);
+      mfldadvci->AeAfAwb_process(TRUE,&mfld_driver.timestamp);
 
-      /* apply Results */
-      if (mfld_driver.awb_enabled)
-        mfldadvci->awb_apply_results ();
 
-      if (mfld_driver.ae_enabled)
-        mfldadvci->ae_apply_results ();
     } else
       return NULL;
   }
@@ -1485,19 +1511,14 @@ run_flash_sequence (int fd, struct v4l2_buffer *buffer)
 {
        // non flash
     led_flash_off (fd);        
-       mfldadvci->ae_calc_for_flash ();
-       mfldadvci->ae_apply_results ();
+       mfldadvci->process_flash(advci_flash_stage_none);
     if (-1 == ioctl (fd, VIDIOC_DQBUF, buffer)) {
       cam_driver_dbg ("%s: Error dqbuf %d\n", __func__, 0);
       return CAM_ERR_SYS;
     }
-       mfldadvci->get_statistics ();
-       
        // pre flash
-       mfldadvci->ae_calc_without_flash ();
-       mfldadvci->ae_apply_results ();
+       mfldadvci->process_flash (advci_flash_stage_pre);
        led_flash_trigger (fd, 0, 0);
-       mfldadvci->awb_apply_results ();
     if (-1 == ioctl (fd, VIDIOC_QBUF, buffer)) {
       cam_driver_dbg ("%s: Error qbuf %d\n", __func__, 1);
       return CAM_ERR_SYS;
@@ -1506,14 +1527,9 @@ run_flash_sequence (int fd, struct v4l2_buffer *buffer)
       cam_driver_dbg ("%s: Error dqbuf %d\n", __func__, 1);
       return CAM_ERR_SYS;
     }
-       mfldadvci->get_statistics ();
-       
        // main flash
-       mfldadvci->ae_calc_with_flash ();
-       mfldadvci->ae_apply_results ();
-       mfldadvci->awb_calc_flash ();
+       mfldadvci->process_flash (advci_flash_stage_main);
        led_flash_trigger (fd, 0, 15);
-       mfldadvci->awb_apply_results ();
     if (-1 == ioctl (fd, VIDIOC_QBUF, buffer)) {
       cam_driver_dbg ("%s: Error qbuf %d\n", __func__, 2);
       return CAM_ERR_SYS;
@@ -1550,7 +1566,7 @@ cam_capture_init (int fd, struct v4l2_buffer *buffer,
                  struct cam_capture_settings *capture_settings)
 {
   int i;
-
+  gboolean need_assist = FALSE;
   mfld_driver.mmap = capture_settings->mmap;
   mfld_driver.ae_enabled = capture_settings->ae;
   mfld_driver.af_enabled = capture_settings->af;
@@ -1569,8 +1585,8 @@ cam_capture_init (int fd, struct v4l2_buffer *buffer,
     mfld_driver.start_still_af = 0;
     mfld_driver.still_af_count = 1;
     mfld_driver.af_start_time = mfld_driver.timestamp;
-
-    if (mfldadvci->af_assist_light_needed()) {
+    mfldadvci->af_assist_light_needed(&need_assist);
+    if (need_assist) {
        mfld_driver.enable_torch = TRUE;
        cam_driver_set_torch(fd, TRUE);
     }
@@ -1611,7 +1627,6 @@ cam_dis_dvs_processing (struct atomisp_dis_vector *vectors, advci_frame_t *bufs,
 
   cam_driver_dbg ("Begin cam_dis_get_statices\n");
   if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) {
-    mfldadvci->dis_read_statistics ();        //read_dis_stats_from_xmem();
 
     cam_driver_dbg ("Begin cam_dis_still_process\n");
 
@@ -1623,7 +1638,7 @@ cam_dis_dvs_processing (struct atomisp_dis_vector *vectors, advci_frame_t *bufs,
     // mfldadvci->dis_process (dvs_vector);       /* dis_vector only valid in video mode */
 
     if (dis_enabled) {
-      mfldadvci->dis_calc_still (&vectors[frame_cnt], frame_cnt);
+      // mfldadvci->dis_calc_still (&vectors[frame_cnt], frame_cnt);
       cam_copy_v4l2buf_to_user (&bufs[frame_cnt], buffer);
     }
 
@@ -1632,6 +1647,33 @@ cam_dis_dvs_processing (struct atomisp_dis_vector *vectors, advci_frame_t *bufs,
   }
 }
 
+static gboolean cam_af_is_complete(void)
+{
+  cam_driver_dbg("%s:%d\n", __func__, __LINE__);
+
+  advci_af_status status;
+  gboolean completed = FALSE;
+
+  status = mfldadvci->AfGetStillAfStatus();
+
+  if (status == advci_af_status_error) {
+    cam_driver_dbg("==== still AF failed \n");
+    completed = TRUE;
+  }
+   else if (status == advci_af_status_success) {
+    cam_driver_dbg("==== still AF success\n");
+    completed = TRUE;
+  } else if (status == advci_af_status_cancelled) {
+    cam_driver_dbg("==== still AF cancelled \n");
+    completed = TRUE;
+  }
+  else {
+    cam_driver_dbg("==== still AF continue %d \n", status);
+  }
+
+  return completed;
+}
+
 static cam_err_t
 run_normal_sequence(int fd, struct v4l2_buffer *buffer)
 {
@@ -1687,7 +1729,7 @@ run_normal_sequence(int fd, struct v4l2_buffer *buffer)
     gboolean complete = TRUE;           /* AF status */
 
     if (mfld_driver.af_enabled)
-      complete = mfldadvci->af_is_complete ();
+      complete = cam_af_is_complete();
 
    if (complete ||
        (calculate_timediff(&mfld_driver.af_start_time, &mfld_driver.timestamp)
@@ -1698,11 +1740,9 @@ run_normal_sequence(int fd, struct v4l2_buffer *buffer)
         if (complete == 0) {
           mfldadvci->af_stop();
           cam_driver_dbg ("AF: Focus Failed %s\n", __func__);
-          if(mfld_driver.enable_torch) {
-            mfld_driver.enable_torch= FALSE;
-            cam_driver_set_torch(fd, FALSE);
-          }
         }
+        mfld_driver.enable_torch= FALSE;
+        cam_driver_set_torch(fd, FALSE);
       }
       else
         mfld_driver.still_af_count++;
@@ -1770,8 +1810,7 @@ cam_capture_frames (int fd, struct v4l2_buffer *buffer,
 
 cam_err_t get_ae_windows_num(int fd, int * num)
 {
-  if(ci_adv_Success != mfldadvci->AeGetWindowsNum(num))
-    return CAM_ERR_3A;
+  *num = 1;
 
   return CAM_ERR_NONE;
 }
@@ -1806,7 +1845,7 @@ cam_err_t get_af_status(int fd, unsigned * status)
   advci_af_status st;
 
 
-  mfldadvci->AfGetStillAfStatus(&st);
+  st = mfldadvci->AfGetStillAfStatus();
 
   if(advci_af_status_success == st)
     *status = 1;
@@ -1879,17 +1918,10 @@ cam_err_t get_ae_manual_shutter(int fd, int * time)
   return CAM_ERR_NONE;
 }
 
-cam_err_t get_awb_data(int fd, unsigned * num_p, unsigned * avg_r,
-                        unsigned * avg_gr, unsigned * avg_b, unsigned * avg_gb)
-{
-  mfldadvci->Awbdata(num_p, avg_r, avg_gr, avg_b, avg_gb);
-  return CAM_ERR_NONE;
-}
-
 cam_err_t get_ae_manual_aperture(int fd, int *aperture)
 {
 
-  mfldadvci->AeGetManualAperture(aperture);
+  *aperture = mfldadvci->AeGetManualAperture();
 
   return CAM_ERR_NONE;
 }
@@ -1899,7 +1931,7 @@ cam_err_t get_ae_flash_mode(int fd, cam_flash_mode_t *mode)
   cam_flash_mode_t ci_mode;
 
   if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) {
-    mfldadvci->AeGetFlashMode(&ci_mode);
+    ci_mode = mfldadvci->AeGetFlashMode();
     switch(ci_mode)
     {
       case advci_ae_flash_mode_auto:
@@ -1961,13 +1993,6 @@ cam_err_t get_awb_manual_color_temperature(int fd, int *ctemp)
   return CAM_ERR_NONE;
 }
 
-void get_awb_matrix(int fd, int msqWbGain[3],
-                                    int msqCcMtrx[9], unsigned short *shift)
-{
-//int msqWbGain[3]; /* White balance Gain [0]:R [1]:G [2]:B */
-//int msqCcMtrx[9]; /* Color adjustment Matrix */
-  mfldadvci->Awbmatrix(msqWbGain, msqCcMtrx, shift);
-}
 
 struct sh_css_grid_info_maker_note {
        /* 3A statistics grid: */
@@ -1982,14 +2007,6 @@ struct sh_css_grid_info_maker_note {
        unsigned int dis_ver_coef_num;
 };
 
-void get_grid_info(int fd, unsigned * width, unsigned * height)
-{
-  struct sh_css_grid_info_maker_note grid;
-
-  mfldadvci->GetGridInfo(&grid);
-  *width = grid.s3a_width;
-  *height = grid.s3a_height;
-}
 
 gboolean cam_is_flash_used()
 {
index c555cbf..22d5d0e 100644 (file)
@@ -290,10 +290,7 @@ void get_af_result(int fd, unsigned * result);
 cam_err_t get_af_status(int fd, unsigned * status);
 cam_err_t get_exp_mode(int fd, cam_scene_mode_t *expmode);
 void get_ae_bias(int fd, int * bias);
-void get_grid_info(int fd, unsigned * width, unsigned * height);
 cam_err_t get_ae_manual_shutter(int fd, int * time);
-cam_err_t get_awb_data(int fd, unsigned * num_p, unsigned * avg_r,
-                        unsigned * avg_gr, unsigned * avg_b, unsigned * avg_gb);
 cam_err_t get_ae_manual_aperture(int fd, int *aperture);
 cam_err_t get_ae_flash_mode(int fd, cam_flash_mode_t *mode);
 cam_err_t set_ae_flash_mode(int fd, cam_flash_mode_t mode);
@@ -302,8 +299,6 @@ int cam_find_item_new (const int table[][2], const int item, int reverse);
 
 cam_err_t get_awb_manual_color_temperature(int fd, int *ctemp);
 cam_err_t get_wb_mode (int *wb_mode);
-void get_awb_matrix(int fd, int msqWbGain[3],
-                                    int msqCcMtrx[9], unsigned short *shift);
 gboolean cam_is_flash_used(void);
 
 #endif
index 511c309..a8e4f4f 100644 (file)
@@ -987,6 +987,7 @@ gst_v4l2camsrc_mfldadvci_wrapper_load (GstMFLDV4l2CamSrc * v4l2camsrc)
   mfldadvci = g_new0 (GstV4l2MFLDAdvCI, 1);
   wrapper_default_link_functions_init(mfldadvci);
 
+#ifdef USE_DYNAMIC_3A
   if (g_module_supported ()) {
     gchar *module_file;
     module_file = g_module_build_path (MFLD_ADVCI_PATH, "libmfldadvci.so.0");
@@ -1002,17 +1003,10 @@ gst_v4l2camsrc_mfldadvci_wrapper_load (GstMFLDV4l2CamSrc * v4l2camsrc)
     }
     GST_DEBUG_OBJECT(v4l2camsrc, "Camera Source Interface version is %d\n", LIBMFLDADVCI_VERSION);
     if (v4l2camsrc->module) {
-#ifdef USE_STATIC_3A
-      lib_3a_link_functions_init(mfldadvci);
-#endif /* USE_STATIC_3A */
-     /* for dynamic func initilisation
-      * ret = g_module_symbol (v4l2camsrc->module, "libmfldadvci_init",
-      * (gpointer) & init_function);
-      *  if (ret)
-      * advci_version = init_function (mfldadvci);
-      */
+      lib_3a_link_functions_init(mfldadvci, v4l2camsrc->module);
     }
   }
+#endif /* USE_DYNAMIC_3A */
 
   return mfldadvci;
 }
@@ -1324,7 +1318,8 @@ gst_v4l2camsrc_set_property (GObject * object,
                      v4l2camsrc->af_window.y_top);
 
 
-      v4l2camsrc->mfldadvci->AfSetWindow ((advci_window *) (&(v4l2camsrc->af_window)));
+      v4l2camsrc->mfldadvci->AfSetWindows (1, (advci_window *) (&(v4l2camsrc->af_window)));
+      v4l2camsrc->mfldadvci->AeSetWindow((advci_window *) (&(v4l2camsrc->af_window)));
 
       gst_structure_free (af_window_param);
       g_free (ctmp);
@@ -1711,7 +1706,8 @@ gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window win
 
   if (v4l2camsrc->is_active) {
     g_mutex_lock (v4l2camsrc->device_mutex);
-    v4l2camsrc->mfldadvci->AfSetWindow ((advci_window *) (&(v4l2camsrc->af_window)));
+    v4l2camsrc->mfldadvci->AfSetWindows (1, (advci_window *) (&(v4l2camsrc->af_window)));
+    v4l2camsrc->mfldadvci->AeSetWindow((advci_window *) (&(v4l2camsrc->af_window)));
     g_mutex_unlock (v4l2camsrc->device_mutex);
   }
 
index 35a3d14..4183012 100644 (file)
@@ -47,7 +47,7 @@
 
 #include "v4l2camsrc_calls.h"
 #include <atomisp_v4l2.h>
-#include <linux/atomisp.h>
+#include <atomisp.h>
 #include <mfld_cam.h>
 GST_DEBUG_CATEGORY_EXTERN (gst_v4l2camsrc_debug);
 #define GST_CAT_DEFAULT gst_v4l2camsrc_debug
index 21c6c8e..0b9c93d 100644 (file)
@@ -1,3 +1,6 @@
+* Wed Jan 09 2013 Marko Ollonen <marko.ollonen@ixonos.com> submit/tizen_2.0/20130109.153255@4dec286
+- use 3a lib dynamically linked,TZSP-2927.
+
 * Wed Jan 09 2013 Marko Ollonen <marko.ollonen@ixonos.com> submit/trunk/20130109.131903@db0f587
 - add mutex for capture viewfinder request, TZSP-4698.
 
index 0411089..4a28e05 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mfldv4l2camsrc
 Summary:    Camera source component for Intel Medfield ISP
-Version:    0.49
+Version:    0.50
 Release:    1
 Group:      Applications/Multimedia
 License:    LGPLv2+
@@ -10,9 +10,6 @@ BuildRequires:  gst-plugins-base-devel
 BuildRequires:  pkgconfig(gstreamer-0.10)
 BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  gst-plugins-bad-devel
-BuildRequires:  kernel-mfld-blackbay-devel
-BuildRequires:  kernel-mfld-blackbay
-BuildRequires:  libmfldadvci-bb-bin-devel
 
 %description
 Camera source component for Intel Medfield ISP.
@@ -21,9 +18,8 @@ Camera source component for Intel Medfield ISP.
 %setup -q
 
 %build
-ln -sf /usr/src/kernels/*mfld-blackbay/include/ %{_builddir}/kernel_headers
 ./autogen.sh
-CFLAGS="$CFLAGS -DSTDC99 -D__user= -I%{_builddir}/kernel_headers" %configure  --disable-static \
+CFLAGS="$CFLAGS -DSTDC99 -D__user= -DUSE_DYNAMIC_3A" %configure  --disable-static \
        --disable-nls \
        --enable-swscale \
        --prefix=%{_prefix} \