blob: a09a61bfeb9dcb3409efd375b4c3336a468eff36 [file] [log] [blame]
/*
* 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 <stdint.h>
#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_ */