From f21b9306a7893017b9f7e6b95001da9abade30f7 Mon Sep 17 00:00:00 2001 From: Umang Jain Date: Fri, 21 May 2021 10:27:24 +0530 Subject: 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 --- include/ia_imaging/ia_montage.h | 152 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 include/ia_imaging/ia_montage.h (limited to 'include/ia_imaging/ia_montage.h') diff --git a/include/ia_imaging/ia_montage.h b/include/ia_imaging/ia_montage.h new file mode 100644 index 0000000..2160274 --- /dev/null +++ b/include/ia_imaging/ia_montage.h @@ -0,0 +1,152 @@ +/* + * 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_MONTAGE_H_ +#define _IA_MONTAGE_H_ + +/** @file ia_montage.h + * This file declares structures and APIs of image montage engine. + */ + +#include "ia_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @brief Image montage state. This is the handle for IM engine. + */ +typedef struct { + ia_frame *output_image; /**< Allocated and managed internally, result image will be stored here. */ +} ia_montage_state; + + +/** @brief Parameters for ia montage engine. + * Used by ia_montage_set_parameter() and ia_montage_get_parameter() to indicate runtime engine configuration. + */ +typedef struct { + int32_t search_region_margin_percentage; /**< Indicates how much enlarged area to be considered when it crops the object image patch from sub image. Default is 20. */ +} ia_montage_parameters; + +/** @brief Initialize Image Montage engine + * + * @param env [IN] Platform environment parameters. + * + * This function instantiates and initializes the Image Montage Engine. + */ +LIBEXPORT +ia_montage_state * +ia_montage_init(const ia_env *env); + +/** @brief Destroy Image Montage Engine. + */ +LIBEXPORT +void +ia_montage_uninit(ia_montage_state *state); + +/** @brief Initialize existing Image Montage engine. + */ +LIBEXPORT +void +ia_montage_reinit(ia_montage_state *state); + +/** @brief Get version information of the Image Montage Engine. + */ +LIBEXPORT +ia_version +ia_montage_get_version(void); + +/** @brief Set the parameters. + * + * @param ms [IN] Image Montage engine context. + * @param params [IN] the parameter struct. + * + * Set ia_montage parameters to the engine context. The params is supposed to be filled by ia_montage_get_parameters(). + */ +LIBEXPORT +ia_err +ia_montage_set_parameter(ia_montage_state *ms, const ia_montage_parameters *params); + +/** @brief Get the parameters. + * + * @param ms [IN] Image Montage engine context. + * @param params [IN/OUT] the parameter struct. + * + * Get ia_montage parameters from the engine context. The params must be allocated before calling this function. The members + * would be filled after it returns. + */ +LIBEXPORT +ia_err +ia_montage_get_parameter(ia_montage_state *ms, ia_montage_parameters *params); + +/** @brief Set the main image. + * + * @param ms [IN] Image Montage engine context. + * @param main_frame [IN] Main image. + * @param objects [IN] an array of the objects coordinates. + * @param num_objects [IN] the number of objects. + * + * The main image is labelled as the "background" for Image Montage. + * Various objects are necessary to consider the overlapping between each object. Objects could be faces for general use-cases. + * It is required to call this apposed to ia_montage_set_sub_images(), prior to composing. + */ + +LIBEXPORT +ia_err +ia_montage_set_main_image(ia_montage_state *ms, const ia_frame *main_frame, ia_rectangle* objects, int32_t num_objects); + +/** @brief Set the sub image where the object patches come from. + * + * @param ms [IN] Image Montage engine context. + * @param sub_frame [IN] Sub image. + * @param objects [IN] the coordinates of objects. + * @param num_objects [IN] the number of objects. + * + * The main image is labelled as the "background" for Image Montage. + * Various objects are necessary to consider the overlapping between each object. Objects could be faces for general use-cases. + * It is required to call this apposed to ia_montage_set_sub_images(), prior to composing. + * It is fine to call this before than ia_montage_set_main_image(). + */ +LIBEXPORT +ia_err +ia_montage_set_sub_image(ia_montage_state *ms, const ia_frame *sub_frame, ia_rectangle* objects, int32_t num_objects); + +/** @brief Compose the image montage, cropping from the sub image, pasting to the main image. + * + * @param ms [IN] Image Montage engine context. + * @param idx_on_main [IN] the index of the object given along with main image. + * @param idx_on_sub [IN] the index of the object given along with sub image. + * + * This is to combine two images(main, sub), cropping an object image patch placed on 'idx_on_sub'th place of sub objects array, + * overlaying it onto the place of 'idx_on_image' th of main objects array. + * The composed image would be in the engine context. + * Every time this function is called, the result image will be newly composed from main/sub images and the previous image will gone. + * You should call ia_montage_set_main_image() again with the result image, in order to paste a new object on the result image, + * + */ +LIBEXPORT +ia_err +ia_montage_compose(ia_montage_state *ms, int32_t idx_on_main, int32_t idx_on_sub); + + + + +#ifdef __cplusplus +} +#endif + + +#endif /* _IA_MONTAGE_H_ */ -- cgit v1.2.1