From 55fd8242ec234f7dfe092b489e53ed8af64f7158 Mon Sep 17 00:00:00 2001 From: Hao Yao Date: Wed, 24 Sep 2025 16:09:12 +0800 Subject: [PATCH] PTL PV release candidate 2 on 2025-09-24 Signed-off-by: Hao Yao --- include/ipu75xa/ia_imaging/CCAMacro.h | 4 +-- include/ipu75xa/ia_imaging/IntelCCATypes.h | 2 ++ include/ipu75xa/ia_imaging/ia_aic_class.h | 4 +-- include/ipu75xa/ia_imaging/ia_aic_types.h | 17 ++++++++++-- include/ipu75xa/ia_imaging/ia_aiq.h | 2 +- include/ipu75xa/ia_imaging/ia_aiq_types.h | 1 + include/ipu75xa/ia_imaging/ia_camera_types.h | 4 +-- include/ipu75xa/ia_imaging/ia_ccat_types.h | 6 ++--- include/ipu75xa/ia_imaging/ia_cmc_types.h | 25 +++++++++--------- include/ipu75xa/ia_imaging/ia_configuration.h | 4 +-- .../ipu75xa/ia_imaging/ia_dvs_deprecated.h | 6 ++--- include/ipu75xa/ia_imaging/ia_dvs_types.h | 6 ++--- include/ipu75xa/ia_imaging/ia_mkn_types.h | 2 +- include/ipu75xa/ia_imaging/ia_nvm.h | 6 ++--- include/ipu75xa/ia_imaging/ia_ob.h | 4 +-- .../ia_imaging/ia_pal_types_isp_ids_autogen.h | 2 ++ .../ipu75xa/ia_imaging/ia_statistics_types.h | 2 +- include/ipu75xa/ia_imaging/ia_view_types.h | 6 ++--- include/ipu7x/ia_imaging/CCAMacro.h | 4 +-- include/ipu7x/ia_imaging/IntelCCATypes.h | 2 ++ include/ipu7x/ia_imaging/ia_aic_class.h | 4 +-- include/ipu7x/ia_imaging/ia_aic_types.h | 17 ++++++++++-- include/ipu7x/ia_imaging/ia_aiq.h | 2 +- include/ipu7x/ia_imaging/ia_aiq_types.h | 1 + include/ipu7x/ia_imaging/ia_camera_types.h | 4 +-- include/ipu7x/ia_imaging/ia_ccat_types.h | 6 ++--- include/ipu7x/ia_imaging/ia_cmc_types.h | 25 +++++++++--------- include/ipu7x/ia_imaging/ia_configuration.h | 4 +-- include/ipu7x/ia_imaging/ia_dvs_deprecated.h | 6 ++--- include/ipu7x/ia_imaging/ia_dvs_types.h | 6 ++--- include/ipu7x/ia_imaging/ia_mkn_types.h | 2 +- include/ipu7x/ia_imaging/ia_nvm.h | 6 ++--- include/ipu7x/ia_imaging/ia_ob.h | 4 +-- .../ipu7x/ia_imaging/ia_statistics_types.h | 2 +- include/ipu7x/ia_imaging/ia_view_types.h | 6 ++--- lib/firmware/intel/ipu/ipu7ptl_fw.bin | Bin 262144 -> 266240 bytes .../intel/ipu/unsigned/ipu7ptl_fw.bin | Bin 0 -> 266240 bytes lib/libia_aic-ipu75xa.so.0 | Bin 13433352 -> 13491352 bytes lib/libia_aic-ipu7x.so.0 | Bin 12744824 -> 12776248 bytes lib/libia_aiq_v1-ipu75xa.so.0 | Bin 901600 -> 914136 bytes lib/libia_aiq_v1-ipu7x.so.0 | Bin 901600 -> 914136 bytes lib/libia_aiq_v1_file_debug-ipu75xa.so.0 | Bin 923224 -> 931664 bytes lib/libia_aiq_v1_file_debug-ipu7x.so.0 | Bin 923224 -> 931664 bytes lib/libia_cca-ipu75xa.so.0 | Bin 191504 -> 191504 bytes lib/libia_cca-ipu7x.so.0 | Bin 191504 -> 191504 bytes lib/libia_ccat-ipu75xa.so.0 | Bin 287576 -> 300112 bytes lib/libia_ccat-ipu7x.so.0 | Bin 287576 -> 300112 bytes lib/libia_cmc_parser-ipu75xa.so.0 | Bin 100080 -> 108736 bytes lib/libia_cmc_parser-ipu7x.so.0 | Bin 100080 -> 108736 bytes lib/libia_dvs-ipu75xa.so.0 | Bin 150512 -> 150512 bytes lib/libia_dvs-ipu7x.so.0 | Bin 150512 -> 150512 bytes lib/libia_lard-ipu75xa.so.0 | Bin 15688 -> 15688 bytes lib/libia_lard-ipu7x.so.0 | Bin 15688 -> 15688 bytes 53 files changed, 118 insertions(+), 86 deletions(-) create mode 100644 lib/firmware/intel/ipu/unsigned/ipu7ptl_fw.bin diff --git a/include/ipu75xa/ia_imaging/CCAMacro.h b/include/ipu75xa/ia_imaging/CCAMacro.h index d2948c0..0faf8c6 100644 --- a/include/ipu75xa/ia_imaging/CCAMacro.h +++ b/include/ipu75xa/ia_imaging/CCAMacro.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2024 Intel Corporation. + * Copyright (C) 2021-2025 Intel Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,7 +34,7 @@ namespace cca { /* * TODO: * This config file should be generated automatically to support different - * platforms or products, because the below defintions should depend on + * platforms or products, because the below definitions should depend on * sensor, IPU, etc. */ /** diff --git a/include/ipu75xa/ia_imaging/IntelCCATypes.h b/include/ipu75xa/ia_imaging/IntelCCATypes.h index d4db0f5..8228188 100644 --- a/include/ipu75xa/ia_imaging/IntelCCATypes.h +++ b/include/ipu75xa/ia_imaging/IntelCCATypes.h @@ -381,6 +381,7 @@ typedef struct { bool bAssitLightOn; /*!< Flag indicating if the AF assist light is on. */ uint8_t AECFrameDelay; /*!< Frame delay for auto exposure to take effect. */ bool hasEmbeddedData; /*!< Flag indicating if embedded data is available. */ + ia_acs_stats acs_stats; /*acs parameters*/ } cca_stats_params; /*! @@ -601,6 +602,7 @@ typedef struct { uint64_t seq_id; /*!< Optional. Sequence number for AIC run. */ uint32_t dvs_id; /*!< Optional. Sequence number for DVS. */ int32_t ptz_zoom_active; /*!< Optional. b2i_DS need the parameter for calclate kernel_width. */ + float32_t zoom_factor; /*!< Optional. zoom factor. */ ia_isp_feature_setting nr_setting; /*!< Mandatory. Feature setting for noise reduction algorithms. */ ia_isp_feature_setting ee_setting; /*!< Mandatory. Feature setting for edge enhancement algorithms. */ int8_t manual_brightness; /*!< Optional. Manual brightness value range [-128,127]. */ diff --git a/include/ipu75xa/ia_imaging/ia_aic_class.h b/include/ipu75xa/ia_imaging/ia_aic_class.h index 9f3045b..85f971c 100644 --- a/include/ipu75xa/ia_imaging/ia_aic_class.h +++ b/include/ipu75xa/ia_imaging/ia_aic_class.h @@ -1,7 +1,7 @@ /* * INTEL CONFIDENTIAL * - * Copyright (C) 2018-2024 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * This software and the related documents are Intel copyrighted materials, * and your use of them is governed by the express license under which they @@ -202,7 +202,7 @@ class LIBEXPORT IaAic * * \param [in] group_id unique identifier for this group of kernels in this context * \param [in] terminal_index index to terminal - * \param [in] target Pointer to buffer desciptor where this function stores the buffer information + * \param [in] target Pointer to buffer descriptor where this function stores the buffer information * \param [in] fragment_index in case of striping, indicates the current stripe index that we get buffer for. In case striping is not supported for this specific buffer or at all, 0 should be used * * return ia_err_none in success. Errorcode on failure diff --git a/include/ipu75xa/ia_imaging/ia_aic_types.h b/include/ipu75xa/ia_imaging/ia_aic_types.h index a178eeb..d5ad617 100644 --- a/include/ipu75xa/ia_imaging/ia_aic_types.h +++ b/include/ipu75xa/ia_imaging/ia_aic_types.h @@ -57,11 +57,23 @@ enum IaAicBufferTypes iaAicBufferTypeNotSet }; +struct IaAicUpscalerFragDesc +{ + uint16_t fragmentInputCropLeft; /*!< The amount of pixels to crop on the left before upscaling. */ + uint16_t fragmentInputCropRight; /*!< The amount of pixels to crop on the right before upscaling. */ +}; + struct IaAicFragmentDesc //must be aligned with: ia_pac_fragment_desc in ia_pac_frag_types { uint16_t fragmentInputWidth; /*!< The input width of the fragment. */ uint16_t fragmentOutputWidth; /*!< The output width of the fragment. */ uint16_t fragmentStartX; /*!< The x offset from the top-left corner of the full image. */ + + // Kernel specific additions + union + { + IaAicUpscalerFragDesc upscalerFragDesc; + }; /*!< Extended fragment description. */ }; @@ -92,7 +104,7 @@ struct IaBinaryData struct ImagingKernelFormatInfo { uint32_t inputFormat; /*!< FourCC of format in input edge of the kernel - (can be used to retrieve full format descrition from ISP format bridge */ + (can be used to retrieve full format description from ISP format bridge */ uint32_t outputFormat; /*!< FourCC of format in output edge of the kernel */ }; @@ -148,6 +160,7 @@ struct IaAicInputParams ia_dvs_image_transformation *gdcTransformation; /*!< Mandatory. Image transformation parameters for GDC5 ISP FW. This feature replaces the need for morph_table usage.*/ ia_media_format mediaFormat; /*!< Mandatory. Selected Digital television output format.(e.g. BT709) */ int32_t ptz_zoom_active; + float32_t zoom_factor; /*!< Mandatory. Zoom factor for zoom mode. If ptz_zoom_active is false, zoom_factor is 1.0. */ /* Optional parameters */ char manualBrightness; /*!< Optional. Manual brightness value range [-128,127]. Value 0 means no change. */ @@ -177,7 +190,7 @@ typedef ia_ccat_frame_statistics IaCcatStatistics; typedef uint32_t IaAicStructuralParameter; // ========================================================================== -// Depricated interface +// Deprecated interface // ========================================================================== typedef class IaAic ia_aic_ctx_t; diff --git a/include/ipu75xa/ia_imaging/ia_aiq.h b/include/ipu75xa/ia_imaging/ia_aiq.h index f0dc615..6c30ac8 100644 --- a/include/ipu75xa/ia_imaging/ia_aiq.h +++ b/include/ipu75xa/ia_imaging/ia_aiq.h @@ -222,7 +222,7 @@ ia_aiq_set_tuning(ia_aiq *ia_aiq_ptr, /*! * \brief De-initialize IA_AIQ and its submodules. - * All memory allocated by AIQ algoriths are freed. AIQ handle can no longer be used. + * All memory allocated by AIQ algorithms are freed. AIQ handle can no longer be used. * * \param[in] ia_aiq_ptr Mandatory.\n * AIQ instance handle. diff --git a/include/ipu75xa/ia_imaging/ia_aiq_types.h b/include/ipu75xa/ia_imaging/ia_aiq_types.h index 08f1b42..a4a9fcd 100644 --- a/include/ipu75xa/ia_imaging/ia_aiq_types.h +++ b/include/ipu75xa/ia_imaging/ia_aiq_types.h @@ -369,6 +369,7 @@ typedef struct { ia_aiq_ae_feature_setting red_eye_reduction_flash; /*!< AEC will propose flashes before pre-flashes to reduce red eye effect. */ ia_aiq_ae_feature_setting fill_in_flash; /*!< AEC will propose flash in back light situations, where target is close enough. */ ia_aiq_ae_feature_setting continuous_flicker_detection; /*!< AEC runs the flicker detection algorithm continuously in the VF */ + ia_aiq_ae_feature_setting flicker_detection_v2; /*!< AEC will run the new flicker detection algorithm */ } ia_aiq_ae_features; diff --git a/include/ipu75xa/ia_imaging/ia_camera_types.h b/include/ipu75xa/ia_imaging/ia_camera_types.h index 6fa313c..70b0c12 100644 --- a/include/ipu75xa/ia_imaging/ia_camera_types.h +++ b/include/ipu75xa/ia_imaging/ia_camera_types.h @@ -1,5 +1,5 @@ /* - * Copyright 2023 Intel Corporation + * Copyright 2023-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -112,7 +112,7 @@ typedef struct { typedef struct { float32_t rlut[IA_CAMERA_PARAMETERS_RADIAL_DISTORTION_LUT_SIZE_MAX]; //the rgb_rlut calibration table - ia_rectify_sensor_t calib_sensor; //the "input" part in the RGB calibratoin table + ia_rectify_sensor_t calib_sensor; //the "input" part in the RGB calibration table ia_rectify_calib_t calib_rectified; //the "rectified" part in the RGB calibration table diff --git a/include/ipu75xa/ia_imaging/ia_ccat_types.h b/include/ipu75xa/ia_imaging/ia_ccat_types.h index 3c8a878..ffcfca1 100644 --- a/include/ipu75xa/ia_imaging/ia_ccat_types.h +++ b/include/ipu75xa/ia_imaging/ia_ccat_types.h @@ -141,7 +141,7 @@ typedef struct uint64_t frame_id; /*!< Mandatory. ID for the captured frame. */ uint64_t frame_timestamp; /*!< Mandatory. Time stamp for captured frame. */ ia_rectangle statistics_crop_area; /*!< Mandatory. RGBS and AF grid area crop with respect to full field of view of sensor output using (relative)ranges from ia_coordinate.h. */ - float32_t stitched_stats_norm_factor; /*!< Mandatory. For companded pipe usually statistivs represent more than 16bits then factor > 1 depends on highest bit represent by stat. */ + float32_t stitched_stats_norm_factor; /*!< Mandatory. For companded pipe usually statistivs represent more than 16bits then factor > 1 depends on highest bit represent by stat. */ uint32_t rgbs_stats_bit_depth; /*!< Mandatory. indicate the bit depth of rgbs stats */ int32_t cropped_image_height; /*!< Mandatory. Cropped RGBS raw height */ #ifdef IA_CCAT_EXTERNAL_RGB_HISTOGRAMS_ENABLED @@ -165,7 +165,7 @@ typedef struct #ifdef IA_CCAT_DEPTH_GRID_ENABLED ia_depth_grid depth_grid; /*!< Optional. Depth grid. */ #endif - ia_acs_stats acs_stats; /*!< Optional. Statistics from the ACS sensor (if avaialble) .*/ + ia_acs_stats acs_stats; /*!< Optional. Statistics from the ACS sensor (if available) .*/ } ia_ccat_frame_statistics; typedef struct @@ -256,7 +256,7 @@ typedef enum ccat_project_adaption_bitmap_3 = 1 << 3, /*!< is for vcx */ ccat_project_adaption_bitmap_4 = 1 << 4, /*!< is for AF document mode in IPU6 */ ccat_project_adaption_bitmap_5 = 1 << 5, /*!< is for MSFT OV02C10 NVM issue */ - ccat_project_adaption_bitmap_6 = 1 << 6, /*!< is for flicker v2 mode */ + ccat_project_adaption_bitmap_6 = 1 << 6, /*!< TBD */ ccat_project_adaption_bitmap_7 = 1 << 7, /*!< TBD */ ccat_project_adaption_bitmap_8 = 1 << 8, /*!< TBD */ ccat_project_adaption_bitmap_9 = 1 << 9, /*!< TBD */ diff --git a/include/ipu75xa/ia_imaging/ia_cmc_types.h b/include/ipu75xa/ia_imaging/ia_cmc_types.h index 32cd910..c3bd5c2 100644 --- a/include/ipu75xa/ia_imaging/ia_cmc_types.h +++ b/include/ipu75xa/ia_imaging/ia_cmc_types.h @@ -103,7 +103,7 @@ typedef struct */ typedef struct { - float matrix[3][3]; /*!< 3x3 accurate CCM, each consequtive elements sum to 1. */ + float matrix[3][3]; /*!< 3x3 accurate CCM, each consecutive elements sum to 1. */ } cmc_color_matrix; /*! @@ -162,7 +162,8 @@ typedef enum { cmc_nvm_interpolation_polynomial, cmc_nvm_interpolation_bi_cubic, - cmc_nvm_interpolation_polynomial_crop_two_pixels + cmc_nvm_interpolation_polynomial_crop_two_pixels, + cmc_nvm_interpolation_polynomial_with_valid_area } cmc_nvm_interpolation; @@ -581,13 +582,13 @@ typedef struct */ typedef struct { - cie_coords_t cie_coords; /*!< Light source CIE xy coordinates. */ - chromaticity_t chromaticity_response; /*!< Avg Chromaticity response for R/G anf B/G.*/ + cie_coords_t cie_coords; /*!< Light source CIE xy coordinates. */ + chromaticity_t chromaticity_response; /*!< Avg Chromaticity response for R/G anf B/G.*/ } cmc_lightsource_t; #define SIZEOF_CMC_LIGHTSOURCE_T 8U /*! - * \brief CMC Chromaticity Response + * \brief ACS Lightsource definition. */ typedef struct { @@ -636,8 +637,8 @@ typedef struct cmc_light_source light_src_type; /*!< Light-source type. See enum cmc_light_source. */ chromaticity_t chromaticity; /*!< Chromaticity (sensor) in R/G, B/G plane. */ cie_coords_t cie_coords; /*!< CIE x and y coordinates. */ - int32_t matrix_accurate[9]; /*!< 3x3 accurate CCM, each 3 consequtive elemets sum to 1. */ - int32_t matrix_preferred[9]; /*!< 3x3 preferred CCM, each 3 consequtive elemets sum to 1. */ + int32_t matrix_accurate[9]; /*!< 3x3 accurate CCM, each 3 consecutive elements sum to 1. */ + int32_t matrix_preferred[9]; /*!< 3x3 preferred CCM, each 3 consecutive elements sum to 1. */ } cmc_color_matrix_t; #define SIZEOF_CMC_COLOR_MATRIX_T 84U @@ -920,12 +921,10 @@ typedef struct */ typedef struct { - cmc_lightsource_acs_extension_t* cmc_lightsources_avg; - cmc_lightsource_acs_extension_t* cmc_lightsources_hi; - cmc_lightsource_acs_extension_t* cmc_lightsources_lo; - cmc_lightsource_acs_extension_t* cmc_lightsources_nvm; + uint8_t enable_acs; /*!< Is ACS data valid. */ + cmc_lightsource_acs_extension_t* cmc_lightsources_acs_avg; /*!< Average light sources with ACS data. */ } cmc_chromaticity_response_v102_t; -#define SIZEOF_CMC_CHROMATICITY_RESPONSE_V102 32U +#define SIZEOF_CMC_CHROMATICITY_RESPONSE_V102 1U /*! * \brief Parametric model coefficients for the average chromaticity locus and CCT curve @@ -1194,7 +1193,7 @@ typedef struct */ typedef struct { - float color_matrix[9]; /*!< 3x3 accurate CCM, each consequtive elements sum to 1. */ + float color_matrix[9]; /*!< 3x3 accurate CCM, each consecutive elements sum to 1. */ } cmc_acm_color_matrix_t; #define SIZEOF_CMC_ACM_COLOR_MATRIX_T 36U diff --git a/include/ipu75xa/ia_imaging/ia_configuration.h b/include/ipu75xa/ia_imaging/ia_configuration.h index ed1aad5..b1ed4c9 100644 --- a/include/ipu75xa/ia_imaging/ia_configuration.h +++ b/include/ipu75xa/ia_imaging/ia_configuration.h @@ -40,8 +40,8 @@ #define IA_AEC_EXPOSURES_MAX_NUM 10 #define IA_AEC_EXPOSURE_PLANS_NUM 4 #define IA_AEC_FEATURE_WEIGHT_GRID -#define IA_AEC_WEIGHT_GRID_WIDTH 32 -#define IA_AEC_WEIGHT_GRID_HEIGHT 24 +#define IA_AEC_WEIGHT_GRID_WIDTH 100 +#define IA_AEC_WEIGHT_GRID_HEIGHT 100 #define IA_AEC_FEATURE_CALIBRATION_DATA #define IA_AEC_FEATURE_FLASH #define IA_AEC_FLASHES_NUM 2 diff --git a/include/ipu75xa/ia_imaging/ia_dvs_deprecated.h b/include/ipu75xa/ia_imaging/ia_dvs_deprecated.h index 1f93351..1fe2fc7 100644 --- a/include/ipu75xa/ia_imaging/ia_dvs_deprecated.h +++ b/include/ipu75xa/ia_imaging/ia_dvs_deprecated.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2019 Intel Corporation + * Copyright 2014-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ typedef struct This allows DVS to generate morphing table which points are outside of the image area but still inside GDC buffer (padding area). This might be the case e.g. if LDC grid is barrel shaped. */ - ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameteres in native resolution (without any scaling or binning). + ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameters in native resolution (without any scaling or binning). If scaling is performed before cropping, cropping offsets need to be calculated in native resolution. Also if cropping is done in multiple places, everything needs to be combined together. @@ -93,4 +93,4 @@ ia_dvs_config(ia_dvs_state *dvs_state, } #endif -#endif /* _IA_DVS_DEPRECATED_H_ */ \ No newline at end of file +#endif /* _IA_DVS_DEPRECATED_H_ */ diff --git a/include/ipu75xa/ia_imaging/ia_dvs_types.h b/include/ipu75xa/ia_imaging/ia_dvs_types.h index 27713b4..58d1a2a 100644 --- a/include/ipu75xa/ia_imaging/ia_dvs_types.h +++ b/include/ipu75xa/ia_imaging/ia_dvs_types.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2021 Intel Corporation + * Copyright 2014-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ typedef struct t_dvs_facade ia_dvs_state; /** DVS Algorithm. * These settings specify the members of correction axes. - * ia_dvs_algorihm_0_axis is a special mode. In this case, library does not compensate the + * ia_dvs_algorithm_0_axis is a special mode. In this case, library does not compensate the * motion, works for digital zoom and distortion correction. */ typedef enum @@ -176,7 +176,7 @@ typedef struct This allows DVS to generate morphing table which points are outside of the image area but still inside GDC buffer (padding area). This might be the case e.g. if LDC grid is barrel shaped. */ - ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameteres in native resolution (without any scaling or binning). + ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameters in native resolution (without any scaling or binning). If scaling is performed before cropping, cropping offsets need to be calculated in native resolution. Also if cropping is done in multiple places, everything needs to be combined together. diff --git a/include/ipu75xa/ia_imaging/ia_mkn_types.h b/include/ipu75xa/ia_imaging/ia_mkn_types.h index 3f8b2c6..4a91400 100644 --- a/include/ipu75xa/ia_imaging/ia_mkn_types.h +++ b/include/ipu75xa/ia_imaging/ia_mkn_types.h @@ -54,7 +54,7 @@ typedef void ia_mkn; /*! * Start of MKN System enumeration set. * \brief Enumerations set for Maker Note System. - * This part contatins two enumerations: + * This part contains two enumerations: * - 'ia_mkn_dfid', describes data type of the 'Data' field in the MKN record; * - 'ia_mkn_dnid',describes a name (or functionality) of data in the 'Data' field. * To modify this file a following procedure is used: diff --git a/include/ipu75xa/ia_imaging/ia_nvm.h b/include/ipu75xa/ia_imaging/ia_nvm.h index ef5527a..e0f6670 100644 --- a/include/ipu75xa/ia_imaging/ia_nvm.h +++ b/include/ipu75xa/ia_imaging/ia_nvm.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL - * Copyright (c) 2012-2022 Intel Corporation + * Copyright (c) 2012-2025 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -128,8 +128,8 @@ typedef struct uint8_t vcm_bits; /*!< VCM register bit depth (8 or 16). */ int16_t *vcm_af_near; /*!< VCM register values for n_pos for AF at near calibration distance (supplier specific). */ int16_t *vcm_af_far; /*!< VCM register values for n_pos for AF at far calibration distance (supplier specific). */ - int16_t *vcm_af_start; /*!< VCM register values for n_pos for AF at lens start.DEPRICATED.the parameter must not be used */ - int16_t *vcm_af_end; /*!< VCM register values for n_pos for AF at lens end.DEPRICATED the parameter must not be used */ + int16_t *vcm_af_start; /*!< VCM register values for n_pos for AF at lens start.DEPRECATED.the parameter must not be used */ + int16_t *vcm_af_end; /*!< VCM register values for n_pos for AF at lens end.DEPRECATED the parameter must not be used */ uint8_t n_lights; /*!< Number of light sources used for LSC and AWB. */ uint8_t *cie_coords_x; /*!< CIE x coordinates for n_lights light sources. */ uint8_t *cie_coords_y; /*!< CIE y coordinates for n_lights light sources. */ diff --git a/include/ipu75xa/ia_imaging/ia_ob.h b/include/ipu75xa/ia_imaging/ia_ob.h index 97c2f3b..7f03d68 100644 --- a/include/ipu75xa/ia_imaging/ia_ob.h +++ b/include/ipu75xa/ia_imaging/ia_ob.h @@ -1,5 +1,5 @@ /* - * Copyright 2017-2018 Intel Corporation + * Copyright 2017-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,7 +73,7 @@ typedef struct { float cc01; float cc10; float cc11; -} ia_ob_output; /*!< OB ouput for 4 color components */ +} ia_ob_output; /*!< OB output for 4 color components */ LIBEXPORT ia_ob* ia_ob_init(void); diff --git a/include/ipu75xa/ia_imaging/ia_pal_types_isp_ids_autogen.h b/include/ipu75xa/ia_imaging/ia_pal_types_isp_ids_autogen.h index 4a533d2..fd4a35b 100644 --- a/include/ipu75xa/ia_imaging/ia_pal_types_isp_ids_autogen.h +++ b/include/ipu75xa/ia_imaging/ia_pal_types_isp_ids_autogen.h @@ -40,6 +40,7 @@ typedef enum ia_pal_uuid_isp_acm_1_1 = 13026, ia_pal_uuid_isp_acm_1_2 = 17531, ia_pal_uuid_isp_aestatistics_2_1 = 55073, + ia_pal_uuid_isp_b2b = 45372, ia_pal_uuid_isp_b2i_ds_1_1 = 40299, ia_pal_uuid_isp_sw_scaler = 19706, ia_pal_uuid_isp_bnlm_3_3 = 21777, @@ -59,6 +60,7 @@ typedef enum ia_pal_uuid_isp_glim_2_0 = 36029, ia_pal_uuid_isp_gltm_2_0 = 54721, ia_pal_uuid_isp_gmv_statistics_1_0 = 61146, + ia_pal_uuid_isp_imv = 33331, ia_pal_uuid_isp_ifd_pipe_1_3 = 55223, ia_pal_uuid_isp_ifd_pipe_long_1_3 = 52982, ia_pal_uuid_isp_ifd_pipe_short_smth_1_3 = 49695, diff --git a/include/ipu75xa/ia_imaging/ia_statistics_types.h b/include/ipu75xa/ia_imaging/ia_statistics_types.h index b93d1cf..4aab6b7 100644 --- a/include/ipu75xa/ia_imaging/ia_statistics_types.h +++ b/include/ipu75xa/ia_imaging/ia_statistics_types.h @@ -64,7 +64,7 @@ typedef struct } ia_filter_response; /*! - * \brief Convolution filter respose statistics + * \brief Convolution filter response statistics * As defined in the AIQ statistics specification. */ typedef struct diff --git a/include/ipu75xa/ia_imaging/ia_view_types.h b/include/ipu75xa/ia_imaging/ia_view_types.h index 54861a3..7969ed1 100644 --- a/include/ipu75xa/ia_imaging/ia_view_types.h +++ b/include/ipu75xa/ia_imaging/ia_view_types.h @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 Intel Corporation + * Copyright 2017-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -160,7 +160,7 @@ typedef struct ia_view_projection_type_t type; /*!< type: Projection type to be used*/ double scale_factor_1[2]; /*!< scale_factor_1: Internal scale factor calculated*/ double scale_factor_2[2]; /*!< scale_factor_2: Internal scale factor calculated*/ - double inv_f_pi; /*!< inv_f_pi is inverse focal lenght pi: Internal parameter*/ + double inv_f_pi; /*!< inv_f_pi is inverse focal length pi: Internal parameter*/ double bowl_radius_sqr; double bowl_scale; } ia_view_projection_t; @@ -175,7 +175,7 @@ typedef struct /*!< Projections the view */ ia_view_projection_t projection; - /*!< Pre Affine Matrix: Window rotatoin and scale*/ + /*!< Pre Affine Matrix: Window rotation and scale*/ float pre_affine_scale_matrix[2][2]; /*!< Pre Affine Matrix: Translation*/ diff --git a/include/ipu7x/ia_imaging/CCAMacro.h b/include/ipu7x/ia_imaging/CCAMacro.h index d2948c0..0faf8c6 100644 --- a/include/ipu7x/ia_imaging/CCAMacro.h +++ b/include/ipu7x/ia_imaging/CCAMacro.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2024 Intel Corporation. + * Copyright (C) 2021-2025 Intel Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,7 +34,7 @@ namespace cca { /* * TODO: * This config file should be generated automatically to support different - * platforms or products, because the below defintions should depend on + * platforms or products, because the below definitions should depend on * sensor, IPU, etc. */ /** diff --git a/include/ipu7x/ia_imaging/IntelCCATypes.h b/include/ipu7x/ia_imaging/IntelCCATypes.h index d4db0f5..8228188 100644 --- a/include/ipu7x/ia_imaging/IntelCCATypes.h +++ b/include/ipu7x/ia_imaging/IntelCCATypes.h @@ -381,6 +381,7 @@ typedef struct { bool bAssitLightOn; /*!< Flag indicating if the AF assist light is on. */ uint8_t AECFrameDelay; /*!< Frame delay for auto exposure to take effect. */ bool hasEmbeddedData; /*!< Flag indicating if embedded data is available. */ + ia_acs_stats acs_stats; /*acs parameters*/ } cca_stats_params; /*! @@ -601,6 +602,7 @@ typedef struct { uint64_t seq_id; /*!< Optional. Sequence number for AIC run. */ uint32_t dvs_id; /*!< Optional. Sequence number for DVS. */ int32_t ptz_zoom_active; /*!< Optional. b2i_DS need the parameter for calclate kernel_width. */ + float32_t zoom_factor; /*!< Optional. zoom factor. */ ia_isp_feature_setting nr_setting; /*!< Mandatory. Feature setting for noise reduction algorithms. */ ia_isp_feature_setting ee_setting; /*!< Mandatory. Feature setting for edge enhancement algorithms. */ int8_t manual_brightness; /*!< Optional. Manual brightness value range [-128,127]. */ diff --git a/include/ipu7x/ia_imaging/ia_aic_class.h b/include/ipu7x/ia_imaging/ia_aic_class.h index 9f3045b..85f971c 100644 --- a/include/ipu7x/ia_imaging/ia_aic_class.h +++ b/include/ipu7x/ia_imaging/ia_aic_class.h @@ -1,7 +1,7 @@ /* * INTEL CONFIDENTIAL * - * Copyright (C) 2018-2024 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * This software and the related documents are Intel copyrighted materials, * and your use of them is governed by the express license under which they @@ -202,7 +202,7 @@ class LIBEXPORT IaAic * * \param [in] group_id unique identifier for this group of kernels in this context * \param [in] terminal_index index to terminal - * \param [in] target Pointer to buffer desciptor where this function stores the buffer information + * \param [in] target Pointer to buffer descriptor where this function stores the buffer information * \param [in] fragment_index in case of striping, indicates the current stripe index that we get buffer for. In case striping is not supported for this specific buffer or at all, 0 should be used * * return ia_err_none in success. Errorcode on failure diff --git a/include/ipu7x/ia_imaging/ia_aic_types.h b/include/ipu7x/ia_imaging/ia_aic_types.h index a178eeb..d5ad617 100644 --- a/include/ipu7x/ia_imaging/ia_aic_types.h +++ b/include/ipu7x/ia_imaging/ia_aic_types.h @@ -57,11 +57,23 @@ enum IaAicBufferTypes iaAicBufferTypeNotSet }; +struct IaAicUpscalerFragDesc +{ + uint16_t fragmentInputCropLeft; /*!< The amount of pixels to crop on the left before upscaling. */ + uint16_t fragmentInputCropRight; /*!< The amount of pixels to crop on the right before upscaling. */ +}; + struct IaAicFragmentDesc //must be aligned with: ia_pac_fragment_desc in ia_pac_frag_types { uint16_t fragmentInputWidth; /*!< The input width of the fragment. */ uint16_t fragmentOutputWidth; /*!< The output width of the fragment. */ uint16_t fragmentStartX; /*!< The x offset from the top-left corner of the full image. */ + + // Kernel specific additions + union + { + IaAicUpscalerFragDesc upscalerFragDesc; + }; /*!< Extended fragment description. */ }; @@ -92,7 +104,7 @@ struct IaBinaryData struct ImagingKernelFormatInfo { uint32_t inputFormat; /*!< FourCC of format in input edge of the kernel - (can be used to retrieve full format descrition from ISP format bridge */ + (can be used to retrieve full format description from ISP format bridge */ uint32_t outputFormat; /*!< FourCC of format in output edge of the kernel */ }; @@ -148,6 +160,7 @@ struct IaAicInputParams ia_dvs_image_transformation *gdcTransformation; /*!< Mandatory. Image transformation parameters for GDC5 ISP FW. This feature replaces the need for morph_table usage.*/ ia_media_format mediaFormat; /*!< Mandatory. Selected Digital television output format.(e.g. BT709) */ int32_t ptz_zoom_active; + float32_t zoom_factor; /*!< Mandatory. Zoom factor for zoom mode. If ptz_zoom_active is false, zoom_factor is 1.0. */ /* Optional parameters */ char manualBrightness; /*!< Optional. Manual brightness value range [-128,127]. Value 0 means no change. */ @@ -177,7 +190,7 @@ typedef ia_ccat_frame_statistics IaCcatStatistics; typedef uint32_t IaAicStructuralParameter; // ========================================================================== -// Depricated interface +// Deprecated interface // ========================================================================== typedef class IaAic ia_aic_ctx_t; diff --git a/include/ipu7x/ia_imaging/ia_aiq.h b/include/ipu7x/ia_imaging/ia_aiq.h index f0dc615..6c30ac8 100644 --- a/include/ipu7x/ia_imaging/ia_aiq.h +++ b/include/ipu7x/ia_imaging/ia_aiq.h @@ -222,7 +222,7 @@ ia_aiq_set_tuning(ia_aiq *ia_aiq_ptr, /*! * \brief De-initialize IA_AIQ and its submodules. - * All memory allocated by AIQ algoriths are freed. AIQ handle can no longer be used. + * All memory allocated by AIQ algorithms are freed. AIQ handle can no longer be used. * * \param[in] ia_aiq_ptr Mandatory.\n * AIQ instance handle. diff --git a/include/ipu7x/ia_imaging/ia_aiq_types.h b/include/ipu7x/ia_imaging/ia_aiq_types.h index 08f1b42..a4a9fcd 100644 --- a/include/ipu7x/ia_imaging/ia_aiq_types.h +++ b/include/ipu7x/ia_imaging/ia_aiq_types.h @@ -369,6 +369,7 @@ typedef struct { ia_aiq_ae_feature_setting red_eye_reduction_flash; /*!< AEC will propose flashes before pre-flashes to reduce red eye effect. */ ia_aiq_ae_feature_setting fill_in_flash; /*!< AEC will propose flash in back light situations, where target is close enough. */ ia_aiq_ae_feature_setting continuous_flicker_detection; /*!< AEC runs the flicker detection algorithm continuously in the VF */ + ia_aiq_ae_feature_setting flicker_detection_v2; /*!< AEC will run the new flicker detection algorithm */ } ia_aiq_ae_features; diff --git a/include/ipu7x/ia_imaging/ia_camera_types.h b/include/ipu7x/ia_imaging/ia_camera_types.h index 6fa313c..70b0c12 100644 --- a/include/ipu7x/ia_imaging/ia_camera_types.h +++ b/include/ipu7x/ia_imaging/ia_camera_types.h @@ -1,5 +1,5 @@ /* - * Copyright 2023 Intel Corporation + * Copyright 2023-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -112,7 +112,7 @@ typedef struct { typedef struct { float32_t rlut[IA_CAMERA_PARAMETERS_RADIAL_DISTORTION_LUT_SIZE_MAX]; //the rgb_rlut calibration table - ia_rectify_sensor_t calib_sensor; //the "input" part in the RGB calibratoin table + ia_rectify_sensor_t calib_sensor; //the "input" part in the RGB calibration table ia_rectify_calib_t calib_rectified; //the "rectified" part in the RGB calibration table diff --git a/include/ipu7x/ia_imaging/ia_ccat_types.h b/include/ipu7x/ia_imaging/ia_ccat_types.h index 3c8a878..ffcfca1 100644 --- a/include/ipu7x/ia_imaging/ia_ccat_types.h +++ b/include/ipu7x/ia_imaging/ia_ccat_types.h @@ -141,7 +141,7 @@ typedef struct uint64_t frame_id; /*!< Mandatory. ID for the captured frame. */ uint64_t frame_timestamp; /*!< Mandatory. Time stamp for captured frame. */ ia_rectangle statistics_crop_area; /*!< Mandatory. RGBS and AF grid area crop with respect to full field of view of sensor output using (relative)ranges from ia_coordinate.h. */ - float32_t stitched_stats_norm_factor; /*!< Mandatory. For companded pipe usually statistivs represent more than 16bits then factor > 1 depends on highest bit represent by stat. */ + float32_t stitched_stats_norm_factor; /*!< Mandatory. For companded pipe usually statistivs represent more than 16bits then factor > 1 depends on highest bit represent by stat. */ uint32_t rgbs_stats_bit_depth; /*!< Mandatory. indicate the bit depth of rgbs stats */ int32_t cropped_image_height; /*!< Mandatory. Cropped RGBS raw height */ #ifdef IA_CCAT_EXTERNAL_RGB_HISTOGRAMS_ENABLED @@ -165,7 +165,7 @@ typedef struct #ifdef IA_CCAT_DEPTH_GRID_ENABLED ia_depth_grid depth_grid; /*!< Optional. Depth grid. */ #endif - ia_acs_stats acs_stats; /*!< Optional. Statistics from the ACS sensor (if avaialble) .*/ + ia_acs_stats acs_stats; /*!< Optional. Statistics from the ACS sensor (if available) .*/ } ia_ccat_frame_statistics; typedef struct @@ -256,7 +256,7 @@ typedef enum ccat_project_adaption_bitmap_3 = 1 << 3, /*!< is for vcx */ ccat_project_adaption_bitmap_4 = 1 << 4, /*!< is for AF document mode in IPU6 */ ccat_project_adaption_bitmap_5 = 1 << 5, /*!< is for MSFT OV02C10 NVM issue */ - ccat_project_adaption_bitmap_6 = 1 << 6, /*!< is for flicker v2 mode */ + ccat_project_adaption_bitmap_6 = 1 << 6, /*!< TBD */ ccat_project_adaption_bitmap_7 = 1 << 7, /*!< TBD */ ccat_project_adaption_bitmap_8 = 1 << 8, /*!< TBD */ ccat_project_adaption_bitmap_9 = 1 << 9, /*!< TBD */ diff --git a/include/ipu7x/ia_imaging/ia_cmc_types.h b/include/ipu7x/ia_imaging/ia_cmc_types.h index 32cd910..c3bd5c2 100644 --- a/include/ipu7x/ia_imaging/ia_cmc_types.h +++ b/include/ipu7x/ia_imaging/ia_cmc_types.h @@ -103,7 +103,7 @@ typedef struct */ typedef struct { - float matrix[3][3]; /*!< 3x3 accurate CCM, each consequtive elements sum to 1. */ + float matrix[3][3]; /*!< 3x3 accurate CCM, each consecutive elements sum to 1. */ } cmc_color_matrix; /*! @@ -162,7 +162,8 @@ typedef enum { cmc_nvm_interpolation_polynomial, cmc_nvm_interpolation_bi_cubic, - cmc_nvm_interpolation_polynomial_crop_two_pixels + cmc_nvm_interpolation_polynomial_crop_two_pixels, + cmc_nvm_interpolation_polynomial_with_valid_area } cmc_nvm_interpolation; @@ -581,13 +582,13 @@ typedef struct */ typedef struct { - cie_coords_t cie_coords; /*!< Light source CIE xy coordinates. */ - chromaticity_t chromaticity_response; /*!< Avg Chromaticity response for R/G anf B/G.*/ + cie_coords_t cie_coords; /*!< Light source CIE xy coordinates. */ + chromaticity_t chromaticity_response; /*!< Avg Chromaticity response for R/G anf B/G.*/ } cmc_lightsource_t; #define SIZEOF_CMC_LIGHTSOURCE_T 8U /*! - * \brief CMC Chromaticity Response + * \brief ACS Lightsource definition. */ typedef struct { @@ -636,8 +637,8 @@ typedef struct cmc_light_source light_src_type; /*!< Light-source type. See enum cmc_light_source. */ chromaticity_t chromaticity; /*!< Chromaticity (sensor) in R/G, B/G plane. */ cie_coords_t cie_coords; /*!< CIE x and y coordinates. */ - int32_t matrix_accurate[9]; /*!< 3x3 accurate CCM, each 3 consequtive elemets sum to 1. */ - int32_t matrix_preferred[9]; /*!< 3x3 preferred CCM, each 3 consequtive elemets sum to 1. */ + int32_t matrix_accurate[9]; /*!< 3x3 accurate CCM, each 3 consecutive elements sum to 1. */ + int32_t matrix_preferred[9]; /*!< 3x3 preferred CCM, each 3 consecutive elements sum to 1. */ } cmc_color_matrix_t; #define SIZEOF_CMC_COLOR_MATRIX_T 84U @@ -920,12 +921,10 @@ typedef struct */ typedef struct { - cmc_lightsource_acs_extension_t* cmc_lightsources_avg; - cmc_lightsource_acs_extension_t* cmc_lightsources_hi; - cmc_lightsource_acs_extension_t* cmc_lightsources_lo; - cmc_lightsource_acs_extension_t* cmc_lightsources_nvm; + uint8_t enable_acs; /*!< Is ACS data valid. */ + cmc_lightsource_acs_extension_t* cmc_lightsources_acs_avg; /*!< Average light sources with ACS data. */ } cmc_chromaticity_response_v102_t; -#define SIZEOF_CMC_CHROMATICITY_RESPONSE_V102 32U +#define SIZEOF_CMC_CHROMATICITY_RESPONSE_V102 1U /*! * \brief Parametric model coefficients for the average chromaticity locus and CCT curve @@ -1194,7 +1193,7 @@ typedef struct */ typedef struct { - float color_matrix[9]; /*!< 3x3 accurate CCM, each consequtive elements sum to 1. */ + float color_matrix[9]; /*!< 3x3 accurate CCM, each consecutive elements sum to 1. */ } cmc_acm_color_matrix_t; #define SIZEOF_CMC_ACM_COLOR_MATRIX_T 36U diff --git a/include/ipu7x/ia_imaging/ia_configuration.h b/include/ipu7x/ia_imaging/ia_configuration.h index ed1aad5..b1ed4c9 100644 --- a/include/ipu7x/ia_imaging/ia_configuration.h +++ b/include/ipu7x/ia_imaging/ia_configuration.h @@ -40,8 +40,8 @@ #define IA_AEC_EXPOSURES_MAX_NUM 10 #define IA_AEC_EXPOSURE_PLANS_NUM 4 #define IA_AEC_FEATURE_WEIGHT_GRID -#define IA_AEC_WEIGHT_GRID_WIDTH 32 -#define IA_AEC_WEIGHT_GRID_HEIGHT 24 +#define IA_AEC_WEIGHT_GRID_WIDTH 100 +#define IA_AEC_WEIGHT_GRID_HEIGHT 100 #define IA_AEC_FEATURE_CALIBRATION_DATA #define IA_AEC_FEATURE_FLASH #define IA_AEC_FLASHES_NUM 2 diff --git a/include/ipu7x/ia_imaging/ia_dvs_deprecated.h b/include/ipu7x/ia_imaging/ia_dvs_deprecated.h index 1f93351..1fe2fc7 100644 --- a/include/ipu7x/ia_imaging/ia_dvs_deprecated.h +++ b/include/ipu7x/ia_imaging/ia_dvs_deprecated.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2019 Intel Corporation + * Copyright 2014-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ typedef struct This allows DVS to generate morphing table which points are outside of the image area but still inside GDC buffer (padding area). This might be the case e.g. if LDC grid is barrel shaped. */ - ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameteres in native resolution (without any scaling or binning). + ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameters in native resolution (without any scaling or binning). If scaling is performed before cropping, cropping offsets need to be calculated in native resolution. Also if cropping is done in multiple places, everything needs to be combined together. @@ -93,4 +93,4 @@ ia_dvs_config(ia_dvs_state *dvs_state, } #endif -#endif /* _IA_DVS_DEPRECATED_H_ */ \ No newline at end of file +#endif /* _IA_DVS_DEPRECATED_H_ */ diff --git a/include/ipu7x/ia_imaging/ia_dvs_types.h b/include/ipu7x/ia_imaging/ia_dvs_types.h index 27713b4..58d1a2a 100644 --- a/include/ipu7x/ia_imaging/ia_dvs_types.h +++ b/include/ipu7x/ia_imaging/ia_dvs_types.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2021 Intel Corporation + * Copyright 2014-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ typedef struct t_dvs_facade ia_dvs_state; /** DVS Algorithm. * These settings specify the members of correction axes. - * ia_dvs_algorihm_0_axis is a special mode. In this case, library does not compensate the + * ia_dvs_algorithm_0_axis is a special mode. In this case, library does not compensate the * motion, works for digital zoom and distortion correction. */ typedef enum @@ -176,7 +176,7 @@ typedef struct This allows DVS to generate morphing table which points are outside of the image area but still inside GDC buffer (padding area). This might be the case e.g. if LDC grid is barrel shaped. */ - ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameteres in native resolution (without any scaling or binning). + ia_dvs_crop_params crop_params; /**< Sensor and ISP cropping parameters in native resolution (without any scaling or binning). If scaling is performed before cropping, cropping offsets need to be calculated in native resolution. Also if cropping is done in multiple places, everything needs to be combined together. diff --git a/include/ipu7x/ia_imaging/ia_mkn_types.h b/include/ipu7x/ia_imaging/ia_mkn_types.h index 3f8b2c6..4a91400 100644 --- a/include/ipu7x/ia_imaging/ia_mkn_types.h +++ b/include/ipu7x/ia_imaging/ia_mkn_types.h @@ -54,7 +54,7 @@ typedef void ia_mkn; /*! * Start of MKN System enumeration set. * \brief Enumerations set for Maker Note System. - * This part contatins two enumerations: + * This part contains two enumerations: * - 'ia_mkn_dfid', describes data type of the 'Data' field in the MKN record; * - 'ia_mkn_dnid',describes a name (or functionality) of data in the 'Data' field. * To modify this file a following procedure is used: diff --git a/include/ipu7x/ia_imaging/ia_nvm.h b/include/ipu7x/ia_imaging/ia_nvm.h index ef5527a..e0f6670 100644 --- a/include/ipu7x/ia_imaging/ia_nvm.h +++ b/include/ipu7x/ia_imaging/ia_nvm.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL - * Copyright (c) 2012-2022 Intel Corporation + * Copyright (c) 2012-2025 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -128,8 +128,8 @@ typedef struct uint8_t vcm_bits; /*!< VCM register bit depth (8 or 16). */ int16_t *vcm_af_near; /*!< VCM register values for n_pos for AF at near calibration distance (supplier specific). */ int16_t *vcm_af_far; /*!< VCM register values for n_pos for AF at far calibration distance (supplier specific). */ - int16_t *vcm_af_start; /*!< VCM register values for n_pos for AF at lens start.DEPRICATED.the parameter must not be used */ - int16_t *vcm_af_end; /*!< VCM register values for n_pos for AF at lens end.DEPRICATED the parameter must not be used */ + int16_t *vcm_af_start; /*!< VCM register values for n_pos for AF at lens start.DEPRECATED.the parameter must not be used */ + int16_t *vcm_af_end; /*!< VCM register values for n_pos for AF at lens end.DEPRECATED the parameter must not be used */ uint8_t n_lights; /*!< Number of light sources used for LSC and AWB. */ uint8_t *cie_coords_x; /*!< CIE x coordinates for n_lights light sources. */ uint8_t *cie_coords_y; /*!< CIE y coordinates for n_lights light sources. */ diff --git a/include/ipu7x/ia_imaging/ia_ob.h b/include/ipu7x/ia_imaging/ia_ob.h index 97c2f3b..7f03d68 100644 --- a/include/ipu7x/ia_imaging/ia_ob.h +++ b/include/ipu7x/ia_imaging/ia_ob.h @@ -1,5 +1,5 @@ /* - * Copyright 2017-2018 Intel Corporation + * Copyright 2017-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,7 +73,7 @@ typedef struct { float cc01; float cc10; float cc11; -} ia_ob_output; /*!< OB ouput for 4 color components */ +} ia_ob_output; /*!< OB output for 4 color components */ LIBEXPORT ia_ob* ia_ob_init(void); diff --git a/include/ipu7x/ia_imaging/ia_statistics_types.h b/include/ipu7x/ia_imaging/ia_statistics_types.h index b93d1cf..4aab6b7 100644 --- a/include/ipu7x/ia_imaging/ia_statistics_types.h +++ b/include/ipu7x/ia_imaging/ia_statistics_types.h @@ -64,7 +64,7 @@ typedef struct } ia_filter_response; /*! - * \brief Convolution filter respose statistics + * \brief Convolution filter response statistics * As defined in the AIQ statistics specification. */ typedef struct diff --git a/include/ipu7x/ia_imaging/ia_view_types.h b/include/ipu7x/ia_imaging/ia_view_types.h index 54861a3..7969ed1 100644 --- a/include/ipu7x/ia_imaging/ia_view_types.h +++ b/include/ipu7x/ia_imaging/ia_view_types.h @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 Intel Corporation + * Copyright 2017-2025 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -160,7 +160,7 @@ typedef struct ia_view_projection_type_t type; /*!< type: Projection type to be used*/ double scale_factor_1[2]; /*!< scale_factor_1: Internal scale factor calculated*/ double scale_factor_2[2]; /*!< scale_factor_2: Internal scale factor calculated*/ - double inv_f_pi; /*!< inv_f_pi is inverse focal lenght pi: Internal parameter*/ + double inv_f_pi; /*!< inv_f_pi is inverse focal length pi: Internal parameter*/ double bowl_radius_sqr; double bowl_scale; } ia_view_projection_t; @@ -175,7 +175,7 @@ typedef struct /*!< Projections the view */ ia_view_projection_t projection; - /*!< Pre Affine Matrix: Window rotatoin and scale*/ + /*!< Pre Affine Matrix: Window rotation and scale*/ float pre_affine_scale_matrix[2][2]; /*!< Pre Affine Matrix: Translation*/ diff --git a/lib/firmware/intel/ipu/ipu7ptl_fw.bin b/lib/firmware/intel/ipu/ipu7ptl_fw.bin index 8503013fac3a20e03f7f5568912dbd61bca207c0..491f61e64e9d779da3fdb1733c03405eec074a17 100644 GIT binary patch delta 164357 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