From 3cc4eea14e16cbf9303109f463c3265669af7401 Mon Sep 17 00:00:00 2001 From: armando Date: Mon, 23 Mar 2026 11:20:57 +0800 Subject: [PATCH 1/2] change(isp): added hres and vres limitation check --- components/esp_driver_isp/src/isp_core.c | 1 + 1 file changed, 1 insertion(+) diff --git a/components/esp_driver_isp/src/isp_core.c b/components/esp_driver_isp/src/isp_core.c index ab7af6f7da7..0bfa8aebbaf 100644 --- a/components/esp_driver_isp/src/isp_core.c +++ b/components/esp_driver_isp/src/isp_core.c @@ -75,6 +75,7 @@ esp_err_t esp_isp_new_processor(const esp_isp_processor_cfg_t *proc_config, isp_ { esp_err_t ret = ESP_FAIL; ESP_RETURN_ON_FALSE(proc_config && ret_proc, ESP_ERR_INVALID_ARG, TAG, "invalid argument: null pointer"); + ESP_RETURN_ON_FALSE(proc_config->h_res <= ISP_LL_HSIZE_MAX && proc_config->v_res <= ISP_LL_VSIZE_MAX, ESP_ERR_INVALID_ARG, TAG, "invalid h_res or v_res"); ESP_RETURN_ON_FALSE(proc_config->input_data_source != ISP_INPUT_DATA_SOURCE_DWGDMA, ESP_ERR_NOT_SUPPORTED, TAG, "input source not supported yet"); isp_processor_t *proc = heap_caps_calloc(1, sizeof(isp_processor_t), ISP_MEM_ALLOC_CAPS); From 2c29cfaca2ae58ffef63d56e180cb37910532d40 Mon Sep 17 00:00:00 2001 From: armando Date: Mon, 23 Mar 2026 11:31:30 +0800 Subject: [PATCH 2/2] change(isp): added lut table depth check --- components/esp_driver_isp/src/isp_lsc.c | 1 + components/hal/esp32p4/include/hal/isp_ll.h | 33 +++++++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/components/esp_driver_isp/src/isp_lsc.c b/components/esp_driver_isp/src/isp_lsc.c index 3c09320c783..e1c2b36d5e3 100644 --- a/components/esp_driver_isp/src/isp_lsc.c +++ b/components/esp_driver_isp/src/isp_lsc.c @@ -35,6 +35,7 @@ esp_err_t esp_isp_lsc_allocate_gain_array(isp_proc_handle_t isp_proc, esp_isp_ls int num_grids_x = ISP_LSC_GET_GRIDS(isp_proc->h_res); int num_grids_y = ISP_LSC_GET_GRIDS(isp_proc->v_res); ESP_LOGD(TAG, "num_grids_x_max: %d, num_grids_x: %d, num_grids_y_max: %d, num_grids_y: %d", num_grids_x_max, num_grids_y_max, num_grids_x, num_grids_y); + ESP_RETURN_ON_FALSE(num_grids_x * num_grids_y <= ISP_LL_LUT_LSC_SIZE_MAX, ESP_ERR_INVALID_ARG, TAG, "invalid number of grids, max is %d, num_grids_x: %d, num_grids_y: %d", ISP_LL_LUT_LSC_SIZE_MAX, num_grids_x, num_grids_y); ESP_RETURN_ON_FALSE(num_grids_x <= num_grids_x_max && num_grids_y <= num_grids_y_max, ESP_ERR_INVALID_ARG, TAG, "invalid h_res or v_res"); gain_array->gain_r = (isp_lsc_gain_t *)heap_caps_calloc(1, num_grids_x * num_grids_y * sizeof(isp_lsc_gain_t), ISP_MEM_ALLOC_CAPS); diff --git a/components/hal/esp32p4/include/hal/isp_ll.h b/components/hal/esp32p4/include/hal/isp_ll.h index 551add18a07..936fb11c287 100644 --- a/components/hal/esp32p4/include/hal/isp_ll.h +++ b/components/hal/esp32p4/include/hal/isp_ll.h @@ -106,13 +106,6 @@ extern "C" { ---------------------------------------------------------------*/ #define ISP_LL_BF_DEFAULT_TEMPLATE_VAL 15 -/*--------------------------------------------------------------- - DVP ----------------------------------------------------------------*/ -#define ISP_LL_DVP_DATA_TYPE_RAW8 0x2A -#define ISP_LL_DVP_DATA_TYPE_RAW10 0x2B -#define ISP_LL_DVP_DATA_TYPE_RAW12 0x2C - /*--------------------------------------------------------------- Color ---------------------------------------------------------------*/ @@ -122,12 +115,6 @@ extern "C" { #define ISP_LL_COLOR_BRIGNTNESS_MIN -128 #define ISP_LL_COLOR_BRIGNTNESS_MAX 127 -/*--------------------------------------------------------------- - LSC ----------------------------------------------------------------*/ -#define ISP_LL_LSC_GRID_HEIGHT 32 -#define ISP_LL_LSC_GRID_WIDTH 32 - /*--------------------------------------------------------------- CCM ---------------------------------------------------------------*/ @@ -140,6 +127,26 @@ extern "C" { #endif #define ISP_LL_CCM_MATRIX_TOT_BITS (ISP_LL_CCM_MATRIX_INT_BITS + ISP_LL_CCM_MATRIX_FRAC_BITS + 1) // including one sign bit +/*--------------------------------------------------------------- + DVP +---------------------------------------------------------------*/ +#define ISP_LL_DVP_DATA_TYPE_RAW8 0x2A +#define ISP_LL_DVP_DATA_TYPE_RAW10 0x2B +#define ISP_LL_DVP_DATA_TYPE_RAW12 0x2C + +/*--------------------------------------------------------------- + LSC +---------------------------------------------------------------*/ +#define ISP_LL_LSC_GRID_HEIGHT 32 +#define ISP_LL_LSC_GRID_WIDTH 32 + +/*--------------------------------------------------------------- + LUT +---------------------------------------------------------------*/ +#define ISP_LL_LUT_LSC_SIZE_MAX 560 +#define ISP_LL_LUT_DPC_SIZE_MAX 512 +#define ISP_LL_LUT_AWB_SIZE_MAX 104 + typedef union { struct { uint32_t fraction: ISP_LL_AWB_RGB_RATIO_FRAC_BITS;