diff options
Diffstat (limited to 'drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm')
4 files changed, 0 insertions, 392 deletions
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm.host.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm.host.c deleted file mode 100644 index 6d12e03..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm.host.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 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. - */ - -#include "type_support.h" -#include "ia_css_bnlm.host.h" - -#ifndef IA_CSS_NO_DEBUG -#include "ia_css_debug.h" /* ia_css_debug_dtrace() */ -#endif -#include <assert_support.h> - -#define BNLM_DIV_LUT_SIZE (12) -static const int32_t div_lut_nearests[BNLM_DIV_LUT_SIZE] = { - 0, 454, 948, 1484, 2070, 2710, 3412, 4184, 5035, 5978, 7025, 8191 -}; - -static const int32_t div_lut_slopes[BNLM_DIV_LUT_SIZE] = { - -7760, -6960, -6216, -5536, -4912, -4344, -3832, -3360, -2936, -2552, -2208, -2208 -}; - -static const int32_t div_lut_intercepts[BNLM_DIV_LUT_SIZE] = { - 8184, 7752, 7336, 6928, 6536, 6152, 5776, 5416, 5064, 4728, 4408, 4408 -}; - -/* Encodes a look-up table from BNLM public parameters to vmem parameters. - * Input: - * lut : bnlm_lut struct containing encoded vmem parameters look-up table - * lut_thr : array containing threshold values for lut - * lut_val : array containing output values related to lut_thr - * lut_size: Size of lut_val array - */ -static inline void -bnlm_lut_encode(struct bnlm_lut *lut, const int32_t *lut_thr, const int32_t *lut_val, const uint32_t lut_size) -{ - u32 blk, i; - const u32 block_size = 16; - const u32 total_blocks = ISP_VEC_NELEMS / block_size; - - /* Create VMEM LUTs from the threshold and value arrays. - * - * Min size of the LUT is 2 entries. - * - * Max size of the LUT is 16 entries, so that the LUT can fit into a - * single group of 16 elements inside a vector. - * Then these elements are copied into other groups inside the same - * vector. If the LUT size is less than 16, then remaining elements are - * set to 0. - */ - assert((lut_size >= 2) && (lut_size <= block_size)); - /* array lut_thr has (lut_size-1) entries */ - for (i = 0; i < lut_size-2; i++) { - /* Check if the lut_thr is monotonically increasing */ - assert(lut_thr[i] <= lut_thr[i+1]); - } - - /* Initialize */ - for (i = 0; i < total_blocks * block_size; i++) { - lut->thr[0][i] = 0; - lut->val[0][i] = 0; - } - - /* Copy all data */ - for (i = 0; i < lut_size - 1; i++) { - lut->thr[0][i] = lut_thr[i]; - lut->val[0][i] = lut_val[i]; - } - lut->val[0][i] = lut_val[i]; /* val has one more element than thr */ - - /* Copy data from first block to all blocks */ - for (blk = 1; blk < total_blocks; blk++) { - u32 blk_offset = blk * block_size; - for (i = 1; i < lut_size; i++) { - lut->thr[0][blk_offset + i] = lut->thr[0][i]; - lut->val[0][blk_offset + i] = lut->val[0][i]; - } - } -} - -/* - * - Encodes BNLM public parameters into VMEM parameters - * - Generates VMEM parameters which will needed internally ISP - */ -void -ia_css_bnlm_vmem_encode( - struct bnlm_vmem_params *to, - const struct ia_css_bnlm_config *from, - size_t size) -{ - int i; - (void)size; - - /* Initialize LUTs in VMEM parameters */ - bnlm_lut_encode(&to->mu_root_lut, from->mu_root_lut_thr, from->mu_root_lut_val, 16); - bnlm_lut_encode(&to->sad_norm_lut, from->sad_norm_lut_thr, from->sad_norm_lut_val, 16); - bnlm_lut_encode(&to->sig_detail_lut, from->sig_detail_lut_thr, from->sig_detail_lut_val, 16); - bnlm_lut_encode(&to->sig_rad_lut, from->sig_rad_lut_thr, from->sig_rad_lut_val, 16); - bnlm_lut_encode(&to->rad_pow_lut, from->rad_pow_lut_thr, from->rad_pow_lut_val, 16); - bnlm_lut_encode(&to->nl_0_lut, from->nl_0_lut_thr, from->nl_0_lut_val, 16); - bnlm_lut_encode(&to->nl_1_lut, from->nl_1_lut_thr, from->nl_1_lut_val, 16); - bnlm_lut_encode(&to->nl_2_lut, from->nl_2_lut_thr, from->nl_2_lut_val, 16); - bnlm_lut_encode(&to->nl_3_lut, from->nl_3_lut_thr, from->nl_3_lut_val, 16); - - /* Initialize arrays in VMEM parameters */ - memset(to->nl_th, 0, sizeof(to->nl_th)); - to->nl_th[0][0] = from->nl_th[0]; - to->nl_th[0][1] = from->nl_th[1]; - to->nl_th[0][2] = from->nl_th[2]; - - memset(to->match_quality_max_idx, 0, sizeof(to->match_quality_max_idx)); - to->match_quality_max_idx[0][0] = from->match_quality_max_idx[0]; - to->match_quality_max_idx[0][1] = from->match_quality_max_idx[1]; - to->match_quality_max_idx[0][2] = from->match_quality_max_idx[2]; - to->match_quality_max_idx[0][3] = from->match_quality_max_idx[3]; - - bnlm_lut_encode(&to->div_lut, div_lut_nearests, div_lut_slopes, BNLM_DIV_LUT_SIZE); - memset(to->div_lut_intercepts, 0, sizeof(to->div_lut_intercepts)); - for(i = 0; i < BNLM_DIV_LUT_SIZE; i++) { - to->div_lut_intercepts[0][i] = div_lut_intercepts[i]; - } - - memset(to->power_of_2, 0, sizeof(to->power_of_2)); - for (i = 0; i < (ISP_VEC_ELEMBITS-1); i++) { - to->power_of_2[0][i] = 1 << i; - } -} - -/* - Encodes BNLM public parameters into DMEM parameters */ -void -ia_css_bnlm_encode( - struct bnlm_dmem_params *to, - const struct ia_css_bnlm_config *from, - size_t size) -{ - (void)size; - to->rad_enable = from->rad_enable; - to->rad_x_origin = from->rad_x_origin; - to->rad_y_origin = from->rad_y_origin; - to->avg_min_th = from->avg_min_th; - to->max_min_th = from->max_min_th; - - to->exp_coeff_a = from->exp_coeff_a; - to->exp_coeff_b = from->exp_coeff_b; - to->exp_coeff_c = from->exp_coeff_c; - to->exp_exponent = from->exp_exponent; -} - -/* Prints debug traces for BNLM public parameters */ -void -ia_css_bnlm_debug_trace( - const struct ia_css_bnlm_config *config, - unsigned level) -{ - if (!config) - return; - -#ifndef IA_CSS_NO_DEBUG - ia_css_debug_dtrace(level, "BNLM:\n"); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "rad_enable", config->rad_enable); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "rad_x_origin", config->rad_x_origin); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "rad_y_origin", config->rad_y_origin); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "avg_min_th", config->avg_min_th); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "max_min_th", config->max_min_th); - - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "exp_coeff_a", config->exp_coeff_a); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "exp_coeff_b", config->exp_coeff_b); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "exp_coeff_c", config->exp_coeff_c); - ia_css_debug_dtrace(level, "\t%-32s = %d\n", "exp_exponent", config->exp_exponent); - - /* ToDo: print traces for LUTs */ -#endif /* IA_CSS_NO_DEBUG */ - -} diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm.host.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm.host.h deleted file mode 100644 index 675f6e5..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm.host.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 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_BNLM_HOST_H -#define __IA_CSS_BNLM_HOST_H - -#include "ia_css_bnlm_types.h" -#include "ia_css_bnlm_param.h" - -void -ia_css_bnlm_vmem_encode( - struct bnlm_vmem_params *to, - const struct ia_css_bnlm_config *from, - size_t size); - -void -ia_css_bnlm_encode( - struct bnlm_dmem_params *to, - const struct ia_css_bnlm_config *from, - size_t size); - -#ifndef IA_CSS_NO_DEBUG -void -ia_css_bnlm_debug_trace( - const struct ia_css_bnlm_config *config, - unsigned level); -#endif - -#endif /* __IA_CSS_BNLM_HOST_H */ diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_param.h deleted file mode 100644 index 2f4be43..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_param.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 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_BNLM_PARAM_H -#define __IA_CSS_BNLM_PARAM_H - -#include "type_support.h" -#include "vmem.h" /* needed for VMEM_ARRAY */ - -struct bnlm_lut { - VMEM_ARRAY(thr, ISP_VEC_NELEMS); /* thresholds */ - VMEM_ARRAY(val, ISP_VEC_NELEMS); /* values */ -}; - -struct bnlm_vmem_params { - VMEM_ARRAY(nl_th, ISP_VEC_NELEMS); - VMEM_ARRAY(match_quality_max_idx, ISP_VEC_NELEMS); - struct bnlm_lut mu_root_lut; - struct bnlm_lut sad_norm_lut; - struct bnlm_lut sig_detail_lut; - struct bnlm_lut sig_rad_lut; - struct bnlm_lut rad_pow_lut; - struct bnlm_lut nl_0_lut; - struct bnlm_lut nl_1_lut; - struct bnlm_lut nl_2_lut; - struct bnlm_lut nl_3_lut; - - /* LUTs used for division approximiation */ - struct bnlm_lut div_lut; - VMEM_ARRAY(div_lut_intercepts, ISP_VEC_NELEMS); - - /* 240x does not have an ISP instruction to left shift each element of a - * vector by different shift value. Hence it will be simulated by multiplying - * the elements by required 2^shift. */ - VMEM_ARRAY(power_of_2, ISP_VEC_NELEMS); -}; - -/* BNLM ISP parameters */ -struct bnlm_dmem_params { - bool rad_enable; - int32_t rad_x_origin; - int32_t rad_y_origin; - int32_t avg_min_th; - int32_t max_min_th; - - int32_t exp_coeff_a; - uint32_t exp_coeff_b; - int32_t exp_coeff_c; - uint32_t exp_exponent; -}; - -#endif /* __IA_CSS_BNLM_PARAM_H */ diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_types.h deleted file mode 100644 index 87e0f19..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_types.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 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_BNLM_TYPES_H -#define __IA_CSS_BNLM_TYPES_H - -/* @file -* CSS-API header file for Bayer Non-Linear Mean parameters. -*/ - -#include "type_support.h" /* int32_t */ - -/* Bayer Non-Linear Mean configuration - * - * \brief BNLM public parameters. - * \details Struct with all parameters for the BNLM kernel that can be set - * from the CSS API. - * - * ISP2.6.1: BNLM is used. - */ -struct ia_css_bnlm_config { - bool rad_enable; /** Enable a radial dependency in a weight calculation */ - int32_t rad_x_origin; /** Initial x coordinate for a radius calculation */ - int32_t rad_y_origin; /** Initial x coordinate for a radius calculation */ - /* a threshold for average of weights if this < Th, do not denoise pixel */ - int32_t avg_min_th; - /* minimum weight for denoising if max < th, do not denoise pixel */ - int32_t max_min_th; - - /**@{*/ - /* Coefficient for approximation, in the form of (1 + x / N)^N, - * that fits the first-order exp() to default exp_lut in BNLM sheet - * */ - int32_t exp_coeff_a; - uint32_t exp_coeff_b; - int32_t exp_coeff_c; - uint32_t exp_exponent; - /**@}*/ - - int32_t nl_th[3]; /** Detail thresholds */ - - /* Index for n-th maximum candidate weight for each detail group */ - int32_t match_quality_max_idx[4]; - - /**@{*/ - /* A lookup table for 1/sqrt(1+mu) approximation */ - int32_t mu_root_lut_thr[15]; - int32_t mu_root_lut_val[16]; - /**@}*/ - /**@{*/ - /* A lookup table for SAD normalization */ - int32_t sad_norm_lut_thr[15]; - int32_t sad_norm_lut_val[16]; - /**@}*/ - /**@{*/ - /* A lookup table that models a weight's dependency on textures */ - int32_t sig_detail_lut_thr[15]; - int32_t sig_detail_lut_val[16]; - /**@}*/ - /**@{*/ - /* A lookup table that models a weight's dependency on a pixel's radial distance */ - int32_t sig_rad_lut_thr[15]; - int32_t sig_rad_lut_val[16]; - /**@}*/ - /**@{*/ - /* A lookup table to control denoise power depending on a pixel's radial distance */ - int32_t rad_pow_lut_thr[15]; - int32_t rad_pow_lut_val[16]; - /**@}*/ - /**@{*/ - /* Non linear transfer functions to calculate the blending coefficient depending on detail group */ - /* detail group 0 */ - /**@{*/ - int32_t nl_0_lut_thr[15]; - int32_t nl_0_lut_val[16]; - /**@}*/ - /**@{*/ - /* detail group 1 */ - int32_t nl_1_lut_thr[15]; - int32_t nl_1_lut_val[16]; - /**@}*/ - /**@{*/ - /* detail group 2 */ - int32_t nl_2_lut_thr[15]; - int32_t nl_2_lut_val[16]; - /**@}*/ - /**@{*/ - /* detail group 3 */ - int32_t nl_3_lut_thr[15]; - int32_t nl_3_lut_val[16]; - /**@}*/ - /**@}*/ -}; - -#endif /* __IA_CSS_BNLM_TYPES_H */ |