diff --git a/freertos/cvitek/install/include/common/cvi_comm_3a.h b/freertos/cvitek/install/include/common/cvi_comm_3a.h index aeac8166f..4d0c32888 100644 --- a/freertos/cvitek/install/include/common/cvi_comm_3a.h +++ b/freertos/cvitek/install/include/common/cvi_comm_3a.h @@ -318,6 +318,8 @@ typedef struct _ISP_AWB_RESULT_S { CVI_U8 u8Saturation[4]; ISP_AWB_RAW_STAT_ATTR_S stRawStatAttr; CVI_BOOL bStable; + CVI_U8 u8AdjCASaturation; + CVI_U8 u8AdjCASatLuma; } ISP_AWB_RESULT_S; typedef struct _ISP_AWB_STAT_1_S { diff --git a/freertos/cvitek/install/include/common/cvi_comm_isp.h b/freertos/cvitek/install/include/common/cvi_comm_isp.h index 4bb998e96..2d2859a4f 100644 --- a/freertos/cvitek/install/include/common/cvi_comm_isp.h +++ b/freertos/cvitek/install/include/common/cvi_comm_isp.h @@ -869,7 +869,7 @@ typedef struct _ISP_AWB_EXTRA_LIGHTSOURCE_INFO_S { CVI_U8 u8Radius; /*RW; Range:[0x1, 0xFF]*/ } ISP_AWB_EXTRA_LIGHTSOURCE_INFO_S; -struct ST_ISP_AWB_INTERFERNCE_S { +struct ST_ISP_AWB_INTERFERENCE_S { CVI_U8 u8Mode; /*RW; Range:[0x0, 0x1]*/ CVI_U8 u8Limit; /*RW; Range:[0x32, 0x64]*/ CVI_U8 u8Radius; /*RW; Range:[0x1, 0xFF]*/ @@ -976,12 +976,15 @@ typedef struct _ISP_AWB_ATTR_EX_S { CVI_BOOL bMultiLightSourceEn; ISP_AWB_MULTI_LS_TYPE_E enMultiLSType; CVI_U16 u16MultiLSScaler; /*RW; Range:[0x0, 0x100]*/ + CVI_U16 u16MultiLSThr; /*RW; Range:[0x20, 0x200]*/ + CVI_U16 u16CALumaDiff; /*RW; Range:[0x0, 0x100]*/ + CVI_U16 u16CAAdjustRatio; /*RW; Range:[0x0, 0x10]*/ CVI_U16 au16MultiCTBin[AWB_CT_BIN_NUM]; /*RW; Range:[0x0, 0xFFFF]*/ CVI_U16 au16MultiCTWt[AWB_CT_BIN_NUM]; /*RW; Range:[0x0, 0x400]*/ CVI_BOOL bFineTunEn; CVI_U8 u8FineTunStrength; //AWB Algo 6 - struct ST_ISP_AWB_INTERFERNCE_S stInterfernce; + struct ST_ISP_AWB_INTERFERENCE_S stInterference; struct ST_ISP_AWB_SKIN_S stSkin; struct ST_ISP_AWB_SKY_S stSky; struct ST_ISP_AWB_GRASS_S stGrass; @@ -989,7 +992,6 @@ typedef struct _ISP_AWB_ATTR_EX_S { struct ST_ISP_AWB_SHIFT_LV_S stShiftLv; struct ST_ISP_AWB_REGION_S stRegion; CVI_U8 adjBgainMode; - CVI_U8 reserve[239]; } ISP_AWB_ATTR_EX_S;//keep size to 512 bytes typedef struct _ISP_MWB_ATTR_S { diff --git a/freertos/cvitek/install/lib/libdriver.a b/freertos/cvitek/install/lib/libdriver.a index f5aebdb70..1f5143e04 100644 Binary files a/freertos/cvitek/install/lib/libdriver.a and b/freertos/cvitek/install/lib/libdriver.a differ diff --git a/freertos/cvitek/task/audio/include/cviaudio_algo_interface.h b/freertos/cvitek/task/audio/include/cviaudio_algo_interface.h index b0775c629..7049dbafa 100644 --- a/freertos/cvitek/task/audio/include/cviaudio_algo_interface.h +++ b/freertos/cvitek/task/audio/include/cviaudio_algo_interface.h @@ -5,6 +5,7 @@ void *CviAud_Algo_Init(int s32FunctMask, void *param_info); int CviAud_Algo_Process(void *pHandle, uint64_t mic_in, uint64_t ref_in, uint64_t out, int iLength); +int CviAud_Algo_Fun_Config(void *pHandle, int u32OpenMask); void CviAud_Algo_DeInit(void *pHandle); void CviAud_Algo_GetVersion(char *pstrVersion); #ifdef NEXT_SSP_ALGO diff --git a/freertos/cvitek/task/audio/include/cviaudio_rtos_cmd.h b/freertos/cvitek/task/audio/include/cviaudio_rtos_cmd.h index d437252c4..9fa7f2ddd 100644 --- a/freertos/cvitek/task/audio/include/cviaudio_rtos_cmd.h +++ b/freertos/cvitek/task/audio/include/cviaudio_rtos_cmd.h @@ -158,6 +158,7 @@ typedef struct _ssp_spk_data_rtos_ret { #define CVIAUDIO_RTOS_CMD_SSP_INIT_BLOCK 0x0B #define CVIAUDIO_RTOS_CMD_SSP_PROC_BLOCK 0x0C #define CVIAUDIO_RTOS_CMD_SSP_DEINIT_BLOCK 0x0D +#define CVIAUDIO_RTOS_CMD_SSP_CONFIG_BLOCK 0x0E #define CVIAUDIO_RTOS_CMD_SSP_MAX 0xFF diff --git a/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.c b/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.c index 1be14a977..06ace16b7 100644 --- a/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.c +++ b/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.c @@ -326,7 +326,26 @@ void *audio_ssp_init(void *para_obj, unsigned int sample_rate) return (void *)pst3Ainfo; } +int audio_ssp_fun_config(void *handle, int u32OpenMask) +{ + struct st3AInfo *pst3Ainfo = (struct st3AInfo *)handle; + if (!pst3Ainfo) { + LOG_PRINTF("audio_ssp_process error.\n"); + return -1; + } + + if(!(pst3Ainfo && pst3Ainfo->bInitOk)) + { + LOG_ERROR("audio_ssp_process error params.\n"); + return -1; + } + + pst3Ainfo->para_obj.para_fun_config = u32OpenMask; + printf("para_fun_config = %d\n", pst3Ainfo->para_obj.para_fun_config); + + return 0; +} int audio_ssp_process(void *handle, short *mic_in, short *ref_in, short *dataout, int iLength) { diff --git a/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.h b/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.h index 6dd1c7c96..21808eb73 100644 --- a/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.h +++ b/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cvi_ssp_interface.h @@ -6,6 +6,7 @@ #define AEC_PRO_DATA_LEN (160) //for uplink VQE(MIC in) void *audio_ssp_init(void *para_obj, unsigned int sample_rate); +int audio_ssp_fun_config(void *handle, int u32OpenMask); int audio_ssp_process(void *handle, short *mic_in, short *ref_in, short *dataout, int iLength); int audio_ssp_deinit(void *handle); diff --git a/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cviaudio_algo_interface.c b/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cviaudio_algo_interface.c index 36a78bbd8..a7d049457 100644 --- a/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cviaudio_algo_interface.c +++ b/freertos/cvitek/task/audio/src/SSP_Algorithm_20220128/cviaudio_algo_interface.c @@ -204,6 +204,35 @@ int CviAud_Algo_Process(void *pHandle, uint64_t mic_in, } +/************************************************************************************** + * Function: CviAud_Algo_Fun_Config + * + * Description: free platform-specific data allocated by CviAud_Algo_Init + * + * Inputs: instance pointer (pHandle) + * Outputs: none + * + * Return: CVI_SUCCESS / CVI_FAILURE + **************************************************************************************/ +int CviAud_Algo_Fun_Config(void *pHandle, int u32OpenMask) +{ + int ret = 0; + + if (pHandle == NULL) { + printf("Null input [%s][%d]\n", __func__, __LINE__); + return -1; + } + + ret = audio_ssp_fun_config(pHandle, u32OpenMask); + if (ret != 0) { + printf("audio_ssp_process error ret(%d).\n", ret); + return -1; + } + + return ret; + +} + /************************************************************************************** * Function: CviAud_Algo_DeInit * diff --git a/freertos/cvitek/task/audio/src/riscv64/audio_main.c b/freertos/cvitek/task/audio/src/riscv64/audio_main.c index 21f7bafdb..9cc6a3760 100644 --- a/freertos/cvitek/task/audio/src/riscv64/audio_main.c +++ b/freertos/cvitek/task/audio/src/riscv64/audio_main.c @@ -165,7 +165,7 @@ void prvAudioRunTask(void *pvParameters) #endif cvi_audio_init_test(); - printf("pAudioRunTask run Version:20220519\n"); + aud_info("pAudioRunTask run Version:20220519\n"); xQueueAudioCmdqu = main_GetMODHandle(E_QUEUE_CMDQU); xQueueAudio = main_GetMODHandle(E_QUEUE_AUDIO); @@ -514,10 +514,10 @@ void prvAudioRunTask(void *pvParameters) aud_debug("[Rtos][%s][%d]....xxxxxxxcounter[%d]\n", __func__, __LINE__, counter); aud_debug("[Rtos]keep waiting....\n"); } else { - //printf("[Rtos][%s][%d]index[%d]not full\n", __func__, __LINE__, index); + //aud_info("[Rtos][%s][%d]index[%d]not full\n", __func__, __LINE__, index); //count += 1; //if (count % 1000000 == 0) { - // printf("[Rtos][%s][%d]out count[%d]index[%d]\n", __func__, __LINE__, count, index); + // aud_info("[Rtos][%s][%d]out count[%d]index[%d]\n", __func__, __LINE__, count, index); //} } bCheck_input_full = 1; //reset the check flag @@ -550,14 +550,14 @@ void prvAudioRunTask(void *pvParameters) _pstVqeConfig = (AI_TALKVQE_CONFIG_S_RTOS *)pstAudBlockMailBox->AinVqeCfgPhy; inv_dcache_range((uintptr_t)_pstVqeConfig, sizeof(AI_TALKVQE_CONFIG_S_RTOS)); - printf("SSP_INIT dump-----------------------------------------------------\n"); - printf("para_client_config[%d]\n", _pstVqeConfig->para_client_config); - printf("u32OpenMask[0x%x]\n", _pstVqeConfig->u32OpenMask); - printf("s32WorkSampleRate[%d]\n", _pstVqeConfig->s32WorkSampleRate); - printf("stAecCfg.para_aec_filter_len[%d]\n", _pstVqeConfig->stAecCfg.para_aec_filter_len); - printf("stAecCfg.para_aes_std_thrd[%d]\n", _pstVqeConfig->stAecCfg.para_aes_std_thrd); - printf("stAecCfg.para_aes_supp_coeff[%d]\n", _pstVqeConfig->stAecCfg.para_aes_supp_coeff); - printf("SSP_INIT dump-----------------------------------------------------[end]\n"); + aud_info("SSP_INIT dump-----------------------------------------------------\n"); + aud_info("para_client_config[%d]\n", _pstVqeConfig->para_client_config); + aud_info("u32OpenMask[0x%x]\n", _pstVqeConfig->u32OpenMask); + aud_info("s32WorkSampleRate[%d]\n", _pstVqeConfig->s32WorkSampleRate); + aud_info("stAecCfg.para_aec_filter_len[%d]\n", _pstVqeConfig->stAecCfg.para_aec_filter_len); + aud_info("stAecCfg.para_aes_std_thrd[%d]\n", _pstVqeConfig->stAecCfg.para_aes_std_thrd); + aud_info("stAecCfg.para_aes_supp_coeff[%d]\n", _pstVqeConfig->stAecCfg.para_aes_supp_coeff); + aud_info("SSP_INIT dump-----------------------------------------------------[end]\n"); AI_TALKVQE_CONFIG_S VqeConfig; AI_TALKVQE_CONFIG_S *pVqeConfigSsp = &VqeConfig; @@ -595,6 +595,39 @@ void prvAudioRunTask(void *pvParameters) } else aud_error("warning paudio_ssp_blcok not Null..\n"); + xQueueSend(xQueueAudioCmdqu, &rtos_cmdq, 0U); + } + break; + case CVIAUDIO_RTOS_CMD_SSP_CONFIG_BLOCK: + { + aud_info("CVIAUDIO_RTOS_CMD_SSP_CONFIG_BLOCK\n"); + ST_CVIAUDIO_MAILBOX_BLOCK *pstAudBlockMailBox = + (ST_CVIAUDIO_MAILBOX_BLOCK *)rtos_cmdq.param_ptr; + AI_TALKVQE_CONFIG_S_RTOS *_pstVqeConfig = NULL; + + inv_dcache_range((uintptr_t)pstAudBlockMailBox, sizeof(ST_CVIAUDIO_MAILBOX_BLOCK)); + aud_debug("CVIAUDIO_RTOS_CMD_SSP_INIT_BLOCK phy[0x%x]\n", rtos_cmdq.param_ptr); + if (pstAudBlockMailBox->u64RevMask != CVIAUDIO_RTOS_MAGIC_WORD_USERSPACE_BLOCK_MODE) { + aud_error("[CVIAUDIO_RTOS_CMD_SSP_INIT_BLOCK]magic word mismatch[0x%lx]\n", + pstAudBlockMailBox->u64RevMask); + rtos_cmdq.param_ptr = CVIAUDIO_RTOS_BLOCK_MODE_FAILURE_FLAG; + clean_dcache_range((uintptr_t)pstAudBlockMailBox, sizeof(ST_CVIAUDIO_MAILBOX_BLOCK)); + xQueueSend(xQueueAudioCmdqu, &rtos_cmdq, 0U); + break; + } else + aud_debug("CVIAUDIO_RTOS_CMD_SSP_INIT_BLOCK magic word matched\n"); + + _pstVqeConfig = (AI_TALKVQE_CONFIG_S_RTOS *)pstAudBlockMailBox->AinVqeCfgPhy; + inv_dcache_range((uintptr_t)_pstVqeConfig, sizeof(AI_TALKVQE_CONFIG_S_RTOS)); + + aud_debug("u32OpenMask[0x%x]\n", _pstVqeConfig->u32OpenMask); + + if (paudio_ssp_block != NULL) { + CviAud_Algo_Fun_Config(paudio_ssp_block, _pstVqeConfig->u32OpenMask); + aud_info("CVIAUDIO_RTOS_CMD_SSP_INIT_BLOCK init success!!\n"); + } else + aud_error("warning paudio_ssp_blcok not Null..\n"); + xQueueSend(xQueueAudioCmdqu, &rtos_cmdq, 0U); } break; @@ -656,7 +689,7 @@ void prvAudioRunTask(void *pvParameters) xTimer3AProcEnd = xTaskGetTickCount(); total_diff += xTimer3AProcEnd - xTimer3AProcStart; if (frame_count == 8000/CVIAUDIO_BASIC_AEC_LENGTH*3) { - printf("total_diff = %ld, cpu = %ld, portTICK_PERIOD_MS=%d\n", + aud_info("total_diff = %ld, cpu = %ld, portTICK_PERIOD_MS=%d\n", total_diff, total_diff*portTICK_PERIOD_MS/30, portTICK_PERIOD_MS); @@ -666,7 +699,7 @@ void prvAudioRunTask(void *pvParameters) #endif } //pvincent = (short *)pstBlockFrm->output_addr; - //printf("CVIAUDIO_RTOS_CMD_SSP_PROC_BLOCK---success[0x%x][0x%x][0x%x]\n", pvincent[0], pvincent[1], pvincent[2]); + //aud_info("CVIAUDIO_RTOS_CMD_SSP_PROC_BLOCK---success[0x%x][0x%x][0x%x]\n", pvincent[0], pvincent[1], pvincent[2]); clean_dcache_range((uintptr_t)pstBlockFrm, sizeof(ST_CVIAUDIO_BLOCK_FRAME)); clean_dcache_range((uintptr_t)pstBlockFrm->mic_in_addr, 1280); clean_dcache_range((uintptr_t)pstBlockFrm->output_addr, 1280); diff --git a/freertos/cvitek/task/rgn/src/riscv64/rgn_main.c b/freertos/cvitek/task/rgn/src/riscv64/rgn_main.c index 5ed8f3a38..39c7d2e22 100644 --- a/freertos/cvitek/task/rgn/src/riscv64/rgn_main.c +++ b/freertos/cvitek/task/rgn/src/riscv64/rgn_main.c @@ -32,7 +32,7 @@ void prvRGNRunTask(void *pvParameters) (void)pvParameters; cmdqu_t rtos_cmdq; - int i, j, delta_x, delta_y; + int i; void *pvAddr = NULL; unsigned char obj_num = 0, line_num = 0; int bs_size, status; @@ -40,7 +40,6 @@ void prvRGNRunTask(void *pvParameters) RGN_CMPR_OBJ_ATTR_S *obj_attr = NULL; OSDC_Canvas_Attr_S canvas; OSDC_DRAW_OBJ_S *obj_vec = NULL; - RGN_LINE_ATTR_S *line_attr = NULL; rgn_printf("%s run\n", __func__); xQueueRGN = main_GetMODHandle(E_QUEUE_RGN); @@ -84,13 +83,6 @@ void prvRGNRunTask(void *pvParameters) goto WRONG_CMD_IP_ID; } - line_attr = (RGN_LINE_ATTR_S *)pvPortMalloc((obj_num ? obj_num : 1) * sizeof(RGN_LINE_ATTR_S)); - if (line_attr == NULL) { - rgn_printf("(%s) malloc failed!\n", __func__); - vPortFree(obj_vec); - goto WRONG_CMD_IP_ID; - } - obj_attr = (RGN_CMPR_OBJ_ATTR_S *)((CVI_U8 *)rtos_cmdq.param_ptr + sizeof(RGN_CANVAS_CMPR_ATTR_S)); if (obj_num) { for (i = 0; i < obj_num; ++i) { @@ -102,7 +94,6 @@ void prvRGNRunTask(void *pvParameters) obj_attr[i].stLine.stPointEnd.s32Y, obj_attr[i].stLine.u32Thick, obj_attr[i].stLine.u32Color); - line_attr[line_num] = obj_attr[i].stLine; line_num++; } else if (obj_attr[i].enObjType == RGN_CMPR_RECT) { rgn_printf("xywh(%d %d %d %d) Thick(%d) Color(0x%x) is_fill(%d)\n", @@ -124,51 +115,18 @@ void prvRGNRunTask(void *pvParameters) } } - // workaroud to fix draw line issue for now - j = 0; - while (j++ < 5) { - for (i = 0; i < line_num; ++i) { - delta_x = abs(line_attr[i].stPointStart.s32X - line_attr[i].stPointEnd.s32X); - delta_y = abs(line_attr[i].stPointStart.s32Y - line_attr[i].stPointEnd.s32Y); - if (delta_y < line_attr[i].u32Thick) { - if (i < line_num - 1) { - line_attr[i + 1].stPointStart.s32Y = line_attr[i].stPointEnd.s32Y - = line_attr[i].stPointStart.s32Y; - } else { - line_attr[0].stPointStart.s32Y = line_attr[i].stPointEnd.s32Y - = line_attr[i].stPointStart.s32Y; - } - } - if (delta_x < line_attr[i].u32Thick) { - if (i < line_num - 1) { - line_attr[i + 1].stPointStart.s32X = line_attr[i].stPointEnd.s32X - = line_attr[i].stPointStart.s32X; - } else { - line_attr[0].stPointStart.s32X = line_attr[i].stPointEnd.s32X - = line_attr[i].stPointStart.s32X; - } - } - } - delta_x = abs(line_attr[0].stPointStart.s32X - line_attr[0].stPointEnd.s32X); - delta_y = abs(line_attr[0].stPointStart.s32Y - line_attr[0].stPointEnd.s32Y); - if ((delta_x > line_attr[0].u32Thick || delta_x == 0) && - (delta_y > line_attr[0].u32Thick || delta_y == 0)) - break; - } - if (obj_num) { - for (i = 0, j = 0; i < obj_num; ++i) { + for (i = 0; i < obj_num; ++i) { if (obj_attr[i].enObjType == RGN_CMPR_LINE) { CVI_OSDC_SetLineObjAttr( &canvas, &obj_vec[i], - line_attr[j].u32Color, - line_attr[j].stPointStart.s32X, - line_attr[j].stPointStart.s32Y, - line_attr[j].stPointEnd.s32X, - line_attr[j].stPointEnd.s32Y, - line_attr[j].u32Thick); - j++; + obj_attr[i].stLine.u32Color, + obj_attr[i].stLine.stPointStart.s32X, + obj_attr[i].stLine.stPointStart.s32Y, + obj_attr[i].stLine.stPointEnd.s32X, + obj_attr[i].stLine.stPointEnd.s32Y, + obj_attr[i].stLine.u32Thick); } else if (obj_attr[i].enObjType == RGN_CMPR_RECT) { CVI_OSDC_SetRectObjAttr( &canvas, @@ -256,7 +214,6 @@ void prvRGNRunTask(void *pvParameters) rgn_printf("%s rtos_cmdq.cmd_id(%d)!\n", __func__, rtos_cmdq.cmd_id); break; } - vPortFree(line_attr); vPortFree(obj_vec); WRONG_CMD_IP_ID: