最后
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
mRemoteDevice 是CameraServer进程当中执行openCamera成功后返回给Client端Binder对象的代理,它和CameraServer进程当中的CameraDeviceClient对象是对应的,只不过这里的mRemoteDevice还经过了Framework一点包装处理而已。
CameraDeviceClient.cpp (frameworks\\av\\services\\camera\\libcameraservice\\api2)
binder::Status CameraDeviceClient::submitRequestList(){
if(streaming){
//预览
mDevice->setStreamingRequestList();
}else{
//拍照
mDevice->captureList();
}
}
Camera3Device.cpp (frameworks\\av\\services\\camera\\libcameraservice\\device3)
//预览
status_t Camera3Device::setStreamingRequestList(){
//预览和拍照都会调用到 submitRequestsHelper 方法
submitRequestsHelper();
}
//拍照
status_t Camera3Device::captureList(){
//预览和拍照都会调用到 submitRequestsHelper 方法
submitRequestsHelper();
}
// submitRequestsHelper 方法实现
status_t Camera3Device::submitRequestsHelper(){
if (repeating) {
//预览流程 setRepeatingRequests处理
res = mRequestThread->setRepeatingRequests(requestList, lastFrameNumber);
} else {
// 拍照流程处理 queueRequestList
res = mRequestThread->queueRequestList(requestList, lastFrameNumber);
}
}
//预览
status_t Camera3Device::RequestThread::setRepeatingRequests(){
... ...
}
//拍照
status_t Camera3Device::RequestThread::queueRequestList(){
... ...
}
//mRequestThread 流程分析
status_t Camera3Device::initializeCommonLocked() {
mRequestThread = new RequestThread();
res=mRequestThread->run();
}
//Camera3Device.h (frameworks\av\services\camera\libcameraservice\device3)
class RequestThread : public Thread {
... ...
}
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);
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
没有任何Feature 执行的流程
result = CameraUsecaseBase::ExecuteCaptureRequest(pRequest);
}
}
CDKResult CameraUsecaseBase::ExecuteCaptureRequest(){
// 没有任何Feature 执行的流程
CheckAndActivatePipeline(m_sessions[session].pSession);
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
[外链图片转存中…(img-gwQqh4tg-1715818000798)]