diff options
author | Umang Jain <umang.jain@ideasonboard.com> | 2021-05-21 10:27:24 +0530 |
---|---|---|
committer | Umang Jain <umang.jain@ideasonboard.com> | 2021-06-28 14:12:06 +0530 |
commit | f21b9306a7893017b9f7e6b95001da9abade30f7 (patch) | |
tree | 82332eb640a9725ceef3ec487033b524cd49ecd7 /include/ia_imaging/ia_cp.h | |
parent | d05fd744448d37739cf4f919578d0ac8c73bc0a1 (diff) |
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 <umang.jain@ideasonboard.com>
Diffstat (limited to 'include/ia_imaging/ia_cp.h')
-rw-r--r-- | include/ia_imaging/ia_cp.h | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/include/ia_imaging/ia_cp.h b/include/ia_imaging/ia_cp.h new file mode 100644 index 0000000..598d146 --- /dev/null +++ b/include/ia_imaging/ia_cp.h @@ -0,0 +1,408 @@ +/* + * 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. + */ + +#ifndef _IA_CP_H_ +#define _IA_CP_H_ + +/** @file ia_cp.h + * This file declares the Intel camera computational photography API. + */ + +#include "ia_types.h" +#include "ia_cp_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @brief Initialize HDR acceleration setup + * + * @param[out] cp_context pointer to CP instance + * @param[in] acc_api pointer to acceleration api + * @param[in] environment pointer to environment setup + * @param[in] mem_environment pointer to memory environment setup + * + * This function initializes the acceleration setup by using input acc_api + * and log_env. +*/ +LIBEXPORT void +ia_cp_init (ia_cp_context ** cp_context, + const ia_acceleration * acc_api, + const ia_env * environment, + const ia_mem_env * mem_environment); + + +/** @brief Close HDR acceleration setup + * + * @param[in] cp_context pointer to CP instance + * + * This function frees and closes all the resources allocated for HDR + * in its initialization call. + */ +LIBEXPORT void +ia_cp_uninit (ia_cp_context * cp_context); + +/** @brief allocate and map all HDR intermediate data buffers + * + * @param[out] hdr pointer to HDR instance + * @param[in] cp_context pointer to CP instance + * @param[in] width input frame width + * @param[in] height input frame height + * @param[in] hdrb_data CPF binary data with tuning choices + * @param[in] tgt target platform for HDR execution (host, ipu etc.) + * @return error status + * + * This function allocates and maps all HDR intermediate buffers + * required to do the processing. It also passes tuning choices + * set in the CPFF for the particular platform. If hdrb_data is + * NULL, default choices are used. + */ +LIBEXPORT ia_err +ia_cp_hdr_init (ia_cp_hdr ** hdr, ia_cp_context * cp_context, int width, int height, const ia_binary_data * hdrb_data, ia_cp_target tgt); + +/** @brief release and unmap intermediate HDR data buffers + * + * @param[in] hdr pointer to HDR instance + * @return error status + * + * This function release all resources used for intermediate + * data storage during HDR composition. + */ +LIBEXPORT ia_err +ia_cp_hdr_uninit (ia_cp_hdr * hdr); + +/** @brief compose HDR image + * + * @param[in] hdr pointer to HDR instance + * @param[out] out pointer to the HDR output buffer + * @param[out] out_pv pointer to postview output buffer + * @param[in] in pointer to the input frame sequence + * @param[in] in_pv pointer to the downscaled input frame sequence + * @param[in] num_frames number of input frames + * @param[in] cfg configuration parameters + * @return error status + * + * This function composes an HDR image. It produces and output HDR frame and a downscaled version + * of the full resolution output. Composition of the output frame is controlled via configuration + * structure given as an input. + */ +LIBEXPORT ia_err +ia_cp_hdr_compose (ia_cp_hdr * hdr, + ia_frame * out, + ia_frame * out_pv, + const ia_frame * in, + const ia_frame * in_pv, + unsigned int num_frames, + const ia_cp_hdr_cfg * cfg); + +/** @brief abort HDR image composition + * + * @param[in] hdr pointer to HDR instance + * @return error status + * + * This function aborts composition of an HDR image. + */ +LIBEXPORT ia_err +ia_cp_hdr_abort (ia_cp_hdr * hdr); + +/** @brief allocate and map all VHDR intermediate data buffers + * + * @param[out] vhdr pointer to VHDR instance + * @param[in] cp_context pointer to CP instance + * @param[in] width input frame width + * @param[in] height input frame height + * @param[in] vhdrb_data CPF binary data with tuning choices + * @param[in] tgt target platform for VHDR execution (host, gpu etc.) + * @return error status + * + * This function allocates and maps all VHDR intermediate buffers + * required to do the processing. It also passes tuning choices + * set in the CPF for the particular platform. If vhdrb_data is + * NULL, default choices are used. + */ +LIBEXPORT ia_err +ia_cp_vhdr_init (ia_cp_vhdr ** vhdr, ia_cp_context * cp_context, int width, int height, const ia_binary_data * vhdrb_data, ia_cp_target tgt); + +/** @brief release and unmap intermediate VHDR data buffers + * + * @param[in] vhdr pointer to VHDR instance + * @return error status + * + * This function release all resources used for intermediate + * data storage during VHDR composition. + */ +LIBEXPORT ia_err +ia_cp_vhdr_uninit (ia_cp_vhdr * vhdr); + +/** @brief compose VHDR image + * + * @param[in] vhdr pointer to VHDR instance + * @param[out] out pointer to the VHDR output buffer + * @param[in] in pointer to the input frame sequence + * @param[in] num_frames number of input frames + * @param[in] cfg configuration parameters + * @return error status + * + * This function composes an VHDR image. It produces and output VHDR frame. + * Composition of the output frame is controlled via configuration + * structure given as an input. + */ +LIBEXPORT ia_err +ia_cp_vhdr_compose (ia_cp_vhdr * vhdr, + ia_frame * out, + const ia_frame * in, + unsigned int num_frames, + const ia_cp_vhdr_cfg * cfg); + +/** @brief abort VHDR image composition + * + * @param[in] vhdr pointer to VHDR instance + * @return error status + * + * This function aborts composition of an VHDR image. + */ +LIBEXPORT ia_err +ia_cp_vhdr_abort (ia_cp_vhdr * vhdr); + +/** @brief allocate and map all VHDR intermediate data buffers + * + * @param[out] vhdr address of pointer to VHDR instance + * @param[in] cp_context pointer to CP instance + * @param[in] width input frame width + * @param[in] height input frame height + * @param[in] vhdrb_data CPF binary data with tuning choices + * @param[in] tgt target platform for VHDR execution (host, gpu etc.) + * @return error status + * + * This function allocates and maps all VHDR intermediate buffers + * required to do the processing. It also passes tuning choices + * set in the CPF for the particular platform. If vhdrb_data is + * NULL, default choices are used. + */ +LIBEXPORT ia_err +ia_cp_vhdr_v2_init (ia_cp_vhdr_v2 **vhdr, ia_cp_context *cp_context, int width, int height, const ia_binary_data *vhdrb_data, ia_cp_target tgt); + +/** @brief release and unmap intermediate VHDR data buffers + * + * @param[in] vhdr pointer to VHDR instance + * @return error status + * + * This function release all resources used for intermediate + * data storage during VHDR composition. + */ +LIBEXPORT ia_err +ia_cp_vhdr_v2_uninit (ia_cp_vhdr_v2 *vhdr); + +/** @brief compose VHDR image + * + * @param[in] vhdr pointer to VHDR instance + * @param[out] out pointer to the VHDR output buffer + * @param[in] in pointer to the input frame sequence + * @param[in] cfg configuration parameters + * @return error status + * + * This function composes an VHDR image. It produces and output VHDR frame. + * Composition of the output frame is controlled via configuration + * structure given as an input. + */ +LIBEXPORT ia_err +ia_cp_vhdr_v2_compose (ia_cp_vhdr_v2 *vhdr, + ia_frame *out, + const ia_frame *in, + const ia_cp_vhdr_cfg *cfg); + +/** @brief initialize ULL parameters + * + * @param[out] ull pointer to ULL instance + * @param[in] cp_context pointer to CP instance + * @param[in] width input frame width + * @param[in] height input frame height + * @param[in] ullb_data CPF binary data with tuning choices + * @param[in] tgt target platform for ULL execution (host, ipu etc.) + * @return error status + * + * This function initializes internals for ULL processing. It also + * passes tuning choices set in the CPFF for the particular platform. + * If ullb_data is NULL, default choices are used. + */ +LIBEXPORT ia_err +ia_cp_ull_init (ia_cp_ull ** ull, ia_cp_context * cp_context, int width, int height, const ia_binary_data * ullb_data, ia_cp_target tgt); + +/** @brief deinitialize ULL internals + * + * @param[in] ull pointer to ULL instance + * @return error status + * + * This function release all resources used during ULL composition. + */ +LIBEXPORT ia_err +ia_cp_ull_uninit (ia_cp_ull * ull); + +/** @brief compose ULL image + * + * @param[in] ull pointer to ULL instance + * @param[out] out pointer to the ULL output buffer + * @param[out] out_pv pointer to postview output buffer + * @param[in] in pointer to the input frame sequence + * @param[in] in_pv pointer to the downscaled input frame sequence + * @param[in] num_frames number of input frames + * @param[in] cfg configuration parameters + * @return error status + * + * This function composes a denoised image from a set of input images captured in exteme low-light + * conditions. It produces an output frame and a downscaled version of the full resolution output. + * Composition of the output frame is controlled via configuration structure given as an input. + */ +LIBEXPORT ia_err +ia_cp_ull_compose (ia_cp_ull * ull, + ia_frame * out, + ia_frame * out_pv, + const ia_frame * in, + const ia_frame * in_pv, + unsigned int num_frames, + const ia_cp_ull_cfg * cfg); + +/** @brief abort ULL image composition + * + * @return error status + * + * This function aborts composition of a ULL image. + */ +LIBEXPORT ia_err +ia_cp_ull_abort (void); + +/** @brief Estimate global motion between two frames provided in a form of gaussian pyramids + * + * @param[out] result outcome of the estimation process + * @param[in] target_pyr array of target frame pyramid levels + * @param[in] source_pyr array of source frame pyramid levels + * @param[in] cfg configuration parameters + * @return error status + * + * This function estimates global motion between the source frame and the target (base) frame given in a form of + * gaussian pyramids. Results are produced in a form of a 3x3 global transformation matrix sufficient to cover the + * most complex use case of projective transformation. Estimation also advocates fallback in case the global motion + * was sufficiently large. + * + */ +LIBEXPORT ia_err +ia_cp_global_me_multires (ia_cp_me_result * result, const ia_frame target_pyr[], + const ia_frame source_pyr[], const ia_cp_me_cfg * cfg); + +/** @brief Estimate global motion between two frames + * + * @param[out] result outcome of the estimation process + * @param[in] target pointer to the target buffer + * @param[in] source pointer to the source buffer + * @param[in] cfg configuration parameters + * @return error status + * + * This function estimates global motion between the source frame and the target (base) frame. Results are + * produced in a form of a 3x3 global transformation matrix sufficient to cover the most complex use case + * of projective transformation. Estimation also advocates fallback in case the global motion was + * sufficiently large. + * + */ +LIBEXPORT ia_err +ia_cp_global_me (ia_cp_me_result * result, const ia_frame * target, const ia_frame * source, + const ia_cp_me_cfg * cfg); + +/** @brief Compensate frame motion based on the transformation matrix + * + * @param[out] target pointer to the target buffer + * @param[in] source pointer to the source buffer + * @param[in] result outcome of the estimation process + * @return error status + * + * This function compensates global motion based on the provided motion estimation results. + * + */ +LIBEXPORT ia_err +ia_cp_global_mc (ia_frame * target, ia_frame * source, ia_cp_me_result * result); + + +/** @brief Zoom provided frame with specified zoom factor + * + * @param[inout] in_out frame + * @param[in] zoom_factor + * @return error status + * + * This function performs zooming of input frame with specified zoom factor. + * + */ +LIBEXPORT ia_err +ia_cp_zoom_frame(ia_frame * in_out, int zoom_factor); + +/** @brief Load extension binaries + * + * @param[in] cp_context pointer to CP instance + * @return error status + * + * This function loads CP binaries as an extension to the preview pipe. + */ +LIBEXPORT ia_err +ia_cp_load_extensions (ia_cp_context * cp_context); + +/** @brief Unload extension binaries + * + * @param[in] cp_context pointer to CP instance + * @return error status + * + * This function unloads CP binaries which are previously loaded as an extension + * to the preview pipe. + */ +LIBEXPORT ia_err +ia_cp_unload_extensions (ia_cp_context * cp_context); + +/** + * @brief Computes standard deviation for the patches in the provided chart + * + * @param[in] chart Chart descriptor + * @param[in] mean_min Minimal valid patch mean + * @param[in] mean_max Maximal valid patch mean + * @param[out] deviation Average deviation for valid patches + * + * @return Flag indicating success or failure + * + * Function computes standard deviation for the patches in the provided chart. Chart data type contains + * a frame and location of all patches of interest. Expected are 8-bit frames, computation is done only + * for the first plane in the frame. Resulting deviation is scaled into the [0, 1) range. + */ +LIBEXPORT ia_err +ia_cp_chart_compute_deviation (ia_cp_chart chart, int mean_min, int mean_max, float *deviation); + +/** + * @brief Performs linear regression fitting for the given dataset + * + * @param[in] psrc_x Pointer to dataset X values + * @param[in] psrc_y Pointer to dataset Y values + * @param[in] len Length of the dataset + * @param[out] slope Slope of the resulting linear curve + * @param[out] offset Offset of the resulting linear curve + * + * @return Flag indicating success or failure + * + * Function performs linear curve fitting for the given dataset via means of linear regression. Resulting + * slope and offset describe the linear fit as y = slope * x + offset. + */ +LIBEXPORT ia_err +ia_cp_linear_regression (const float *psrc_x, const float *psrc_y, int len, float *slope, float *offset); + +#ifdef __cplusplus +} +#endif + +#endif /* _IA_CP_H */ |