/* * 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. */ /*! * \mainpage IA DVS documentation * * \section general General info * * Digital video stabilization API. * */ /*! * \file ia_dvs.h * \brief Definitions and declarations of Intel DVS library. */ #ifndef _IA_DVS_H_ #define _IA_DVS_H_ #include #include "ia_dvs_types.h" #include "ia_aiq_types.h" #include "ia_cmc_types.h" #include "ia_aiq.h" #ifdef __cplusplus extern "C" { #endif /*! \brief Initialize the DVS module. * * \param[out] dvs_state dvs state. * This is a pointer to a pointer to a module. * \param[in] a_aiq_tuning_binary aiqb binary tuning parameter. * \param[in] cmc cmc_t parameter. * \return 0 for no error, others for error. * * This function initializes the DVS module. This allocates and initializes * internal data structures. This function must always be called before any * other ia_dvs function. */ LIBEXPORT ia_err ia_dvs_init(ia_dvs_state **dvs_state, const ia_binary_data *a_aiq_tuning_binary, const ia_cmc_t *cmc); /*! \brief Configure the DVS module. * * \param[in] dvs_state dvs state. * \param[in] config dvs configuration * \param[in] digital_zoom_ratio digital zoom ratio. * \return 0 for no error, others for error. * * This function configures the DVS module. This allocates and initializes * internal data structures. This function must always be called after ia_dvs_init * and before any other ia_dvs function is called. */ LIBEXPORT ia_err ia_dvs_config(ia_dvs_state *dvs_state, const ia_dvs_configuration *config, float digital_zoom_ratio); /*! \brief Deinitialize the DVS module. * * \param[in] dvs_state dvs state. * This is a pointer to a module. * * This function deinitilizes the DVS module. This frees the allocated memory. */ LIBEXPORT void ia_dvs_deinit(ia_dvs_state *dvs_state); /*! \brief Set the DVS statistics. * * \param[in] dvs_state dvs state. * This is a pointer to a module. * \param[in] statistics Pointer to generic DVS statistics * \param[in] ae_results Optional. Pointer to AIQ AE results. * \param[in] af_results Optional. Pointer to AIQ AF results. * \param[in] sensor_events Optional. Pointer to sensor events data which contains accelerometer, * gravity and gyroscope events. * \param[in] frame_exposure_start Frame exposure start time. Optional for image based DVS. Mandatory for gyro based DVS * \param[in] frame_readout_end Frame readout end time. Optional for image based DVS. Mandatory for gyro based DVS * \return 0 for no error, others for error. * * This function receives DVS statistics in generic format. */ LIBEXPORT ia_err ia_dvs_set_statistics(ia_dvs_state *dvs_state, const ia_dvs_statistics *statistics, const ia_aiq_ae_results *ae_results, const ia_aiq_af_results *af_results, const ia_aiq_sensor_events *sensor_events, const unsigned long long frame_exposure_start, const unsigned long long frame_readout_end); /*! \brief Execute DVS main process. * * \param[in] dvs_state dvs state. * This is a pointer to a module. * \param[in] focus_position Focus motor position in terms of those used by the sensor module. * Value 0 will use the first LDC grid from the CPF. * \return 0 for no error, others for error. * * This function processes the DVS main functionality. This generates a * lens distortion configuration and calculates global motion. */ LIBEXPORT ia_err ia_dvs_execute(ia_dvs_state *dvs_state, uint16_t focus_position); /*! \brief allocate the DVS morphing table. * * \param[in] dvs_state dvs 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 dvs morphing table. * This allocates the struct ia_dvs_morph_table itself, and the members in the structure. */ LIBEXPORT ia_err ia_dvs_allocate_morph_table(ia_dvs_state *dvs_state, ia_dvs_morph_table **morph_table); /*! \brief Free the DVS morphing table. * * \param[in] morph_table Pointer to morphing table. * \return 0 for no error, others for error. * * This function frees the memory of dvs morphing table. * Each allocated member in morph_table, and morph_table itself are freed. */ LIBEXPORT ia_err ia_dvs_free_morph_table(ia_dvs_morph_table *morph_table); /*! \brief Get the GDC morphing table. * * \param[in] dvs_state dvs 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 calculates GDC morphing table from lens distortion configuration, digital zoom and global motion. */ LIBEXPORT ia_err ia_dvs_get_morph_table(ia_dvs_state *dvs_state, ia_dvs_morph_table *morph_table); /*! \brief Set non blanking ratio. * * \param[in] dvs_state dvs_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 ia_dvs_set_non_blank_ratio(ia_dvs_state *dvs_state, float nonblanking_ratio); /*! \brief Set digital zoom magnitude. * * \param[in] dvs_state dvs 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 ia_dvs_set_digital_zoom_magnitude(ia_dvs_state *dvs_state, float magnitude); /*! * \brief Set the distortion configuration. * * This function specifies lens distortion correction grid. This will override LDC defined in CPF. * * \param[in] dvs_state dvs state. * This is a pointer to a module. * \param[in] distortion_config Distortion grid configuration. * \return 0 for no error, others for error. */ LIBEXPORT ia_err ia_dvs_set_distortion_config(ia_dvs_state *dvs_state, const ia_dvs_distortion_config *distortion_config); /*! * \brief Set digital zoom mode. * * This function specifies the digital zoom mode. * * In mode ia_dvs_zoom_mode_center ia_dvs_set_digital_zoom_magnitude() is used to control * digital zoom. Zooming is performed to the center of the image. * * In mode ia_dvs_zoom_mode_region ia_dvs_set_digital_zoom_region() is used to control * zooming position and magnitude. * * By default mode ia_dvs_zoom_mode_center is used. * * \param[in] dvs_state dvs state. * This is a pointer to a module. * \param[in] zoom_mode digital zoom mode * \return 0 for no error, others for error. */ LIBEXPORT ia_err ia_dvs_set_digital_zoom_mode(ia_dvs_state *dvs_state, ia_dvs_zoom_mode zoom_mode); /*! * \brief Set digital zoom region. * * This function specifies the digital zoom region. It requires setting * the zoom mode to ia_dvs_zoom_mode_region. * * \param[in] dvs_state dvs state. * This is a pointer to a module. * \param[in] zoom_region Rectangle which is zoomed in. * This region is cropped and scaled * to the size of the output image. * Coordinates are given in BQs. * \return 0 for no error, others for error. */ LIBEXPORT ia_err ia_dvs_set_digital_zoom_region(ia_dvs_state *dvs_state, ia_rectangle *zoom_region); /*! * \brief Set digital zoom coordinate. * * This function specifies the digital zoom coordinate. It requires setting * the zoom mode to ia_dvs_zoom_mode_coordinate. * * \param[in] dvs_state dvs state. * This is a pointer to a module. * \param[in] zoom_coordinate Coordinate which is zoomed in. * Coordinate is given in BQs. * \return 0 for no error, others for error. */ LIBEXPORT ia_err ia_dvs_set_digital_zoom_coordinate(ia_dvs_state *dvs_state, ia_coordinate *zoom_coordinate); /*! * \brief Get version. * Get version from version header. * * \return Version string. */ LIBEXPORT const char* ia_dvs_get_version(void); #ifdef __cplusplus } #endif #endif /* _IA_DVS_H_ */