From 28db9ba04d1e49bbfeeda5f465e6fbcf76117484 Mon Sep 17 00:00:00 2001 From: Marko Ollonen Date: Thu, 22 Nov 2012 12:09:53 +0200 Subject: [PATCH] wrapper for 3a added. Change-Id: I9546c575f6934e8bd228d8a57a2d3e877ce87d3c --- gst-libs/atomisphal/gstv4l2mfldadvci.c | 392 +++++++++++++++++++++++++++++++++ gst-libs/atomisphal/gstv4l2mfldadvci.h | 1 + gst/mfldv4l2cam/gstv4l2camsrc.c | 34 ++- packaging/mfldv4l2camsrc.changes | 4 + packaging/mfldv4l2camsrc.spec | 2 +- 5 files changed, 431 insertions(+), 2 deletions(-) diff --git a/gst-libs/atomisphal/gstv4l2mfldadvci.c b/gst-libs/atomisphal/gstv4l2mfldadvci.c index a6349c3..f7e6a16 100644 --- a/gst-libs/atomisphal/gstv4l2mfldadvci.c +++ b/gst-libs/atomisphal/gstv4l2mfldadvci.c @@ -47,8 +47,313 @@ cam_lib_3a_dbg (const char *format, ...) } } +static void wrapper_default_void (void) +{ + return; +} + +static void wrapper_default_int (int a) +{ + return; +} + +static int wrapper_default_int_void (void) +{ + return 0; +} + +static void wrapper_default_ae (void) +{ + return; +} + +static void wrapper_default_init(void) +{ +} + +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_do_redeye_removal (ia_frame *ia_frame) +{ +} + +static void +wrapper_default_still_compose (ia_frame *com_buf, + ia_frame bufs[], + int frame_dis, + struct atomisp_dis_vector vectors[]) +{ +} + +static void +wrapper_default_AeSetFlickerMode(ia_3a_ae_flicker_mode mode) +{ +} + +static void +wrapper_default_AeGetFlickerMode(ia_3a_ae_flicker_mode *mode) +{ +} + +static void +wrapper_default_AeSetExposureProgram(ia_3a_ae_exposure_program program) +{ +} + +static void +wrapper_default_AeGetExposureProgram(ia_3a_ae_exposure_program *program) +{ +} + +static void wrapper_default_AfSetMode(ia_3a_af_mode mode) +{ +} + +static void wrapper_default_AfGetMode(ia_3a_af_mode *mode) +{ +} + +static void wrapper_default_AfSetRange(ia_3a_af_range range) +{ +} + +static void wrapper_default_AfGetRange(ia_3a_af_range *range) +{ +} + +static void wrapper_default_AwbSetMode(ia_3a_awb_mode mode) +{ +} + +static void wrapper_default_AwbGetMode(ia_3a_awb_mode *mode) +{ +} + +static void wrapper_default_AwbSetLightSource(ia_3a_awb_light_source ls) +{ +} + +static void +wrapper_default_AwbGetLightSource(ia_3a_awb_light_source *ls) +{ +} + +static ci_adv_Err +wrapper_default_int_int (int i) +{ +} + +static ci_adv_Err +wrapper_default_intp (int *p) +{ +} + +static int +wrapper_default_isp_set_fd (int fd, const char *sensor_id) +{ + return SENSOR_TYPE_SOC; +} + +static void +wrapper_default_switch_mode (ia_3a_isp_mode mode, float frame_rate) +{ +} + +static ci_adv_Err +wrapper_default_AeGetWindowsNum(int *num) +{ + return ci_adv_Success; +} + +static void wrapper_default_AwbVersion(int * major, int * minor) +{ +} + +static void wrapper_default_AeVersion(int * major, int * minor) +{ +} + +static void wrapper_default_AfVersion(int * major, int * minor) +{ +} + +static void wrapper_default_AfGetStillAfStatus(ia_3a_af_status *status) +{ +} + +static bool wrapper_default_af_is_complete(void) +{ + return TRUE; +} + +static void wrapper_default_RerVersion(int * major, int * minor) +{ + return; +} + +static ci_adv_Err wrapper_default_AeGetManualShutter(int *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 void wrapper_default_AeGetFlashMode(ia_3a_ae_flash_mode *mode) +{ +} + +static void wrapper_default_AeSetFlashMode(ia_3a_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 void +wrapper_default_AeSetMeteringMode(ia_3a_ae_metering_mode mode) +{ +} + +static void +wrapper_default_AeGetMeteringMode(ia_3a_ae_metering_mode *mode) +{ +} + +static void +wrapper_default_AfSetMeteringMode(ia_3a_af_metering_mode mode) +{ +} + +static void +wrapper_default_AfGetMeteringMode(ia_3a_af_metering_mode *mode) +{ +} + +static void +wrapper_default_Ae_Af_GetWindow(ia_3a_window *window) +{ + +} static void +wrapper_default_Ae_Af_SetWindow( ia_3a_window *window) +{ +} +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_AeAfAwb_process( struct timeval *frame_timestamp) +{ +} +static void wrapper_default_get_statistics( ) +{ +} + +static void wrapper_default_awb_apply_results( ) +{ +} +static void wrapper_default_AwbSetImageEffect(ia_3a_image_effect effect) +{ +} + +static void +wrapper_default_AwbGetImageEffect(ia_3a_image_effect *effect) +{ +} + +static void +wrapper_default_is_flash_needed(bool *useflash) +{ + +} + +static ci_adv_Err wrapper_default_AeSetManualIso(int sensitivity) +{ + return ci_adv_success; +} + +static ci_adv_Err wrapper_default_AeGetManualIso(int *sensitivity) +{ + return ci_adv_success; +} + +static void +wrapper_default_GetMakerNote(ia_3a_mknote_mode mknMode, ia_3a_mknote *note) +{ +} + +static void +wrapper_default_AddMakerNoteRecord(ia_3a_mknote_field_type mkn_format_id, + ia_3a_mknote_field_name mkn_name_id, + const void *record, + unsigned short record_size) +{ + +} + +static void +wrapper_default_PutMakerNote(ia_3a_mknote *mknData) +{ + +} + +static void +wrapper_default_ResetMakerNote(void) +{ +} + +/*------------------------------------------------------------------------------------------------*/ +#ifdef USE_STATIC_3A +static void lib_3a_void (void) { return; @@ -662,3 +967,90 @@ lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci) mfldadvci->PutMakerNote = lib_3a_PutMakerNote; mfldadvci->ResetMakerNote = lib_3a_ResetMakerNote; } +#endif /* USE_STATIC_3A */ +void +wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci) +{ + + mfldadvci->initialized = 0; + mfldadvci->init = wrapper_default_init; + mfldadvci->uninit = wrapper_default_uninit; + mfldadvci->isp_set_fd = wrapper_default_isp_set_fd; + mfldadvci->mode_spec_init = wrapper_default_int_void; /* TODO */ + 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->ae_is_flash_needed = wrapper_default_is_flash_needed; + + mfldadvci->ae_apply_results = wrapper_default_ae; + + 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; + mfldadvci->AeGetBias = wrapper_default_intp; + mfldadvci->AeSetFlickerMode = wrapper_default_AeSetFlickerMode; + mfldadvci->AeGetFlickerMode = wrapper_default_AeGetFlickerMode; + mfldadvci->AeSetExposureProgram = wrapper_default_AeSetExposureProgram; + mfldadvci->AeGetExposureProgram = wrapper_default_AeGetExposureProgram; + 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->AeSetIso = wrapper_default_AeSetManualIso; + mfldadvci->AeGetIso = wrapper_default_AeGetManualIso; + + + mfldadvci->AfSetMode = wrapper_default_AfSetMode; + mfldadvci->AfGetMode = wrapper_default_AfGetMode; + mfldadvci->AfSetRange = wrapper_default_AfSetRange; + mfldadvci->AfGetRange = wrapper_default_AfGetRange; + 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->AwbSetMode = wrapper_default_AwbSetMode; + mfldadvci->AwbGetMode = wrapper_default_AwbGetMode; + mfldadvci->AwbSetLightSource = wrapper_default_AwbSetLightSource; + mfldadvci->AwbGetLightSource = wrapper_default_AwbGetLightSource; + mfldadvci->AwbSetImageEffect = wrapper_default_AwbSetImageEffect; + mfldadvci->AwbGetImageEffect = wrapper_default_AwbGetImageEffect; + + mfldadvci->AeGetWindowsNum = wrapper_default_AeGetWindowsNum; + mfldadvci->AwbVersion = wrapper_default_AwbVersion; + mfldadvci->AeVersion = wrapper_default_AeVersion; + mfldadvci->AfVersion = wrapper_default_AfVersion; + 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->AddMakerNoteRecord = wrapper_default_AddMakerNoteRecord; + mfldadvci->PutMakerNote = wrapper_default_PutMakerNote; + mfldadvci->ResetMakerNote = wrapper_default_ResetMakerNote; +} diff --git a/gst-libs/atomisphal/gstv4l2mfldadvci.h b/gst-libs/atomisphal/gstv4l2mfldadvci.h index 08b4728..ea14d20 100644 --- a/gst-libs/atomisphal/gstv4l2mfldadvci.h +++ b/gst-libs/atomisphal/gstv4l2mfldadvci.h @@ -179,5 +179,6 @@ struct _GstV4l2MFLDAdvCI void lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci); +void wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci); #endif diff --git a/gst/mfldv4l2cam/gstv4l2camsrc.c b/gst/mfldv4l2cam/gstv4l2camsrc.c index 30d9e29..1cd35f0 100644 --- a/gst/mfldv4l2cam/gstv4l2camsrc.c +++ b/gst/mfldv4l2cam/gstv4l2camsrc.c @@ -981,7 +981,35 @@ gst_v4l2camsrc_mfldadvci_wrapper_load (GstMFLDV4l2CamSrc * v4l2camsrc) GstV4l2MFLDAdvCI *mfldadvci; mfldadvci = g_new0 (GstV4l2MFLDAdvCI, 1); - lib_3a_link_functions_init(mfldadvci); + wrapper_default_link_functions_init(mfldadvci); + + if (g_module_supported ()) { + gchar *module_file; + module_file = g_module_build_path (MFLD_ADVCI_PATH, "libmfldadvci.so.0"); + GST_DEBUG_OBJECT (v4l2camsrc, "Loading %s", module_file); + + v4l2camsrc->module = g_module_open (module_file, G_MODULE_BIND_LOCAL); + + /* Open again if libmfldadvci.so.0 doesn't exist */ + if (!v4l2camsrc->module) { + module_file = g_module_build_path (MFLD_ADVCI_PATH, "libmfldadvci.so"); + v4l2camsrc->module = g_module_open (module_file, G_MODULE_BIND_LOCAL); + GST_DEBUG_OBJECT (v4l2camsrc, "Loading %s", module_file); + } + 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); + */ + } + } + return mfldadvci; } @@ -993,7 +1021,11 @@ void gst_v4l2camsrc_mfldadvci_wrapper_unload (GstMFLDV4l2CamSrc * v4l2camsrc) { GstV4l2MFLDAdvCI *mfldadvci = v4l2camsrc->mfldadvci; + g_module_close (v4l2camsrc->module); + v4l2camsrc->module = NULL; + g_free (mfldadvci); + } diff --git a/packaging/mfldv4l2camsrc.changes b/packaging/mfldv4l2camsrc.changes index b168c17..c24061a 100644 --- a/packaging/mfldv4l2camsrc.changes +++ b/packaging/mfldv4l2camsrc.changes @@ -1,3 +1,7 @@ +* Thu Nov 22 2012 Marko Ollonen accepted/trunk/20121120.150732@36839a7 +- wrapper for 3a added. +- Makernote cleanup. + * Thu Nov 22 2012 Jussi Saavalainen accepted/trunk/20121112.215039@58b3c6d - Don't overwrite different stillshot fourCC in capture start diff --git a/packaging/mfldv4l2camsrc.spec b/packaging/mfldv4l2camsrc.spec index 42ea365..37492ac 100644 --- a/packaging/mfldv4l2camsrc.spec +++ b/packaging/mfldv4l2camsrc.spec @@ -30,7 +30,7 @@ Camera source component for Intel Medfield ISP. %build ln -sf /usr/src/kernels/*mfld-blackbay/include/ %{_builddir}/kernel_headers ./autogen.sh -CFLAGS="-DSTDC99 -D__user= -I/usr/include/libmfldadvci/ -I%{_builddir}/kernel_headers" %configure --disable-static \ +CFLAGS="-DSTDC99 -D__user= -DUSE_STATIC_3A -I/usr/include/libmfldadvci/ -I%{_builddir}/kernel_headers" %configure --disable-static \ --disable-nls \ --enable-swscale \ --prefix=%{_prefix} \ -- 2.7.4