Android Camera FW 里的requestId和frameId

安卓相机frameworks里面经常出现requestId和frameId,最近简单看了一下代码,发现相关流程还是很复杂的,总结来看requestId 就是上层(java)发送的repeating(capture)请求的id,是从0开始递增的。

这是CameraDeviceImpl.java里面下发请求的代码,调用到cameraserver里的submitRequestList

Android Camera FW 里的requestId和frameId_第1张图片

到CameraDeviceClient.cpp里面,mRequestIdCounter是随着应用层下发request递增的

Android Camera FW 里的requestId和frameId_第2张图片

省略部分代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Android Camera FW 里的requestId和frameId_第3张图片

虽然这里的requestId会通过ANDROID_REQUEST_ID这个TAG设置到Hal层,但是其实HAL并不太需要真个id,此时还看不出这个requestId有啥作用,接下来看result返回的时候怎么使用的。

capture result 返回最终会到这里的insertResultLocked,mResultExtras.requestId会设置给result metadata传到应用层

Android Camera FW 里的requestId和frameId_第4张图片

再回到CameraDeviceImpl,就是通过requestId到 mCaptureCallbackMap里面去找对应的回调接口回调给上层

Android Camera FW 里的requestId和frameId_第5张图片

所以综上看 requestId就是一个标记上层下发request的作用,回调metadta的时候方便找到对应的回调接口,所以requestId的作用仅仅是联系APP和FW的,对于HAL来说没有作用。

frameId是每帧都加一的。

到CameramanOutputUtils.cpp里面看到requestId就是在InFlightMap里面存着,而InFlightMap就是记录request信息的,通过frameNumber找到对应的request

Android Camera FW 里的requestId和frameId_第6张图片

Android Camera FW 里的requestId和frameId_第7张图片

这里的frameNumber就是Camera3Device.cpp里面threadLoop不断递增的frameId,每下发一次request就不断地递增的。

你可能感兴趣的:(Android,android)