From e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50 Mon Sep 17 00:00:00 2001 From: Iliyan Malchev Date: Wed, 27 Mar 2013 16:27:56 -0700 Subject: mako: move camera HAL from hardware/qcom/camera Change-Id: Ib76c01a8ce47dd17c4e5c986e5988c2ad1c61906 Signed-off-by: Iliyan Malchev --- camera/QCameraHAL.cpp | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 camera/QCameraHAL.cpp (limited to 'camera/QCameraHAL.cpp') diff --git a/camera/QCameraHAL.cpp b/camera/QCameraHAL.cpp new file mode 100644 index 0000000..dea0457 --- /dev/null +++ b/camera/QCameraHAL.cpp @@ -0,0 +1,132 @@ +/* +** Copyright (c) 2011 The Linux Foundation. All rights reserved. +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +/*#error uncomment this for compiler test!*/ + +//#define ALOG_NDEBUG 0 +#define ALOG_NIDEBUG 0 +#define LOG_TAG "QCameraHAL" +#include +#include +#include +#include + +/* include QCamera Hardware Interface Header*/ +#include "QCameraHAL.h" + +int HAL_numOfCameras = 0; +qcamera_info_t HAL_cameraInfo[MSM_MAX_CAMERA_SENSORS]; +mm_camera_t * HAL_camerahandle[MSM_MAX_CAMERA_SENSORS]; +int HAL_currentCameraMode; + +namespace android { +/* HAL function implementation goes here*/ + +/** + * The functions need to be provided by the camera HAL. + * + * If getNumberOfCameras() returns N, the valid cameraId for getCameraInfo() + * and openCameraHardware() is 0 to N-1. + */ +extern "C" int HAL_getNumberOfCameras() +{ + /* try to query every time we get the call!*/ + uint8_t num_camera = 0; + mm_camera_t * handle_base = 0; + ALOGV("%s: E", __func__); + + handle_base= mm_camera_query(&num_camera); + + if (!handle_base) { + HAL_numOfCameras = 0; + } + else + { + qcamera_info_t* p_camera_info = 0; + HAL_numOfCameras=num_camera; + + ALOGI("Handle base =0x%p",handle_base); + ALOGI("getCameraInfo: numOfCameras = %d", HAL_numOfCameras); + for(int i = 0; i < HAL_numOfCameras; i++) { + ALOGI("Handle [%d]=0x%p",i,handle_base+i); + HAL_camerahandle[i]=handle_base + i; + p_camera_info = &(HAL_camerahandle[i]->camera_info); + if (p_camera_info) { + ALOGI("Camera sensor %d info:", i); + ALOGI("camera_id: %d", p_camera_info->camera_id); + ALOGI("modes_supported: %x", p_camera_info->modes_supported); + ALOGI("position: %d", p_camera_info->position); + ALOGI("sensor_mount_angle: %d", p_camera_info->sensor_mount_angle); + } + } + } + + ALOGV("%s: X", __func__); + + return HAL_numOfCameras; +} + +extern "C" int HAL_isIn3DMode() +{ + return HAL_currentCameraMode == CAMERA_MODE_3D; +} + +extern "C" void HAL_getCameraInfo(int cameraId, struct CameraInfo* cameraInfo) +{ + mm_camera_t *mm_camer_obj = 0; + ALOGV("%s: E", __func__); + + if (!HAL_numOfCameras || HAL_numOfCameras < cameraId || !cameraInfo) + return; + else + mm_camer_obj = HAL_camerahandle[cameraId]; + + if (!mm_camer_obj) + return; + else { + cameraInfo->facing = + (FRONT_CAMERA == mm_camer_obj->camera_info.position)? + CAMERA_FACING_FRONT : CAMERA_FACING_BACK; + + cameraInfo->orientation = mm_camer_obj->camera_info.sensor_mount_angle; +#if 0 + // TODO: fix me + /* We always supprot ZSL in our stack*/ + cameraInfo->mode = CAMERA_SUPPORT_MODE_ZSL; + if (mm_camer_obj->camera_info.modes_supported & CAMERA_MODE_2D) { + cameraInfo->mode |= CAMERA_SUPPORT_MODE_2D; + } + if (mm_camer_obj->camera_info.modes_supported & CAMERA_MODE_3D) { + cameraInfo->mode |= CAMERA_SUPPORT_MODE_3D; + } +#endif + } + ALOGV("%s: X", __func__); + return; +} + +/* HAL should return NULL if it fails to open camera hardware. */ +extern "C" void * HAL_openCameraHardware(int cameraId, int mode) +{ + ALOGV("%s: E", __func__); + if (!HAL_numOfCameras || HAL_numOfCameras < cameraId ||cameraId < 0) { + return NULL; + } + return QCameraHAL_openCameraHardware(cameraId, mode); +} + + +}; // namespace android -- cgit v1.2.3