Beispiel #1
0
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;
}
Beispiel #3
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() */