From f21b9306a7893017b9f7e6b95001da9abade30f7 Mon Sep 17 00:00:00 2001 From: Umang Jain Date: Fri, 21 May 2021 10:27:24 +0530 Subject: include: Link to ia_imaging library and import headers libia_imaging is provided by the ChromeOS system, however the headers aren't installed at the system's $includedir locations. We need to carry them in-tree, to be able to use them. Signed-off-by: Umang Jain --- include/ia_imaging/ia_dvs_2.h | 454 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 454 insertions(+) create mode 100644 include/ia_imaging/ia_dvs_2.h (limited to 'include/ia_imaging/ia_dvs_2.h') diff --git a/include/ia_imaging/ia_dvs_2.h b/include/ia_imaging/ia_dvs_2.h new file mode 100644 index 0000000..ef9b5ec --- /dev/null +++ b/include/ia_imaging/ia_dvs_2.h @@ -0,0 +1,454 @@ +/* + * Copyright (C) 2015 - 2017 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** @file ia_dvs2.h + * IA_DVS2. This provides access to the DVS2 Host Library. + */ +#ifndef _IA_DVS2_H_ +#define _IA_DVS2_H_ + +#include +#include +#include "ia_dvs2_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** DVS2 State. + * Host code access to the DVS2 api with this. + */ +typedef struct t_dvs_facade ia_dvs2_state; + +/** @brief Get the DVS2 version. + * + * @param[out] version text: version + * @return 0 for no error, others for error. + * + * This function provides the version infomation of DVS2. It is allowed to call this + * function at anytime include before initialization of DVS2 library. + */ +LIBEXPORT ia_err +dvs_get_version(const char **version); + +/** @brief Initialize the DVS2 module. + * + * @param[out] dvs2_state dvs2 state. + * This is a pointer to a pointer to a module. + * @param[in] log_setup log file setups. + * This is a pointer to a structure which contains + * log settings. + * @param[in] debug_env IA Imaging environment. + * This is a pointer to a structure which contains + * IA Imaging environment. + * @return 0 for no error, others for error. + * + * This function initializes the DVS2 module. This allocates and initializes + * internal data structures. This function must always be called before any + * other dvs2 function except dvs2_get_version is called. + */ +LIBEXPORT ia_err +dvs_init(ia_dvs2_state **dvs2_state, + const ia_binary_data *a_aiq_tuning_binary, + const ia_cmc_t *cmc, + const ia_dvs2_log_setup *log_setup, + const ia_env *debug_env); + +/** @brief Configure the DVS2 module. + * + * @param[in] dvs2_state dvs2 state. + * @param[in] support_config support functionality configuration + * @param[in] gdc_config gdc configuration + * @param[in] characteristics dvs2 characteristics. + * @param[in] digital_zoom_ratio digital zoom ratio. + * @param[in] bd_params use binary dump. + * If not needed binary dump, then set this to NULL. + * @return 0 for no error, others for error. + * + * This function configures the DVS2 module. This allocates and initializes + * internal data structures. This function must always be called after dvs2_init + * and before any other dvs2 function is called. + */ +LIBEXPORT ia_err +dvs_config(ia_dvs2_state *dvs2_state, + const ia_dvs2_configuration *config, + float digital_zoom_ratio, + ia_dvs2_binary_dump_params *bd_params); + +/** @brief Deinitialize the DVS module. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @return 0 for no error, others for error. + * + * This function deinitilizes the DVS2 module. This frees the calocated memory. + */ +LIBEXPORT ia_err +dvs_deinit(ia_dvs2_state *dvs2_state); + +/** @brief allocate the DVS2 coefficients. + * + * @param[in] grid grid info for coefficients. + * @param[out] dvs_coefs Pointer to Pointer to hor/ver coefficients. + * @return 0 for no error, others for error. + * + * This function allocates the memory of dvs2 coefficients. + * allocates the structure: ia_css_dvs2_coefficients, and set the pointer into dvs_coefs. + * *dvs_coefs->grid field is filled by input. + * *dvs_coefs->hor_coefs, *dvs_coefs->ver_coefs are outputs. + * Each member of *dvs_coefs->hor_coefs, *dvs_coefs->ver_coefs are set to allocated memory. + */ +LIBEXPORT ia_err +dvs_allocate_coefficients(const struct atomisp_dvs_grid_info *grid, struct atomisp_dis_coefficients **dvs_coefs); + +/** @brief Free the DVS2 coefficients. + * + * @param[in] dvs_coefs Pointer to hor/ver coefficients. + * @return 0 for no error, others for error. + * + * This function frees the memory of dvs2 coefficients. + * Each member of vs_coefs->hor_coefs, dvs_coefs->ver_coefs are freed also. + */ +LIBEXPORT ia_err +dvs_free_coefficients(struct atomisp_dis_coefficients *dvs_coefs); + +/** @brief Get the DVS2 coefficients. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[out] dvs_coefs Pointer to hor/ver coefficients + * @return 0 for no error, others for error. + * + * This function gets the dvs2 coefficients + */ +LIBEXPORT ia_err +dvs_get_coefficients(const ia_dvs2_state *dvs2_state, struct atomisp_dis_coefficients *dvs_coefs); + +/** @brief Allocate statistics buffer. + * + * @param[in] grid grid info for statistics. + * @param[out] statistics Pointer to pointer to Grid statistics from ISP + * @return 0 for no error, others for error. + * + * Returns allocated DVS statistics. + */ +LIBEXPORT ia_err +dvs_allocate_statistics(const struct atomisp_dvs_grid_info *grid, struct atomisp_dvs2_statistics **statistics); + +/** @brief Free statistics buffer. + * + * @param[in] statistics Pointer to Grid statistics from ISP + * @return 0 for no error, others for error. + * + * Free the statistics buffer. + */ +LIBEXPORT ia_err +dvs_free_statistics(struct atomisp_dvs2_statistics *statistics); + +/** @brief Set the DVS2 statistics. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] statistics Pointer to Grid statistics from ISP + * @return 0 for no error, others for error. + * + * This function receives the inner product from the ISP. + */ +LIBEXPORT ia_err +dvs_set_statistics(ia_dvs2_state *dvs2_state, const struct atomisp_dvs2_statistics *statistics); + +/** @brief Execute DVS2 main process. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @return 0 for no error, others for error. + * + * This function processes the DVS2 main functionality. This generates a + * GDC morphing table. + */ +LIBEXPORT ia_err +dvs_execute(ia_dvs2_state *dvs2_state); + +/** @brief allocate the DVS2 morphing table. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[out] morph_table Pointer to Pointer to morphing table. + * @return 0 for no error, others for error. + * + * This function allocates the memory of dvs2 morphing table. + * This allocates the struct atomisp_dvs_6axis_config itself, and the members in the structure. + */ +LIBEXPORT ia_err +dvs_allocate_morph_table(ia_dvs2_state *dvs2Lib, struct atomisp_dvs_6axis_config **morph_table); + +/** @brief Free the DVS2 morphing table. + * + * @param[in] morph_table Pointer to morphing table. + * @return 0 for no error, others for error. + * + * This function frees the memory of dvs2 morphing table. + * Each allocated member in morph_table, and morph_table itself are freed. + */ +LIBEXPORT ia_err +dvs_free_morph_table(struct atomisp_dvs_6axis_config *morph_table); + +/** @brief Get the GDC morphing table. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[out] morph_table Pointer to the GDC morph table + * @return 0 for no error, others for error. + * + * This function gets the calculated GDC morphing table. + */ +LIBEXPORT ia_err +dvs_get_morph_table(ia_dvs2_state *dvs2_state, + struct atomisp_dvs_6axis_config *morph_table); + +/** @brief Output log of the GDC morphing table. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] log_path log file path. + * This is a pointer to a log file path. + * @return 0 for no error, others for error. + * + * This function outputs the calculated GDC morphing table log. + */ +LIBEXPORT ia_err +dvs_morph_table_log(ia_dvs2_state *dvs2_state, + const char *log_path); + +/** @brief Set no blanking ratio. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] nonblanking_ratio non blanking ratio. + * Value 0.0 means no rolling shutter correction. + * @return 0 for no error, others for error. + * + * This function specifies the rolling shutter correction effect. + */ +LIBEXPORT ia_err +dvs_set_non_blank_ratio(ia_dvs2_state *dvs2_state, float nonblanking_ratio); + +/** @brief Set the local motion coring threshold. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] min_local_motion local motion coring threshold. + * @return 0 for no error, others for error. + * + * This function specifies the local motion coring threshold. + */ +LIBEXPORT ia_err +dvs_set_min_local_motion(ia_dvs2_state *dvs2_state, float min_local_motion); + +/** @brief Set Cut off frequency (for video only). + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] cutoff_frequency cut off frequency. + * @return 0 for no error, others for error. + * + * This function specifies the cut off frequency. + */ +LIBEXPORT ia_err +dvs_set_cut_off_frequency(ia_dvs2_state *dvs2_state, float *cutoff_frequency); + +/** @brief Set digital zoom magnitude. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] magnitude digital zoom magnitude + * @return 0 for no error, others for error. + * + * This function specifies the digital zoom magnitude + */ +LIBEXPORT ia_err +dvs_set_digital_zoom_magnitude(ia_dvs2_state *dvs2_state, float magnitude); + +/* */ +/** @brief Set Distortion Coefficient. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] distortion distortion coefficients. + * @return 0 for no error, others for error. + * + * This function specifies the distortion coefficient. + */ +LIBEXPORT ia_err +dvs_set_distortion_coeff(ia_dvs2_state *dvs2_state, const ia_dvs2_distortion_coefs *distortion); + +/** @brief Set the wavelength of detector vector in BQs. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] wave_length wave length of detector vector in BQs. + * recommended: 1.0*AreaSize for DVS + * 0.5*AreaSize for DIS + * @return 0 for no error, others for error. + * + * This function specifies the avelength of detector vector. + * This re-calculates the coefficients, so should call dvs2_get_coefficients() + * after this was called. + */ +LIBEXPORT ia_err +dvs_set_wave_length(ia_dvs2_state *dvs2_state, float wave_length); + +/** @brief Reset the inter_frame parameter. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @return 0 for no error, others for error. + * + * This function resets the inter_frame parameter. + */ +LIBEXPORT ia_err +dvs_reset_interframe_parameter(ia_dvs2_state *dvs2_state); + +/** @brief Get the pointer to inner product. + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[out] v_product pointer to a pointer to the virtical inner product. + * @param[out] h_product pointer to a pointer to the horizontal inner product. + * @return 0 for no error, others for error. + * + * This function provides the pointer to the inner product. + */ +LIBEXPORT ia_err +dvs_get_prod_ptr(const ia_dvs2_state *dvs2_state, float **v_product, float **h_product); + +/** @brief Set enable flag to main log module. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] enable Enable flag. + * @return 0 for no error, others for error. + * + * This function sets enable flag to main log module. + */ +LIBEXPORT ia_err +dvs_set_enable_info_log(ia_dvs2_state *dvs2_state, int enable); + +/** @brief Set enable flag to GDC log module. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] enable Enable flag. + * @return 0 for no error, others for error. + * + * This function sets enable flag to GDC log module. + */ +LIBEXPORT ia_err +dvs_set_enable_gdc_log(ia_dvs2_state *dvs2_state, int enable); + +/** @brief Set enable flag to FP log module. + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[in] enable Enable flag. + * @return 0 for no error, others for error. + * + * This function sets enable flag to FP log module. + */ +LIBEXPORT ia_err +dvs_set_enable_fp_log(ia_dvs2_state *dvs2_state, int enable); + +/** @brief Check gdc constraints + * + * @param[in] dvs2_state dvs2 state. + * This is a pointer to a module. + * @param[out] valid 1 for gdc setup is valid, 0 for invalid. + * @param[in] gdc_hw_config GDC hardware configuration info. + * @return 0 for no error, others for error. + * + * This function checks whether gdc setup is valid or not. + */ +LIBEXPORT ia_err +dvs_check_gdc_constraints(ia_dvs2_state *dvs2_state, int *valid, ia_dvs2_gdc_hw_configuration *gdc_hw_config); + +/** @brief Start dvs2 debug log. + * + * @param[in] endless true for endess mode, false for full-end mode. + * @return 0 for no error, others for error. + * + * This function sets enable to debug log. + * Endless mode dumps log into buffer circularly. + * Full-end mode dumps log into buffer by full. + * If buffer is full, stops to dump in full-end mode. + */ +LIBEXPORT ia_err +dvs_start_dbglog(bool endless); + +/** @brief Stop dvs2 debug log. + * + * @return 0 for no error, others for error. + * + * This function sets disable to debug log. + */ +LIBEXPORT ia_err +dvs_stop_dbglog(void); + +/** @brief Resets dvs2 debug log. + * + * @return 0 for no error, others for error. + * + * This function resets the buffer counter to 0 and clear the buffer (fill by 0). + * In full-end mode, log is activated again. + */ +LIBEXPORT ia_err +dvs_reset_dbglog(void); + +/** @brief Denitiaize dvs2 debug log. + * + * @return 0 for no error, others for error. + * + * This function deinitializes dvs2 debug log. + */ +LIBEXPORT ia_err +dvs_deinit_dbglog(void); + +/** @brief Set enable flag to item of binary dump. + * + * @param[in] item binary dump item. + * @param[in] enable Enable flag. + * @return 0 for no error, others for error. + * + * This function sets enable flag to item of binary dump. + */ +LIBEXPORT ia_err +dvs_set_enable_dbglog_item(ia_dvs2_binary_dump_item item, bool enable); + +/** @brief Writes binary dump data into the file. + * + * @param[in] fp file pointer to be writen log. + * @return 0 for no error, others for error. + * + * This function writes log into the file. + */ +LIBEXPORT ia_err +dvs_fwrite_dbglog(FILE *fp); + +LIBEXPORT ia_err +dvs_dump_prods(ia_dvs2_state *dvs2_state, const struct atomisp_dvs2_statistics *dvs_stats); + +#ifdef __cplusplus +} +#endif + +#endif /* _IA_DVS2_H_ */ -- cgit v1.2.1