summaryrefslogtreecommitdiff
path: root/include/ia_imaging/ia_exc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ia_imaging/ia_exc.h')
-rw-r--r--include/ia_imaging/ia_exc.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/include/ia_imaging/ia_exc.h b/include/ia_imaging/ia_exc.h
new file mode 100644
index 0000000..4bd453f
--- /dev/null
+++ b/include/ia_imaging/ia_exc.h
@@ -0,0 +1,189 @@
+/*
+ * 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_exc.h
+ * \brief Definitions of exposure parameters conversions between generic and sensor units.
+*/
+
+
+#ifndef IA_EXC_H_
+#define IA_EXC_H_
+
+#include "ia_types.h"
+#include "ia_aiq_types.h"
+#include "ia_cmc_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*!
+ * \brief Convert exposure time from generic units to sensor units (line & pixel values).
+ * AEC will use default formula for conversion, if not given
+ * \param[in] exposure_range Structure containing coarse and fine integration sensor register ranges. Can be set to NULL if not available.
+ * \param[in] sensor_descriptor Structure containing coarse and fine integration time limits and step size.
+ * \param[in] exposure_time_us Exposure time to convert.
+ * \param[out] coarse_integration_time Coarse (rows of integration) for rolling shutter cameras.
+ * \param[out] fine_integration_time Fine (pixels of integration remaining after coarse quantization) for rolling shutter cameras.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_exposure_time_to_sensor_units(
+ const cmc_exposure_range_t *exposure_range,
+ const ia_aiq_exposure_sensor_descriptor *sensor_descriptor,
+ const int exposure_time_us,
+ unsigned short *coarse_integration_time,
+ unsigned short *fine_integration_time);
+
+/*!
+ * \brief Convert analog gain from generic units to sensor units.
+ * Calculate analog gain code from analog gain, limiting it to the sensor specific values.
+ * \param[in] gain_conversion Structure containing analog gain to gain code conversion tables.
+ * \param[in] analog_gain Analog gain value to convert to sensor unit.
+ * \param[out] analog_gain_code Calculated analog gain code.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_analog_gain_to_sensor_units(
+ const cmc_parsed_analog_gain_conversion_t *gain_conversion,
+ const float analog_gain,
+ unsigned short *analog_gain_code);
+
+/*!
+ * \brief Converts digital gain from generic units to sensor units.
+ * AEC will use default formulae for conversion, if not given
+ * Converts digital gain value to sensor units, limiting the value according to sensor specific limits.
+ * \param[in] gain_conversion Structure containing digital gain to code mapping information.
+ * \param[in] digital_gain Digital gain in generic units.
+ * \param[out] digital_gain_code Calculated digital gain code.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_digital_gain_to_sensor_units(
+ const cmc_parsed_digital_gain_t *gain_conversion,
+ const float digital_gain,
+ unsigned short *digital_gain_code);
+
+/*!
+ * \brief Convert exposure time from sensor units to generic units.
+ * AEC will use default formula for conversion, if not given
+ * \param[in] sensor_descriptor Structure containing pixel clock frequency needed in exposure conversion.
+ * \param[in] coarse_integration_time Coarse (rows of integration) for rolling shutter cameras.
+ * \param[in] fine_integration_time Fine (pixels of integration remaining after coarse quantization) for rolling shutter cameras.
+ * \param[out] exposure_time Calculated exposure value in microseconds.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_sensor_units_to_exposure_time(
+ const ia_aiq_exposure_sensor_descriptor *sensor_descriptor,
+ const unsigned short coarse_integration_time,
+ const unsigned short fine_integration_time,
+ int *exposure_time);
+
+/*!
+ * \brief Convert analog gain from sensor units to generic units.
+ * Using the sensor characteristics info, calculate analog gain from sensor register values.
+ * \param[in] gain_conversion Structure containing analog gain to gain code conversion tables.
+ * \param[in] gain_code Analog gain code in sensor specific units.
+ * \param[out] analog_gain Calculated analog gain.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_sensor_units_to_analog_gain(
+ const cmc_parsed_analog_gain_conversion_t *gain_conversion,
+ const unsigned short gain_code,
+ float *analog_gain);
+
+/*!
+ * \brief Converts digital gain from sensor units to generic units.
+ * AEC will use default formula for conversion, if not given
+ * \param[in] gain_conversion Structure containing digital gain to code mapping information.
+ * \param[in] gain_code Digital gain code in sensor specific units.
+ * \param[out] digital_gain Calculated digital gain.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_sensor_units_to_digital_gain(
+ const cmc_parsed_digital_gain_t *gain_conversion,
+ const unsigned short code,
+ float *digital_gain);
+
+/*!
+ * \brief Gets analog gain and code based on current code.
+ * Offset is used to retrieve previous or next analog gain code pairs from the CMC analog gain conversion tables.
+ * \param[in] gain_conversion Structure containing analog gain to gain code conversion tables.
+ * \param[in] gain_code Analog gain code in sensor specific units.
+ * \param[in] gain_code_offset Offset of code to resolve (-1 or 1).
+ * \param[out] indexed_gain_code Analog gain code matching the offset.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_get_analog_gain_code(
+ const cmc_parsed_analog_gain_conversion_t *gain_conversion,
+ const unsigned short gain_code,
+ const int gain_code_offset,
+ unsigned short *indexed_gain_code);
+
+/*!
+ * \brief Converts ISO to analog gain and digital gain and codes.
+ * Gains are round down except if given ISO is smaller than corresponding gain 1.0.
+ * \param[in] analog_gain_conversion Structure containing analog gain to gain code conversion tables. Can be NULL, if sensor doesn't support analog gain.
+ * \param[in] digital_gain_conversion Structure containing digital gain to code mapping information. Can be NULL, if sensor doesn't support digital gain.
+ * \param[in] sensitivity Structure containing sensor sensitivity information.
+ * \param[in] iso ISO value to be converted into gains.
+ * \param[out] analog_gain Calculated analog gain.-1.0 if not available.
+ * \param[out] analog_gain_code Calculated analog gain code. -1 if not available.
+ * \param[out] digital_gain Calculated digital gain. -1.0 if not available.
+ * \param[out] digital_gain_code Calculated digital gain code. -1 if not available.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_convert_iso_to_gains(
+ const cmc_parsed_analog_gain_conversion_t *analog_gain_conversion,
+ const cmc_parsed_digital_gain_t *digital_gain_conversion,
+ const cmc_sensitivity_t *sensitivity,
+ const int iso,
+ float *analog_gain,
+ int *analog_gain_code,
+ float *digital_gain,
+ int *digital_gain_code);
+
+/*!
+ * \brief Converts analog gain and digital gain codes to ISO.
+ * \param[in] analog_gain_conversion Structure containing analog gain to gain code conversion tables. Can be NULL, if sensor doesn't support analog gain.
+ * \param[in] digital_gain_conversion Structure containing digital gain to code mapping information. Can be NULL, if sensor doesn't support digital gain.
+ * \param[in] sensitivity Structure containing sensor sensitivity information.
+ * \param[in] analog_gain_code Analog gain code. -1 if not available.
+ * \param[in] digital_gain_code Digital gain code. -1 if not available.
+ * \param[out] iso Analog and digital gain codes converted into ISO value. -1 if not available.
+ * \return Error code.
+ */
+LIBEXPORT ia_err
+ia_exc_convert_gain_codes_to_iso(
+ const cmc_parsed_analog_gain_conversion_t *analog_gain_conversion,
+ const cmc_parsed_digital_gain_t *digital_gain_conversion,
+ const cmc_sensitivity_t *sensitivity,
+ const int analog_gain_code,
+ const int digital_gain_code,
+ int *iso);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IA_EXC_H_ */