最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
bool Camera3Device::RequestThread::threadLoop(){
// Handle paused state. 如果没有Request请求时,将会等待50ms,再进行下一次判断
if (waitIfPaused()) {
return true;
}
// 最重要的三个方法 1.Wait for the next batch of requests.拍照请求的优先级肯定是高于预览请求
waitForNextRequestBatch();
... ...
// 最重要的三个方法 2.Prepare a batch of HAL requests and output buffers.
res = prepareHalRequests();
... ...
//最重要的三个方法 3.如果该值为true,那么继续循环
submitRequestSuccess = sendRequestsBatch();
}
bool Camera3Device::RequestThread::sendRequestsBatch() {
res = mInterface->processBatchCaptureRequests(requests, &numRequestProcessed);
}
status_t Camera3Device::HalInterface::processBatchCaptureRequests(){
if (hidlSession_3_4 != nullptr) {
// 调用 CameraDeviceSession.cpp 中的方法
err = hidlSession_3_4->processCaptureRequest_3_4( );
} else {
err = mHidlSession->processCaptureRequest( );
}
}
CameraDeviceSession.cpp (hardware\\interfaces\\camera\\device\\3.4\\default)
Return<void> CameraDeviceSession::processCaptureRequest_3_4(){
s = processOneCaptureRequest_3_4(requests[i])
}
Status CameraDeviceSession::processOneCaptureRequest_3_4(){
// 这个会跳转到 Camxhal3entry.cpp 中的process_capture_request 方法, 需要继续厘清跳转地方
ATRACE_BEGIN("camera3->process_capture_request");
status_t ret = mDevice->ops->process_capture_request(mDevice, &halRequest);
ATRACE_END();
}
Camxhal3entry.cpp (vendor\\qcom\\proprietary\\camx\\src\\core\\hal)
int process_capture_request(){
// 会跳转到Camxhal3.cpp process_capture_request 方法
pHAL3->process_capture_request(pCamera3DeviceAPI, pCaptureRequestAPI);
}
Camxhal3.cpp (vendor\\qcom\\proprietary\\camx\\src\\core\\hal)
static int process_capture_request(){
result = pHALDevice->ProcessCaptureRequest(pRequest);
}
Camxhaldevice.cpp (vendor\\qcom\\proprietary\\camx\\src\\core\\hal)
CamxResult HALDevice::ProcessCaptureRequest(){
//调用 Chxextensioninterface.cpp chi_override_process_request 方法
result = GetCHIAppCallbacks()->chi_override_process_request()
}
Chxextensioninterface.cpp (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiframework)
static CDKResult chi_override_process_request(){
// 调用 Chxextensionmodule.cpp OverrideProcessRequest方法
return pExtensionModule->OverrideProcessRequest();
}
Chxextensionmodule.cpp (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiframework)
CDKResult ExtensionModule::OverrideProcessRequest(){
//选取 Usecase 去做ProcessCaptureRequest操作
result = m_pSelectedUsecase[logicalCameraId]->ProcessCaptureRequest(pCaptureRequest);
}
Chxusecase.cpp (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiframework)
CDKResult Usecase::ProcessCaptureRequest(){
// 调用指定的UseCase
result = ExecuteCaptureRequest(pRequest);
}
Chxadvancedcamerausecase.cpp (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiusecase)
CDKResult AdvancedCameraUsecase::ExecuteCaptureRequest(){
if(TRUE == AdvancedFeatureEnabled()){
// AdvancedFeatureEnabled HDR MFNR
result = pFeature->ExecuteProcessRequest(pRequest);
}else{
// 没有任何Feature 执行的流程,拍照
result = CameraUsecaseBase::ExecuteCaptureRequest(pRequest);
}
}
CDKResult CameraUsecaseBase::ExecuteCaptureRequest(){
// 没有任何Feature 执行的流程
CheckAndActivatePipeline(m_sessions[session].pSession);
... ...
result = SubmitRequest(&submitRequest);
}
Chxusecase.h (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiframework)
CHX_INLINE CDKResult CheckAndActivatePipeline(){
//ActivatePipeline一般一个Feature 一个Pipeline,MFNR 有多个Pipeline
result = ExtensionModule::GetInstance()->ActivatePipeline();
}
Chxextensionmodule.cpp (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiframework)
CDKResult ExtensionModule::ActivatePipeline()
{
return g_chiContextOps.pActivatePipeline();
}
Camxchi.cpp (vendor\\qcom\\proprietary\\camx\\src\\core\\chi)
static CDKResult ChiActivatePipeline(){
result = pChiContext->ActivatePipeline();
}
Camxchicontext.cpp (vendor\\qcom\\proprietary\\camx\\src\\core\\chi)
CamxResult ChiContext::ActivatePipeline(){
result = pChiSession->StreamOn();
}
Camxsession.cpp (vendor\\qcom\\proprietary\\camx\\src\\core)
CamxResult Session::StreamOn(){
result = pPipeline->StreamOn();
}
Camxpipeline.cpp (vendor\\qcom\\proprietary\\camx\\src\\core)
CamxResult Pipeline::StreamOn(){
result = m_pChiContext->GetHwContext()->StreamOn();
}
Camxhwcontext.cpp (vendor\\qcom\\proprietary\\camx\\src\\core)
CamxResult HwContext::StreamOn(){
result = CSLStreamOn();
}
Camxcsl.cpp (vendor\\qcom\\proprietary\\camx\\src\\csl)
CamxResult CSLStreamOn(){
pJumpTable->CSLStreamOn();
}
Camxcslhw.cpp (vendor\\qcom\\proprietary\\camx\\src\\csl\\hw)
CamxResult CSLStreamOnHW(){
result = CSLHwStreamOnKMDHardwares();
}
Camxcslhwinternal.cpp (vendor\\qcom\\proprietary\\camx\\src\\csl\\hw)
CamxResult CSLHwStreamOnKMDHardwares(){
result = pHWDevice->deviceOp.StreamOn();
}
然后返回执行 Chxadvancedcamerausecase.cpp 的CameraUsecaseBase::ExecuteCaptureRequest方法
CDKResult AdvancedCameraUsecase::ExecuteCaptureRequest(){
if(TRUE == AdvancedFeatureEnabled()){
result = pFeature->ExecuteProcessRequest(pRequest);
}else{
// 没有任何Feature 执行的流程
result = CameraUsecaseBase::ExecuteCaptureRequest(pRequest);
}
}
CDKResult CameraUsecaseBase::ExecuteCaptureRequest(){
// 没有任何Feature 执行的流程
CheckAndActivatePipeline(m_sessions[session].pSession);
//Chxusecase .cpp
result = SubmitRequest(&submitRequest);
}
Chxusecase.cpp (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiframework)
CDKResult Usecase::SubmitRequest(){
//
result = ExtensionModule::GetInstance()->SubmitRequest
}
Chxextensionmodule.cpp (vendor\\qcom\\proprietary\\chi-cdk\\core\\chiframework)
CDKResult ExtensionModule::SubmitRequest(){
result = g_chiContextOps.pSubmitPipelineRequest();
}
Camxchi.cpp (vendor\\qcom\\proprietary\\camx\\src\\core\\chi)
static CDKResult ChiSubmitPipelineRequest(){
result = pChiContext->SubmitRequest();
}
Camxchicontext.cpp (vendor\\qcom\\proprietary\\camx\\src\\core\\chi)
CamxResult ChiContext::SubmitRequest(){
result = pSession->ProcessCaptureRequest();
}
Camxsession.cpp (vendor\\qcom\\proprietary\\camx\\src\\core)
CamxResult Session::ProcessCaptureRequest(){
// 暂未找到跳转到ProcessRequest 的地方
}
CamxResult Session::ProcessRequest(){
result = m_pipelineData[rRequest.pipelineIndex].pPipeline->OpenRequest();
//
result = m_pipelineData[rRequest.pipelineIndex].pPipeline->ProcessRequest();
}
Camxpipeline.cpp (vendor\\qcom\\proprietary\\camx\\src\\core)
# 最后
2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。
![](https://img-blog.csdnimg.cn/img_convert/80faf0eb0908cf2f0a1d4bfe184a68fd.webp?x-oss-process=image/format,png)
**更多JVM面试整理:**
![](https://img-blog.csdnimg.cn/img_convert/6136ee6a071b50d34eed2bbebfdfeb5d.webp?x-oss-process=image/format,png)
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**
Session::ProcessRequest(){
result = m_pipelineData[rRequest.pipelineIndex].pPipeline->OpenRequest();
//
result = m_pipelineData[rRequest.pipelineIndex].pPipeline->ProcessRequest();
}
Camxpipeline.cpp (vendor\qcom\proprietary\camx\src\core)
最后
2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。
[外链图片转存中…(img-313XQeu2-1715817959607)]
更多JVM面试整理:
[外链图片转存中…(img-iOuWhcNz-1715817959607)]