Camera Hal OEM模块 ---- 3dnr算法流程( 二 )


cap_3dnr_tuning_param.SearchWindow_x = isp_cmd_parm.mfnr_param.searchWindow_x;cap_3dnr_tuning_param.SearchWindow_y = isp_cmd_parm.mfnr_param.searchWindow_y;cap_3dnr_tuning_param.recur_str = isp_cmd_parm.mfnr_param.recur_str;cap_3dnr_tuning_param.match_ratio_sad = isp_cmd_parm.mfnr_param.match_ratio_sad;cap_3dnr_tuning_param.match_ratio_pro = isp_cmd_parm.mfnr_param.match_ratio_pro;cap_3dnr_tuning_param.feat_thr = isp_cmd_parm.mfnr_param.feat_thr;cap_3dnr_tuning_param.luma_ratio_high = isp_cmd_parm.mfnr_param.luma_ratio_high;cap_3dnr_tuning_param.luma_ratio_low = isp_cmd_parm.mfnr_param.luma_ratio_low;cap_3dnr_tuning_param.zone_size = isp_cmd_parm.mfnr_param.zone_size;memcpy(cap_3dnr_tuning_param.reserved, isp_cmd_parm.mfnr_param.reserverd,(16 * sizeof(int)));
6,跑
ret = sprd_mfnr_adpt_init((void **)&(threednr_handle->proc_handle),¶m, (void *)(&cap_3dnr_tuning_param));
7,在次获取 isp 参数,并赋值给
ret = ipm_in->ipm_isp_ioctl(oem_handle, COM_ISP_GET_MFNR_PARAM, &isp_cmd_parm);memcpy(process_param.proc_param.setpara_param.thr, isp_cmd_parm.mfnr_param.threshold, (4*sizeof(int)));memcpy(process_param.proc_param.setpara_param.slp, isp_cmd_parm.mfnr_param.slope, (4 * sizeof(int)));
8,跑
【Camera Hal OEM模块 ---- 3dnr算法流程】传入上一步的参数
ret = sprd_mfnr_adpt_ctrl((void *)(threednr_handle->proc_handle), SPRD_MFNR_PROC_SET_PARAMS_CMD, (void *)&process_param);

Camera Hal OEM模块 ---- 3dnr算法流程

文章插图
1,t
ret = sprd_mfnr_adpt_deinit((void **)&(threednr_handle->proc_handle));
2,释放空间
ret = cam_cxt->hal_free(CAMERA_SNAPSHOT_3DNR, (cmr_uint *)threednr_handle->small_buf_phy,(cmr_uint *)threednr_handle->small_buf_vir,threednr_handle->small_buf_fd, CAP_3DNR_NUM, cam_cxt->client_data);
open 与 close 的动作是相对的 。
再来看 ame
ame 流程
ame 的逻辑涉及到一个调用流程,我们先直接把这个调用流程给出来 。
1,ame 保存参数 in、out
保存参数 in、out 到 ->[],然后调用 ess
static cmr_int threednr_transfer_frame(cmr_handle class_handle,struct ipm_frame_in *in,struct ipm_frame_out *out) if (threednr_handle->g_totalnum < CAP_3DNR_NUM) {threednr_handle->g_info_3dnr[cur_num].class_handle = class_handle;memcpy(&threednr_handle->g_info_3dnr[cur_num].in, in,sizeof(struct ipm_frame_in));memcpy(&threednr_handle->g_info_3dnr[cur_num].out, out,sizeof(struct ipm_frame_out));threednr_handle->g_info_3dnr[cur_num].cur_frame_num = cur_num;CMR_LOGD("fd 0x%x yaddr 0x%x", in->src_frame.fd, in->src_frame.addr_vir.addr_y);ret = req_3dnr_scaler_frame(threednr_handle,&threednr_handle->g_info_3dnr[cur_num]);if (ret) {CMR_LOGE("failed to sensor scaler frame");}}
2,ess
src — in 参数
dst — ->,在中通过 -> 申请的
src = http://www.kingceram.com/post/&in->src_frame;src->addr_vir.addr_u = in->src_frame.addr_vir.addr_y + threednr_handle->width * threednr_handle->height;src->addr_vir.addr_v = src->addr_vir.addr_u;src->addr_phy.addr_u = in->src_frame.addr_phy.addr_y + threednr_handle->width * threednr_handle->height;src->addr_phy.addr_v = src->addr_vir.addr_u;dst.addr_phy.addr_y = threednr_handle->small_buf_phy[cur_frm];dst.addr_phy.addr_u = dst.addr_phy.addr_y + threednr_handle->small_width * threednr_handle->small_height;dst.addr_phy.addr_v = dst.addr_phy.addr_u;dst.addr_vir.addr_y = threednr_handle->small_buf_vir[cur_frm];dst.addr_vir.addr_u = dst.addr_vir.addr_y + threednr_handle->small_width * threednr_handle->small_height;dst.addr_vir.addr_v = dst.addr_vir.addr_u;dst.fd = threednr_handle->small_buf_fd[cur_frm];//执行 scaleret = threednr_start_scale(oem_handle, src, &dst);