MM_ERROR_CODE_ENUM HdrCtrl (PP_SCENARIO_ENUM ScenarioId, PP_SCENARIO_CTRL_ENUM CtrlCode, void *pParaIn, void *pParaOut, kal_uint16 ParaOutLen) { kal_uint32 i, StartTime, TotalTime=0; UTL_SWITCH_CACHE_STRUCT MemSwitch; if(PP_CTRL_CODE_STOP == CtrlCode) { PP_SET_EVENT(PP_EVENT_HDR_STOP_CNF); } else if(PP_CTRL_CODE_START == CtrlCode) { StartTime = drv_get_current_time(); gHdrProcPara.MaxProcTime = HDR_PROCESS_MAX_TIME; MemSwitch.pMemAddr= (kal_uint32*)&(gHdrProcPara.SrcImgAddr); MemSwitch.Size = gHdrProcPara.SrcImgSize; MemSwitch.CacheableFlag=KAL_TRUE; UtlFeatureCtrl(UTL_FEATURE_EXT_MEM_SWITCH_CACHE,&MemSwitch,NULL,NULL); MemSwitch.pMemAddr= (kal_uint32*)&(gHdrProcPara.WorkingBufAddr); MemSwitch.Size = SwHdrGetUseWorkingBufferSize(); MemSwitch.CacheableFlag=KAL_TRUE; UtlFeatureCtrl(UTL_FEATURE_EXT_MEM_SWITCH_CACHE,&MemSwitch,NULL,NULL); for(i=0;i<HDR_PROCESS_MAX_COUNT;i++) { /* HDR process */ SwHdrCoreProc(&gHdrProcPara, &gHdrProcResult, ParaOutLen); /* Evaluated process time */ TotalTime = drv_get_duration_ms(StartTime); if((HDR_PROCESS_MAX_TIME<=TotalTime)||(HDR_STATE_READY==gHdrProcResult.HdrState)) { break; } else { gHdrProcPara.MaxProcTime = HDR_PROCESS_MAX_TIME - TotalTime; } } if(gHdrProcResult.HdrState == HDR_STATE_READY) { MemSwitch.pMemAddr= (kal_uint32*)&gHdrProcResult.ImgBufferAddr; MemSwitch.Size = (gHdrProcResult.ImgWidth*gHdrProcResult.ImgHeight*3)/2;//gHdrProcPara.SrcImgSize; MemSwitch.CacheableFlag=KAL_FALSE; UtlFeatureCtrl(UTL_FEATURE_EXT_MEM_SWITCH_CACHE,&MemSwitch,NULL,NULL); MemSwitch.pMemAddr= (kal_uint32*)&(gHdrProcPara.WorkingBufAddr); MemSwitch.Size = SwHdrGetUseWorkingBufferSize(); MemSwitch.CacheableFlag=KAL_FALSE; UtlFeatureCtrl(UTL_FEATURE_EXT_MEM_SWITCH_CACHE,&MemSwitch,NULL,NULL); pfPpHdrCb(PP_CBID_HDR_RESULT, &gHdrProcResult, sizeof(HDR_RESULT_STRUCT)); } } return MM_ERROR_NONE; } /* SwHdrControl() */
static S32 mmi_em_profiling_gdi_misc_speed_sw_fill_rect(void *v_param) { static const U32 PROFILING_MS = 4000; gdi_handle layer; S32 i; U32 start_time, duration; mmi_em_profiling_gdi_misc_speec_fill_rect_param *param = (mmi_em_profiling_gdi_misc_speec_fill_rect_param*)v_param; kal_int32 fill_x, fill_y, fill_width, fill_height; gdi_color fill_color; layer = mmi_em_profiling_gdi_create_layer( param->layer.cf, param->layer.x, param->layer.y, param->layer.width, param->layer.height); if (layer == 0) { return -1; } gdi_layer_push_and_set_active(layer); gdi_layer_clear(GDI_COLOR_BLACK); gdi_layer_pop_and_restore_active(); fill_x = param->fill.x; fill_y = param->fill.y; fill_width = param->fill.width; fill_height = param->fill.height; fill_color = gdi_cf_get_color(param->layer.cf, 255, 255, 255, 255); gdi_layer_push_and_set_active(layer); MMI_TRACE(MMI_COMMON_TRC_INFO, TRC_APP_EM_PROFILING_GDI_FRECT_START); start_time = drv_get_current_time(); i = 0; do { do { gdi_draw_solid_rect( fill_x, fill_y, fill_width, fill_height, fill_color); i++; } while ((i & 0xf) != 0); /* Calculate duration every 16 iterations */ duration = drv_get_duration_ms(start_time); } #ifdef __MTK_TARGET__ while (duration < PROFILING_MS); #else while (0); #endif MMI_TRACE(MMI_COMMON_TRC_INFO, TRC_APP_EM_PROFILING_GDI_FRECT_END, param->id, i, duration); gdi_layer_pop_and_restore_active(); gdi_layer_blt( layer, 0, 0, 0, 0, 0, GDI_LCD_WIDTH - 1, GDI_LCD_HEIGHT - 1); mmi_em_profiling_gdi_free_layer(layer); return 0; }
MM_ERROR_CODE_ENUM FdCtrl(PP_SCENARIO_ENUM ScenarioId, PP_SCENARIO_CTRL_ENUM CtrlCode, void* pParaIn, void* pParaOut,kal_uint16 ParaOutLen) { #ifdef FD_LOG_DEBUG_INFO kal_uint32 t1,mem_time, total_fdvt_time, period_time; #endif kal_uint32 t0; FD_PROCESS_IN_STRUCT FdProcIn ; // P_FD_PROC_PARA_IN_STRUCT pFdParaIn = (P_FD_PROC_PARA_IN_STRUCT )pParaIn; P_FD_RESULT_STRUCT pFdParaOut = &gFdResult; UTL_SWITCH_CACHE_STRUCT MemSwitch; UTL_BILINEAR_RESIZER_STRUCT UtlRisizerInfo; ASSERT(gFdState!=FD_IDLE_STATE); if(PP_CTRL_CODE_START == CtrlCode) { t0 = drv_get_current_time(); #ifdef FD_LOG_DEBUG_INFO period_time = drv_get_duration_ms(gFdStartTime); gFdStartTime = drv_get_current_time(); t1 = gFdStartTime; #endif /*-------------- MEM--------------*/ gFdState = FD_MEM_PROCESS_STATE; #if 0 /* under construction !*/ /* under construction !*/ /* under construction !*/ /* under construction !*/ /* under construction !*/ #endif // copy source image form MDP to FD working memory if(PP_MEM_OP_COPY_TO_PROC_BUF == gFdSetMemInfo.PpMemOpType) { kal_mem_cpy((kal_uint8*)(gFdSetMemInfo.PpProcBufAddr), (kal_uint8*)gFdSetMemInfo.PpSrcBufAddr, gFdSetMemInfo.PpSrcBufSize); } else if(PP_MEM_OP_RESIZE_TO_PROC_BUF== gFdSetMemInfo.PpMemOpType) { UtlRisizerInfo.srcAddr = (kal_uint16*) gFdSetMemInfo.PpSrcBufAddr; UtlRisizerInfo.srcWidth= gSrcImageWidth; UtlRisizerInfo.srcHeight= gSrcImageHeight; UtlRisizerInfo.dstAddr = (kal_uint16*) gFdSetMemInfo.PpProcBufAddr; UtlRisizerInfo.dstWidth = gDstImageWidth; UtlRisizerInfo.dstHeight = gDstImageHeight; UtlBilinearResizer(&UtlRisizerInfo); } else { return MM_ERROR_INVALID_PARAMETER; } #ifdef FD_LOG_DEBUG_INFO mem_time = drv_get_duration_ms(t1); t1 = drv_get_current_time(); #endif /*-------------- FD --------------*/ gFdState = FD_PROCESS_STATE; kal_mem_set(pFdParaOut, 0, sizeof(FD_RESULT_STRUCT)); FdProcIn.OperationMode= FD_FDVT_MODE; FdCoreMain(&FdProcIn,pFdParaOut); /* add fd processing counter for facial AF usage */ gFdProcessCounter++; if(gFdProcessCounter>=255) { gFdProcessCounter=0; } pFdParaOut->result_counter = gFdProcessCounter; pFdParaOut->fd_start_time= t0; pFdParaOut->fd_end_time= drv_get_current_time(); //cached memory -> non-cachecd memory MemSwitch.pMemAddr=&gFdSetMemInfo.PpProcBufAddr; MemSwitch.Size=(kal_uint32) (FD_BUFFER_SIZE); MemSwitch.CacheableFlag=KAL_FALSE; UtlFeatureCtrl(UTL_FEATURE_EXT_MEM_SWITCH_CACHE,&MemSwitch,NULL,NULL); // cb to cal pfPpFdCb(PP_CBID_FD_RESULT, pFdParaOut, sizeof(FD_RESULT_STRUCT)); /*-------------- Save Log --------------*/ #if (defined(FD_LOG_DEBUG_INFO)) total_fdvt_time = drv_get_duration_ms(t1); gFdFileCount++; FdCoreSaveLog(gFdLogBuff); gFdLogBuff->version = FDVT_VERSION; gFdLogBuff->frame_idx = gFdFileCount; gFdLogBuff->mem_time = mem_time; gFdLogBuff->total_fdvt_time = total_fdvt_time; gFdLogBuff->fdvt_period_time = period_time; if (gFdFileCount>gFdFileCountMax) { gFdFileCount = 0; } FdSaveLog(gFdFileCount); #endif gFdState = FD_READY_STATE; } else if (PP_CTRL_CODE_RESET == CtrlCode) { FdCoreReset(); } return MM_ERROR_NONE; } /* FdControl() */