/* * This function computes the dampers and queues the Page Elements */ t_damper_error_code CDefCorDamper::ComputeAndQueuePEs( CIspctlCom* pIspctlCom, const t_damper_base_values* pBaseValues) { IN0("\n"); OstTraceFiltStatic0(TRACE_FLOW, "Entry CDefCorDamper::ComputeAndQueuePEs", (mTraceObject)); float pDamperValues[DEFCOR_DAMPERS_NUM] = {0.0, 0.0}; t_damper_error_code err = DAMPER_OK; // Evaluate DefCor dampers err = DoEvaluate( pBaseValues, pDamperValues); if(err!=DAMPER_OK) { DBGT_ERROR("Evaluation failed: err=%d\n", err); OstTraceFiltStatic1(TRACE_ERROR, "Evaluation failed: err=%d", (mTraceObject), err); OUTR(" ",err); OstTraceFiltStatic1(TRACE_FLOW, "Exit CDefCorDamper::ComputeAndQueuePEs (%d)", (mTraceObject), err); return err; } // Queue the Page Elements for(int i=0; i<DEFCOR_DAMPERS_NUM; i++) { MSG2("%s = %f\n", CIspctlCom::pIspctlSensor->GetPeName(KDefCorDamperInfo[i].addr), pDamperValues[i]); //OstTraceFiltStatic2(TRACE_DEBUG, "%s = %f", (mTraceObject), CXp70::GetPeName(KDefCorDamperInfo[i].addr), pDamperValues[i]); pIspctlCom->queuePE( KDefCorDamperInfo[i].addr, (t_uint32)pDamperValues[i]); } // Done OUTR(" ",DAMPER_OK); OstTraceFiltStatic1(TRACE_FLOW, "Exit CDefCorDamper::ComputeAndQueuePEs (%d)", (mTraceObject), DAMPER_OK); return DAMPER_OK; }
/* * This function computes the dampers and queues the Page Elements */ t_damper_error_code CNoiseFilterDamper::ComputeAndQueuePEs( CIspctlCom* pIspctlCom, const t_damper_base_values* pBaseValues) { IN0("\n"); OstTraceFiltStatic0(TRACE_FLOW, "Entry CNoiseFilterDamper::ComputeAndQueuePEs", (mTraceObject)); float pDampedValues[1] = { 0.0 }; t_damper_error_code err = DAMPER_OK; // Evaluate Noise Filter dampers err = DoEvaluate( pBaseValues, pDampedValues); if(err!=DAMPER_OK) { DBGT_ERROR("Failed to evaluate damper: err=%d\n", err); OstTraceFiltStatic1(TRACE_ERROR, "Failed to evaluate damper: err=%d", (mTraceObject), err); OUTR(" ",err); OstTraceFiltStatic1(TRACE_FLOW, "Exit CNoiseFilterDamper::ComputeAndQueuePEs (%d)", (mTraceObject), err); return err; } // Queue the Page Elements float fGaussianWeightDamped = pDampedValues[0]; MSG2("%s = %f\n", CIspctlCom::pIspctlSensor->GetPeName(DusterControl_u8_GaussianWeight_Byte0), fGaussianWeightDamped); OstTraceFiltStatic1(TRACE_DEBUG, "DusterControl_u8_GaussianWeight = %f", (mTraceObject), fGaussianWeightDamped); pIspctlCom->queuePE( DusterControl_u8_GaussianWeight_Byte0, (t_uint32)fGaussianWeightDamped); // Done OUTR(" ",DAMPER_OK); OstTraceFiltStatic1(TRACE_FLOW, "Exit CNoiseFilterDamper::ComputeAndQueuePEs (%d)", (mTraceObject), DAMPER_OK); return DAMPER_OK; }
/* * This function computes the dampers and queues the Page Elements */ t_damper_error_code CScorpioDamper::ComputeAndQueuePEs( CIspctlCom* pIspctlCom, const t_damper_base_values* pBaseValues) { IN0("\n"); OstTraceFiltStatic0(TRACE_FLOW, "Entry CScorpioDamper::ComputeAndQueuePEs", (mTraceObject)); float pDampedValues[1] = { 0.0 }; float fCoringLevel = 0.0; t_damper_error_code err = DAMPER_OK; // Evaluate Scorpio dampers err = DoEvaluate( pBaseValues, pDampedValues); if(err!=DAMPER_OK) { DBGT_ERROR("Evaluation failed: err=%d\n", err); OstTraceFiltStatic1(TRACE_ERROR, "Evaluation failed: err=%d", (mTraceObject), err); OUTR(" ",err); OstTraceFiltStatic1(TRACE_FLOW, "Exit CScorpioDamper::ComputeAndQueuePEs (%d)", (mTraceObject), err); return err; } // Queue the Page Elements list fCoringLevel = pDampedValues[0]; MSG2("%s = %f\n", CIspctlCom::pIspctlSensor->GetPeName(Scorpio_Ctrl_u8_CoringLevel_Ctrl_Byte0), fCoringLevel); OstTraceFiltStatic1(TRACE_DEBUG, "Scorpio_Ctrl_u8_CoringLevel_Ctrl = %f", (mTraceObject), fCoringLevel); pIspctlCom->queuePE( Scorpio_Ctrl_u8_CoringLevel_Ctrl_Byte0, (t_uint32)fCoringLevel); // Done OUTR(" ",DAMPER_OK); OstTraceFiltStatic1(TRACE_FLOW, "Exit CScorpioDamper::ComputeAndQueuePEs (%d)", (mTraceObject), DAMPER_OK); return DAMPER_OK; }
/* * This function computes the dampers and queues the Page Elements */ t_damper_error_code CSharpeningDamperLR::ComputeAndQueuePEs( CIspctlCom* pIspctlCom, const t_damper_base_values* pBaseValues) { IN0("\n"); OstTraceFiltStatic0(TRACE_FLOW, "Entry CSharpeningDamperLR::ComputeAndQueuePEs", (mTraceObject)); float pDamperValues[SHARPENING_DAMPERS_LR_NUM] = { 0.0, 0.0}; t_damper_error_code err = DAMPER_OK; float fAdsocGain = 0.0; float fAdsocCoring = 0.0; float fScaleFactor = 0.0; // Evaluate Sharpening dampers err = DoEvaluate( pBaseValues, pDamperValues); if(err!=DAMPER_OK) { DBGT_ERROR("Evaluation failed: err=%d\n", err); OstTraceFiltStatic1(TRACE_ERROR, "Evaluation failed: err=%d", (mTraceObject), err); OUTR(" ",err); OstTraceFiltStatic1(TRACE_FLOW, "Exit CSharpeningDamperLR::ComputeAndQueuePEs (%d)", (mTraceObject), err); return err; } // Compute and queue Adsoc Gain PE (scale against omx config and clip value) fAdsocGain = pDamperValues[SHARPENING_ADSOC_GAIN_LR]; fScaleFactor = (float)iOmxSharpness * iScaleFactorGain + iScaleFactorOffset; MSG1("Scale Factor = %f\n", fScaleFactor); OstTraceFiltStatic1(TRACE_DEBUG, "Scale Factor = %f", (mTraceObject), fScaleFactor); fAdsocGain *= fScaleFactor; if( fAdsocGain < 0.0) { fAdsocGain = 0.0; } else if ( fAdsocGain > 255.0 ) { fAdsocGain = 255.0; } MSG2("%s = %f\n", CIspctlCom::pIspctlSensor->GetPeName(Adsoc_PK_Ctrl_1_u8_Adsoc_PK_Gain_Byte0), fAdsocGain); OstTraceFiltStatic1(TRACE_DEBUG, "Adsoc_PK_Ctrl_1_u8_Adsoc_PK_Gain = %f", (mTraceObject), fAdsocGain); pIspctlCom->queuePE( Adsoc_PK_Ctrl_1_u8_Adsoc_PK_Gain_Byte0, (t_uint32)fAdsocGain); // Compute and queue Adsoc Coring PE fAdsocCoring = pDamperValues[SHARPENING_ADSOC_CORING_LR]; if( fAdsocCoring < 0.0) { fAdsocCoring = 0.0; } else if ( fAdsocCoring > 31.0 ) { fAdsocCoring = 31.0; } MSG2("%s = %f\n", CIspctlCom::pIspctlSensor->GetPeName(Adsoc_PK_Ctrl_1_u8_Adsoc_PK_Coring_Level_Byte0), fAdsocCoring); OstTraceFiltStatic1(TRACE_DEBUG, "Adsoc_PK_Ctrl_1_u8_Adsoc_PK_Coring_Level = %f", (mTraceObject), fAdsocCoring); pIspctlCom->queuePE( Adsoc_PK_Ctrl_1_u8_Adsoc_PK_Coring_Level_Byte0, (t_uint32)fAdsocCoring); // Done OUTR(" ",DAMPER_OK); OstTraceFiltStatic1(TRACE_FLOW, "Exit CSharpeningDamperLR::ComputeAndQueuePEs (%d)", (mTraceObject), DAMPER_OK); return DAMPER_OK; }
/* * This function computes the dampers and queues the Page Elements */ t_damper_error_code CNoiseModelDamper::ComputeAndQueuePEs( CIspctlCom* pIspctlCom, const t_damper_base_values* pBaseValues, const float aAverageDigitalGain) { IN0("\n"); OstTraceFiltStatic0(TRACE_FLOW, "Entry CNoiseModelDamper::ComputeAndQueuePEs", (mTraceObject)); float pDampedValues[1] = { 0.0 }; float fUserFrameSigma = 0.0; t_damper_error_code err = DAMPER_OK; // Evaluate Noise Model dampers err = DoEvaluate( pBaseValues, pDampedValues); if(err!=DAMPER_OK) { MSG1("Evaluation failed: err=%d\n", err); OstTraceFiltStatic1(TRACE_DEBUG, "Evaluation failed: err=%d", (mTraceObject), err); OUTR(" ",err); OstTraceFiltStatic1(TRACE_FLOW, "Exit CNoiseModelDamper::ComputeAndQueuePEs (%d)", (mTraceObject), err); return err; } // Scale the damper output by the reference Shading Correction Gain, Average Digital Gain and pipeline dynamic range // NOTE: the damper output is now the noise sigma at pipeline input, normalized to pipeline dynamic range MSG2("iShadingCorrectionGain=%f, aAverageDigitalGain=%f\n", iShadingCorrectionGain, aAverageDigitalGain); OstTraceFiltStatic2(TRACE_DEBUG, "iShadingCorrectionGain=%f, aAverageDigitalGain=%f", (mTraceObject), iShadingCorrectionGain, aAverageDigitalGain); fUserFrameSigma = pDampedValues[0] * iShadingCorrectionGain * aAverageDigitalGain * 4095.0; // Clip against hardware limit if(fUserFrameSigma >= 1024) { fUserFrameSigma = 1024; } // Queue the Page Elements MSG2("%s = %f\n", CIspctlCom::pIspctlSensor->GetPeName(DusterControl_u16_FrameSigma_Byte0), fUserFrameSigma); OstTraceFiltStatic1(TRACE_DEBUG, "DusterControl_u16_FrameSigma = %f", (mTraceObject), fUserFrameSigma); pIspctlCom->queuePE( DusterControl_u16_FrameSigma_Byte0, (t_uint32)fUserFrameSigma); // Done OUTR(" ",DAMPER_OK); OstTraceFiltStatic1(TRACE_FLOW, "Exit CNoiseModelDamper::ComputeAndQueuePEs (%d)", (mTraceObject), DAMPER_OK); return DAMPER_OK; }