MTK CAMERA ISP6S CFP

1.mtkcam3/main/hal/device/3.x/device/CameraDevice3SessionImpl.cpp configureStreams()
2.mtkcam3/main/hal/device/3.x/device/CameraDevice3SessionImpl.cpp onConfigureStreamsLocked()
3.mtkcam3/pipeline/model/PipelineModelImpl.cpp configure()
4.mtkcam3/pipeline/model/session/PipelineModelSessionFactory.cpp createPipelineModelSession()
5.mtkcam3/pipeline/model/session/PipelineModelSessionFactory.cpp decidePipelineModelSession()
6.mtkcam3/pipeline/model/session/PipelineModelSession4Cell.cpp makeInstance()
7.mtkcam3/pipeline/model/session/PipelineModelSession4Cell.cpp configure()
8.mtkcam3/pipeline/policy/PipelineSettingPolicyImpl.cpp evaluateConfiguration()
9.mtkcam3/pipeline/policy/ConfigSettingPolicyMediator.cpp evaluateConfiguration()
10.mtkcam3/pipeline/policy/FeatureSettingPolicy.cpp evaluateConfiguration()
11.mtkcam3/pipeline/policy/FeatureSettingPolicy.cpp evaluateCaptureConfiguration()
12.mtkcam3/pipeline/policy/FeatureSettingPolicy.cpp getCaptureProvidersByScenarioFeatures()


11.调用get_capture_scenario(),首先customer_get_capture_scenario()通过scenarioHint获取scenario(MTK_CAMERA_SCENARIO_CAPTURE_NORMAL),再通过拿到的scenario确定buffer数量等信息,然后再通过customer_get_features_table_by_scenario()拿到gCustomerScenarioFeaturesMaps:
CAMERA_SCENARIO_START(MTK_CAMERA_SCENARIO_CAPTURE_NORMAL)
ADD_CAMERA_FEATURE_SET(MTK_FEATURE_AIHDR,    MTK_FEATURE_COMBINATION_AIHDR)
ADD_CAMERA_FEATURE_SET(TP_FEATURE_HDR,       MTK_FEATURE_COMBINATION_HDR)
ADD_CAMERA_FEATURE_SET(MTK_FEATURE_AINR,     MTK_FEATURE_COMBINATION_AINR)
ADD_CAMERA_FEATURE_SET(MTK_FEATURE_MFNR,    MTK_FEATURE_COMBINATION_MFNR)
ADD_CAMERA_FEATURE_SET(MTK_FEATURE_REMOSAIC,MTK_FEATURE_COMBINATION_REMOSAIC)
ADD_CAMERA_FEATURE_SET(NO_FEATURE_NORMAL,  MTK_FEATURE_COMBINATION_SINGLE)
CAMERA_SCENARIO_END
12.根据ScenarioFeatures创建CapturePlugin
mYuvPluginWrapperPtr = std::make_shared<YuvPluginWrapper>(supportedFeatures, pluginUniqueKey, isPhysical);创建YuvPlugin的Wrapper,最终调到算法的property

 

p2c的init和config都是在PipelineContextImpl的launchOneNode中进行的,launchOneNode调用到NodeActorImpl.cpp的onInit和onConfig,分别调用所有需要node的init和config。

1.mtkcam3/pipeline/pipeline/PipelineContextImpl.cpp launchOneNode()
2.mtkcam3/pipeline/pipeline/NodeActorImpl.cpp init() -->onInit()
3.mtkcam3/pipeline/hwnode/p2/P2_CaptureNode.cpp Init()
4.mtkcam3/pipeline/hwnode/p2/P2_Processor.h init()
5.mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cpp onInit()
6.mtkcam3/feature/core/featurePipe/capture/CaptureFeaturePipe.cpp init()
7.mtkcam3/feature/core/featurePipe/core/include/CamPipe.h init()
8.mtkcam3/feature/core/featurePipe/core/include/CamGraph.h init()
9.mtkcam3/feature/core/featurePipe/core/include/CamNode.h init()
10.mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp onInit()
11.mtkcam3/3rdparty/customer/cp_qtt/qtt.cpp property()

2.获取需要的HWNode进行init
4.通过模板类调用p2cprocessor的init
5.创建CaptureFeaturePipe并init
6.PARENT_PIPE::init();调用父类CamPipe<CaptureFeaturePipe>的init
7.graphInit = mCamGraph.init()
8.遍历featurepipe的node调用init
9.最终调用到CamNode的init进行各node的init
10.遍历所有yuv域算法provider进行property
if(rProperty.mFeatures & TP_FEATURE_QTT) featId = FID_QTT;
将所有property成功的算法property放入mProviderPairs
mInitMap[featId] = mpTaskQueue->addFutureTask(func);

 

request

1.mtkcam3/pipeline/hwnode/p1/P1NodeImp.cpp releaseFrame()
2.mtkcam3/pipeline/hwnode/p1/P1NodeImp.cpp dispatch()
3.mtkcam3/pipeline/hwnode/BaseNode.cpp onDispatchFrame()
4.mtkcam3/pipeline/pipeline/Dispatcher.cpp onDispatchFrame()
5.mtkcam3/pipeline/hwnode/p2/P2_CaptureNode.cpp queue()
6.mtkcam3/pipeline/hwnode/p2/P2_Processor.h Processor<Init_T, Config_T, Enque_T>::enque(const Enque_T &param)
7.mtkcam3/pipeline/hwnode/p2/P2_Processor.h Processor<Init_T, Config_T, Enque_T>::ProcessThread::threadLoop()
8.mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cpp onEnque()
9.mtkcam3/feature/core/featurePipe/capture/CaptureFeaturePipe.cpp enque()
10.mtkcam3/feature/core/featurePipe/capture/CaptureFeatureInference.cpp evaluate()
11.mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp evaluate()
12.mtkcam3/3rdparty/customer/cp_qtt/qtt.cpp negotiate()

13.mtkcam3/feature/core/featurePipe/capture/CaptureFeaturePipe.cpp 

//在9完成evaluate后13会调用CamPipe::enque最终onData进rootNode

4.将request给到下一个hwnode
5.进入p2cnode
6.调用到模板类的enque,threadloop
8.进入p2node的p2_CaptureProcessor,tryGet<MINT64>(meta, MTK_FEATURE_CAPTURE, feature);通过MTK_FEATURE_CAPTURE这个tag获取settingpolicy时设置的feature combination:
if (feature & TP_FEATURE_QTT) pCapRequest->addFeature(FID_QTT);
mpFeaturePipe->enque(pCapRequest);

mtkcam3/pipeline/policy/FeatureSettingPolicy.cpp evaluateCaptureSetting
MY_LOGI("(%p) capture req#:%u", this, in->requestNo);//打印拍照信息

//同样获取appmetadata等信息
toTPIDualHint(scenarioHint);
scenarioHint.operationMode = mPolicyParams.pPipelineUserConfiguration->pParsedAppConfiguration->operationMode;
scenarioHint.isSuperNightMode = mPolicyParams.pPipelineUserConfiguration->pParsedAppConfiguration->isSuperNightMode;
scenarioHint.isIspHidlTuningEnable = mPolicyParams.pPipelineUserConfiguration->pParsedAppConfiguration->hasTuningEnable;
scenarioHint.isCShot = parsedInfo.isCShot;
scenarioHint.isYuvReprocess = parsedInfo.isYuvReprocess;
scenarioHint.isRawReprocess = parsedInfo.isRawReprocess;
scenarioHint.isYuvRequestForIspHidl = parsedInfo.isYuvRequestForIspHidl;
scenarioHint.isRawRequestForIspHidl = parsedInfo.isRawRequestForIspHidl;
scenarioHint.ispTuningHint = parsedInfo.ispTuningHint;
scenarioHint.isLogical = mPolicyParams.bIsLogicalCam;
get_capture_scenario(scenario, scenarioFeatures, scenarioConfig, scenarioHint, pAppMetadata);//获取scenario,scenarioFeatures,scenarioConfig

struct FeatureSet
{
std::string featureName; // for debug
std::string featureCombinationName; // for debug
MUINT64 feature = 0;
MUINT64 featureCombination = 0;
};
struct ScenarioFeatures
{
std::string scenarioName; // for debug
std::vector<FeatureSet> vFeatureSet;
};
strategyCaptureFeature( featureSet.feature, featureSet.featureCombination, out, parsedInfo, in );//遍历FeatureSet,此函数会根据拍照raw,singleyuv,multiframe调用不同函数
strategySingleRawPlugin(...);
strategyMultiFramePlugin(...);
strategyNormalSingleCapture(...);// update basic requirement
updateRequestResultParams(..., featureCombination);//三个函数都会调用到这个函数 update request result (frames metadata)
MY_LOGI("trigger feature:%s(%#" PRIx64"), feature combination:%s(%#" PRIx64") for req#%u",
featureSet.featureName.c_str(),
static_cast<MINT64>(featureSet.feature),
featureSet.featureCombinationName.c_str(),
static_cast<MINT64>(featureSet.featureCombination),
in->requestNo);//enque到captureProcessor并evulate到yuvNode的feature
mtkcam3/pipeline/policy/FeatureSettingPolicy.cpp updateRequestResultParams
IMetadata::setEntry<MINT64>(pOutMetaHal.get(), MTK_FEATURE_CAPTURE, featureCombination);//这里最终将featureCombination写入MTK_FEATURE_CAPTURE,也就是P2_CaptureProcessor.cpp onEnque的feature

9.mInference.evaluate(pRequest)
CamPipe::enque(PID_ENQUE, pRequest);CamPipe<Node_T>::enque>>CamGraph<Node_T>::enque>>mRootNode->onData
10.调用各cfp的node  //yuv do evaluate.
11.遍历mProviderPairs调用算法的negotiate,如果返回false则clear该算法clearFeature(featId) //evaluate featureid:qtt
mInitMap[featId] = mpTaskQueue->addFutureTask(func);

1.mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp onThreadLoop()
2.mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp onRequestProcess()
3.mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp processRequest()
4.mtkcam3/3rdparty/customer/cp_qtt/qtt.cpp process()
5.mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp onCompleted()
6.mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp onRequestFinish()
7.mtkcam3/feature/core/featurePipe/capture/CaptureFeatureNode.cpp dispatch()
8.mtkcam3/feature/core/featurePipe/core/include/CamNode.h handleData()

1.当buffer通过上一个node ondata进入yuvnode,ondata将request入队,yuvnode一直有线程onThreadLoop在轮询将request出队,送入onRequestProcess()
2.拿到init和negotiate后的mProviderPairs,送入processRequest()
3.调用算法的process,传入callback用于回调
5.算法处理完成后回调onCompleted(),如果还有其他算法需要调用继续onRequestProcess(),否则调用onRequestFinish()
6.将request给到下一个node
8.调用下一个node的onData(),这里是mdpNode

1.mtkcam3/feature/core/featurePipe/capture/nodes/MDPNode.cpp onThreadLoop()
...
2.mtkcam3/feature/core/featurePipe/capture/nodes/MDPNode.cpp onRequestFinish()
3.mtkcam3/feature/core/featurePipe/capture/CaptureFeatureNode.cpp dispatch()
4.mtkcam3/feature/core/featurePipe/capture/CaptureFeatureNode.cpp dispatch()
5.mtkcam3/feature/core/featurePipe/core/include/CamNode.h handleData()
6.mtkcam3/feature/core/featurePipe/capture/CaptureFeaturePipe.cpp onData()
7.mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cpp onCompleted()
8.mtkcam3/pipeline/hwnode/p2/P2_MWFrame.cpp doRelease()
9.mtkcam3/pipeline/pipeline/PipelineBufferSetFrameControlImp.cpp applyRelease()
10.mtkcam3/pipeline/pipeline/PipelineBufferSetFrameControlImp.cpp handleReleasedBuffers()
11.mtkcam3/pipeline/model/session/PipelineModelSession4Cell.cpp updateFrame()
12.mtkcam3/pipeline/model/session/PipelineModelSessionBase.cpp updateFrameTimestamp()
13.mtkcam3/main/hal/device/3.x/device/CameraDevice3SessionImpl.cpp onFrameUpdated()
14.mtkcam3/main/hal/device/3.x/app/AppStreamMgr.cpp updateResult()
mdpNode process完成后调用到CaptureFeaturePipe的onData,继续调用pCallback->onCompleted(pRequest, OK)流回到P2_CaptureProcessor 的CaptureRequestCallback::onCompleted(),onCompleted()调用mpProcessor->mRequestPairs.erase(it);执行MWFrame img和meta的析构,再执行到P2_MWFrame.cpp的~MWFrame()调用dispatchFrame()最终调用到JpegNode的queue

 watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoZUJsdWVy,size_16,color_FFFFFF,t_70

 

 

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值