1.
路径:vendor/qcom/proprietary/camx/src/core/
文件:camxpipeline.cpp
CamxResult Pipeline::FinalizePipeline(FinalizeInitializationData* pFinalizeInitializationData)
{
CamxResult result = CamxResultSuccess;
const ImageSensorModuleData* pSensorModuleData;
/* 此处省略多行代码 */
if (CamxResultSuccess == result)
{
for (UINT i = 0; i < m_nodeCount; i++)
{
result = m_ppNodes[i]->FinalizeInitialization(pFinalizeInitializationData);
if (CamxResultSuccess != result)
{
CAMX_ASSERT_ALWAYS_MESSAGE("Failed to finalize init of node: %d", i);
break;
}
}
}
}
2.
路径: vendor/qcom/proprietary/camx/src/core/
文件: camxnode.cpp
CamxResult Node::FinalizeInitialization(FinalizeInitializationData* pFinalizeInitializationData)
{
CAMX_TRACE_SYNC_BEGIN_F(CamxLogGroupCore, "Node::%s FinalizeInitialization", NodeIdentifierString());
CamxResult result = CamxResultSuccess;
/* 此处省略多行代码 */
if (CamxResultSuccess == result)
{
result = ProcessingNodeFinalizeInitialization(pFinalizeInitializationData);
}
}
3.
路径:vendor/qcom/proprietary/camx/src/swl/sensor/
文件:camxsensornode.cpp
CamxResult SensorNode::ProcessingNodeFinalizeInitialization(
FinalizeInitializationData* pFinalizeInitializationData)
{
CamxResult result = CamxResultEFailed;
CSLCSIPHYCapability CSIPHYCapability = {0};
CSLFlashQueryCapability flashCapability = {0};
CSLActuatorCapability actuatorCap = {0};
CSLOISCapability oisCap = {0};
ResolutionData* pResolutionData = NULL;
/* 此处省略多行代码 */
if ((CamxResultSuccess == result) && (InvalidJobHandle == m_hJobFamilyHandle))
{
const CHAR* pSensorName = m_pSensorModuleData->GetSensorDataObject()->GetSensorName();
result = m_pThreadManager->RegisterJobFamily(SensorThreadJobCallback, /* 线程回调函数 */
pSensorName,
NULL,
JobPriority::High,
TRUE,
&m_hJobFamilyHandle);
}
if ((CamxResultSuccess == result) && (InvalidJobHandle == m_hJobFamilySubModuleOISHandle))
{
CHAR OISJobName[256];
OsUtils::SNPrintF(OISJobName, sizeof(OISJobName), "%s_%s",
m_pSensorModuleData->GetSensorDataObject()->GetSensorName(), "OIS");
result = m_pThreadManager->RegisterJobFamily(SensorThreadJobCallback,
OISJobName,
NULL,
JobPriority::High,
TRUE,
&m_hJobFamilySubModuleOISHandle);
}
/* 此处省略多行代码 */
SensorPostJob* pSensorPostJob = CAMX_NEW SensorPostJob;
if (NULL != pSensorPostJob)
{
pSensorPostJob->pSensor = this;
pSensorPostJob->sensorJobCommand = SensorPostJobCommand::InitializeOIS; /* 初始化OIS */
pSensorPostJob->pData = NULL;
VOID* pSensorPostJobData[] = { pSensorPostJob, NULL };
result = m_pThreadManager->PostJob(m_hJobFamilySubModuleOISHandle,
NULL, &pSensorPostJobData[0], FALSE, FALSE);
}
SensorPostJob* pSensorPostJob = CAMX_NEW SensorPostJob;
// Check pSensorPostJob before using it.
if (NULL != pSensorPostJob) {
pSensorPostJob->pSensor = this;
pSensorPostJob->sensorJobCommand = SensorPostJobCommand::InitializeSensor; /* 初始化sensor */
pSensorPostJob->pData = NULL;
VOID* pSensorPostJobData[] = { pSensorPostJob, NULL };
result = m_pThreadManager->PostJob(m_hJobFamilyHandle,
NULL,
&pSensorPostJobData[0],
FALSE,
FALSE);
} else {
CAMX_LOG_ERROR(CamxLogGroupSensor, "Out of memory SensorPostJob create failed");
result = CamxResultENoMemory;
}
}
SensorPostJob* pSensorPostJobCreateSubModules = CAMX_NEW SensorPostJob;
if (NULL != pSensorPostJobCreateSubModules) {
pSensorPostJobCreateSubModules->pSensor = this;
/* 创建子模块 */
pSensorPostJobCreateSubModules->sensorJobCommand = SensorPostJobCommand::SubModulesCreate;
pSensorPostJobCreateSubModules->pData = NULL;
VOID* pSubModuleCreateData[] = { pSensorPostJobCreateSubModules, NULL };
result = m_pThreadManager->PostJob(m_hJobFamilyHandle, NULL,
&pSubModuleCreateData[0], FALSE, FALSE);
}
return result;
}
回调sensor线程工作接口
路径:vendor/qcom/proprietary/camx/src/swl/sensor/
文件:camxsensornode.cpp
VOID* SensorNode::SensorThreadJobCallback(
VOID* pData)
{
CamxResult result = CamxResultEFailed;
SensorPostJob* pSensorPostJob = reinterpret_cast<SensorPostJob*>(pData);
if ((NULL != pSensorPostJob) && (NULL != pSensorPostJob->pSensor))
{
SensorNode* pSensorNode = static_cast<SensorNode*>(pSensorPostJob->pSensor);
SensorPostJobCommand condition = pSensorPostJob->sensorJobCommand;
switch (condition)
{
case SensorPostJobCommand::InitializeSensor: { /* func() */ break; }
case SensorPostJobCommand::SubModulesCreate:
{
result = pSensorNode->CreateSensorSubmodules(); /* 创建子模块,详细描述见下面 */
}
case SensorPostJobCommand::ConfigureSensor: { /* func() */ break; }
case SensorPostJobCommand::InitializeOIS: { /* func() */ break; }
case SensorPostJobCommand::ReadRequest: { /* func() */ break; }
}
}
return NULL;
}
/* 创建子模块 */
CamxResult SensorNode::CreateSensorSubmodules()
{
CamxResult result = CamxResultSuccess;
CAMX_ENTRYEXIT_SCOPE(CamxLogGroupSensor, SCOPEEventSubModuleAcquire);
if (SensorConfigurationStatus::SensorInitializationComplete == m_sensorConfigStatus) {
m_sensorConfigStatus = SensorConfigurationStatus::SensorSubModuleCreateInProgress;
result = CreateSubModules();
if ((CamxResultSuccess == result) && (NULL != m_pSensorModuleData->GetActuatorDataObject())) {
result = CreateActuatorResources(); /* 创建AF资源 */
}
const StaticSettings* pStaticSettings = GetStaticSettings();
CAMX_ASSERT(pStaticSettings != NULL);
if ((CamxResultSuccess == result) && (FALSE == pStaticSettings->enableOISOptimization) &&
(NULL != m_pSensorModuleData->GetOisDataObject())) {
// OIS Optimization is disabled, OIS needs to be created serially now
result = CreateOISSubmodule(); /* 创建OIS资源 */
}
if ((CamxResultSuccess == result) && (FALSE == pStaticSettings->disableFlash) &&
(NULL != m_pSensorModuleData->GetFlashDataObject())) {
result = CreateFlashResources(); /* 创建flash资源 */
}
if (CamxResultSuccess == result) {
const CSIInformation* pCSIInfo = m_pSensorModuleData->GetCSIInfo();
CSLSensorCSIPHYInfo cmdCSIPHYConfig = {0};
if (NULL != pCSIInfo) {
GetSensorDataObject()->CreateCSIPHYConfig(&cmdCSIPHYConfig,
pCSIInfo->laneAssign, pCSIInfo->isComboMode, m_currentResolutionIndex);
cmdCSIPHYConfig.secureMode = static_cast<UINT8>(IsSecureMode());
result = m_pCSIPHY->Configure(GetCSLSession(), &cmdCSIPHYConfig);
if (CamxResultSuccess != result) {
CAMX_LOG_ERROR(CamxLogGroupSensor, "CSI Configuration failed");
}
}
}
if (CamxResultSuccess == result) {
PublishLensInformation(); /* 上报镜头信息 */
PublishCameraModuleInformation(); /* 上报camera模块信息 */
PublishISO100GainInformation();
m_sensorConfigStatus = SensorConfigurationStatus::SensorSubModuleCreateComplete;
CAMX_LOG_INFO(CamxLogGroupSensor, "Sensor Submodule creation successful");
} else {
m_sensorConfigStatus = SensorConfigurationStatus::SensorSubModuleCreateFailed;
CAMX_LOG_ERROR(CamxLogGroupSensor, "Sensor Submodule creation failed");
}
} else {
result = CamxResultEFailed;
m_sensorConfigStatus = SensorConfigurationStatus::SensorSubModuleCreateFailed;
CAMX_LOG_ERROR(CamxLogGroupSensor, "Creating sensor submodules failed due to failed sensor configuration");
}
return result;
}