/* SPDX-License-Identifier: GPL-2.0 */ /* * Support for Intel Camera Imaging ISP subsystem. * Copyright (c) 2010 - 2015, Intel Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. */ #ifndef __IA_CSS_FRAME_H__ #define __IA_CSS_FRAME_H__ /* ISP2401 */ #include #include #include #include "dma.h" /********************************************************************* **** Frame INFO APIs **********************************************************************/ /* @brief Sets the given width and alignment to the frame info * * @param * @param[in] info The info to which parameters would set * @param[in] width The width to be set to info * @param[in] aligned The aligned to be set to info * @return */ void ia_css_frame_info_set_width(struct ia_css_frame_info *info, unsigned int width, unsigned int min_padded_width); /* @brief Sets the given format to the frame info * * @param * @param[in] info The info to which parameters would set * @param[in] format The format to be set to info * @return */ void ia_css_frame_info_set_format(struct ia_css_frame_info *info, enum ia_css_frame_format format); /* @brief Sets the frame info with the given parameters * * @param * @param[in] info The info to which parameters would set * @param[in] width The width to be set to info * @param[in] height The height to be set to info * @param[in] format The format to be set to info * @param[in] aligned The aligned to be set to info * @return */ void ia_css_frame_info_init(struct ia_css_frame_info *info, unsigned int width, unsigned int height, enum ia_css_frame_format format, unsigned int aligned); /* @brief Checks whether 2 frame infos has the same resolution * * @param * @param[in] frame_a The first frame to be compared * @param[in] frame_b The second frame to be compared * @return Returns true if the frames are equal */ bool ia_css_frame_info_is_same_resolution( const struct ia_css_frame_info *info_a, const struct ia_css_frame_info *info_b); /* @brief Check the frame info is valid * * @param * @param[in] info The frame attributes to be initialized * @return The error code. */ int ia_css_frame_check_info(const struct ia_css_frame_info *info); /********************************************************************* **** Frame APIs **********************************************************************/ /* @brief Initialize the plane depending on the frame type * * @param * @param[in] frame The frame attributes to be initialized * @return The error code. */ int ia_css_frame_init_planes(struct ia_css_frame *frame); /* @brief Free an array of frames * * @param * @param[in] num_frames The number of frames to be freed in the array * @param[in] **frames_array The array of frames to be removed * @return */ void ia_css_frame_free_multiple(unsigned int num_frames, struct ia_css_frame **frames_array); /* @brief Allocate a CSS frame structure of given size in bytes.. * * @param frame The allocated frame. * @param[in] size_bytes The frame size in bytes. * @param[in] contiguous Allocate memory physically contiguously or not. * @return The error code. * * Allocate a frame using the given size in bytes. * The frame structure is partially null initialized. */ int ia_css_frame_allocate_with_buffer_size( struct ia_css_frame **frame, const unsigned int size_bytes, const bool contiguous); /* @brief Check whether 2 frames are same type * * @param * @param[in] frame_a The first frame to be compared * @param[in] frame_b The second frame to be compared * @return Returns true if the frames are equal */ bool ia_css_frame_is_same_type( const struct ia_css_frame *frame_a, const struct ia_css_frame *frame_b); /* @brief Configure a dma port from frame info * * @param * @param[in] config The DAM port configuration * @param[in] info The frame info * @return */ void ia_css_dma_configure_from_info( struct dma_port_config *config, const struct ia_css_frame_info *info); /* ISP2401 */ /* @brief Finds the cropping resolution * This function finds the maximum cropping resolution in an input image keeping * the aspect ratio for the given output resolution.Calculates the coordinates * for cropping from the center and returns the starting pixel location of the * region in the input image. Also returns the dimension of the cropping * resolution. * * @param * @param[in] in_res Resolution of input image * @param[in] out_res Resolution of output image * @param[out] crop_res Crop resolution of input image * @return Returns 0 or -EINVAL on error */ int ia_css_frame_find_crop_resolution(const struct ia_css_resolution *in_res, const struct ia_css_resolution *out_res, struct ia_css_resolution *crop_res); #endif /* __IA_CSS_FRAME_H__ */