在ICS中,Camera::getCameraInfo(jint, CameraInfo*)在frameworks/av/camera/Camera.cpp中定义为
status_t Camera::getCameraInfo(int cameraId,
struct CameraInfo* cameraInfo) {
const sp<ICameraService>& cs = getCameraService();
if (cs == 0) return UNKNOWN_ERROR;
return cs->getCameraInfo(cameraId, cameraInfo);
}
然后它抓取一个活页夹对象CameraService
并致电getCameraInfo
on CameraService
.
status_t CameraService::getCameraInfo(int cameraId,
struct CameraInfo* cameraInfo) {
...
struct camera_info info;
status_t rc = mModule->get_camera_info(cameraId, &info);
...
return rc;
}
The mModule
包含您设备上相机的实际实现。不同的设备可能有不同的实现。例如你可以找到QualcommCamera
under 硬件/高通/相机/QualcommCamera.cpp https://android.googlesource.com/platform/hardware/qcom/camera/+/android-4.2.2_r1/QualcommCamera.cpp.
然后看一下connect
. The connect
做了类似的工作并最终调用CameraService::connect
。在该方法中,有一个CameraClient
初始化由mModule
。因此,当您使用客户端执行某些操作时,您实际上是在使用特定于设备的实现。
多说一句,mModule的初始化是hw_get_module
in CameraService::onFirstRef
.