feat(isp): support AWB driver setting wbgain and subwindow feature

This commit is contained in:
armando
2025-09-15 10:28:02 +08:00
parent 8410210c9a
commit 4cd83738f9
8 changed files with 224 additions and 20 deletions

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -164,6 +164,18 @@ esp_err_t esp_isp_awb_controller_start_continuous_statistics(isp_awb_ctlr_t awb_
*/
esp_err_t esp_isp_awb_controller_stop_continuous_statistics(isp_awb_ctlr_t awb_ctlr);
/**
* @brief Set AWB white balance gain
*
* @param[in] awb_ctlr AWB controller handle
* @param[in] gain AWB white balance gain
* @return
* - ESP_OK On success
* - ESP_ERR_INVALID_ARG Null pointer
* - ESP_ERR_INVALID_STATE Driver state is invalid.
*/
esp_err_t esp_isp_awb_controller_set_wb_gain(isp_awb_ctlr_t awb_ctlr, isp_awb_gain_t gain);
/**
* @brief Event data of callbacks
*/

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -39,14 +39,25 @@ typedef struct {
int luminance[ISP_AF_WINDOW_NUM]; ///< Luminance, it refers how luminant an image is
} isp_af_result_t;
/**
* @brief ISP AWB subwindow result
*/
typedef struct {
uint32_t white_patch_num[ISP_AWB_WINDOW_X_NUM][ISP_AWB_WINDOW_Y_NUM]; ///< white patch number that counted by AWB in the subwindow
uint32_t sum_r[ISP_AWB_WINDOW_X_NUM][ISP_AWB_WINDOW_Y_NUM]; ///< The sum of R channel of these white patches
uint32_t sum_g[ISP_AWB_WINDOW_X_NUM][ISP_AWB_WINDOW_Y_NUM]; ///< The sum of G channel of these white patches
uint32_t sum_b[ISP_AWB_WINDOW_X_NUM][ISP_AWB_WINDOW_Y_NUM]; ///< The sum of B channel of these white patches
} isp_awb_subwin_stat_result_t;
/**
* @brief ISP AWB result
*/
typedef struct {
uint32_t white_patch_num; ///< white patch number that counted by AWB in the window
uint32_t sum_r; ///< The sum of R channel of these white patches
uint32_t sum_g; ///< The sum of G channel of these white patches
uint32_t sum_b; ///< The sum of B channel of these white patches
uint32_t white_patch_num; ///< white patch number that counted by AWB in the window
uint32_t sum_r; ///< The sum of R channel of these white patches
uint32_t sum_g; ///< The sum of G channel of these white patches
uint32_t sum_b; ///< The sum of B channel of these white patches
isp_awb_subwin_stat_result_t subwin_result; ///< The AWB subwindow statistics result
} isp_awb_stat_result_t;
/**