2、android_hardware_Camera_getCameraInfo(JNI)
static void android_hardware_Camera_getCameraInfo(JNIEnv *env, jobject thiz,
jint cameraId, jobject info_obj)
{
CameraInfo cameraInfo;
status_t rc = Camera::getCameraInfo(cameraId, &cameraInfo);
if (rc != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException",
"Fail to get camera info");
return;
}
env->SetIntField(info_obj, fields.facing, cameraInfo.facing);
env->SetIntField(info_obj, fields.mode, cameraInfo.mode);
env->SetIntField(info_obj, fields.orientation, cameraInfo.orientation);
}
此处getCameraInfo调到/framework/base/libs/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);
}
此处调用到/framework/base/service/camera/libcameraservice/cameraservice.cpp中接口。
status_t CameraService::getCameraInfo(int cameraId,
struct CameraInfo* cameraInfo) {
if (cameraId < 0 || cameraId >= mNumberOfCameras) {
return BAD_VALUE;
}
HAL_getCameraInfo(cameraId, cameraInfo);
return OK;
}
HAL_getCameraInfo函数,调用\vendor\qcom\android-open\libcamera2\QualcommCameraHardware.cpp中的接口。
extern "C" void HAL_getCameraInfo(int cameraId, struct CameraInfo* cameraInfo)
{
int i;
char mDeviceName[PROPERTY_VALUE_MAX];
if(cameraInfo == NULL) {
LOGE("cameraInfo is NULL");
return;
}
property_get("ro.product.device",mDeviceName," "); //获取系统属性
for(i = 0; i < HAL_numOfCameras; i++) {
if(i == cameraId) {
LOGI("Found a matching camera info for ID %d", cameraId);
cameraInfo->facing = (HAL_cameraInfo[i].positio