summaryrefslogtreecommitdiff
path: root/include/ia_imaging/ia_dvs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ia_imaging/ia_dvs.h')
-rw-r--r--include/ia_imaging/ia_dvs.h272
1 files changed, 272 insertions, 0 deletions
diff --git a/include/ia_imaging/ia_dvs.h b/include/ia_imaging/ia_dvs.h
new file mode 100644
index 0000000..a09a61b
--- /dev/null
+++ b/include/ia_imaging/ia_dvs.h
@@ -0,0 +1,272 @@
+/*
+ * 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_ */