1a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang/* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved. 2a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * 3a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * Redistribution and use in source and binary forms, with or without 4a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * modification, are permitted provided that the following conditions are 5a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * met: 6a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * * Redistributions of source code must retain the above copyright 7a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * notice, this list of conditions and the following disclaimer. 8a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * * Redistributions in binary form must reproduce the above 9a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * copyright notice, this list of conditions and the following 10a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * disclaimer in the documentation and/or other materials provided 11a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * with the distribution. 12a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * * Neither the name of Code Aurora Forum, Inc. nor the names of its 13a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * contributors may be used to endorse or promote products derived 14a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * from this software without specific prior written permission. 15a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * 16a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * 28a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang */ 29a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang/*#error uncomment this for compiler test!*/ 30a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 31a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang//#define ALOG_NDEBUG 0 32a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#define ALOG_NIDEBUG 0 33a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#define LOG_TAG "QualcommCamera" 34a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#include <utils/Log.h> 35a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#include <utils/threads.h> 36a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#include <fcntl.h> 37a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#include <sys/mman.h> 38a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 39a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#include "QCameraHAL.h" 40a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang/* include QCamera Hardware Interface Header*/ 41a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#include "QualcommCamera.h" 42a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 43a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangextern "C" { 44a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#include <sys/time.h> 45a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 46a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 47a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang/** 48a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * The functions need to be provided by the camera HAL. 49a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * 50a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * If getNumberOfCameras() returns N, the valid cameraId for getCameraInfo() 51a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang * and openCameraHardware() is 0 to N-1. 52a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang */ 53a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 54a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangstatic hw_module_methods_t camera_module_methods = { 55a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang open: camera_device_open, 56a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang}; 57a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 58a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangstatic hw_module_t camera_common = { 59a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang tag: HARDWARE_MODULE_TAG, 60a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang module_api_version: CAMERA_MODULE_API_VERSION_2_0, 61a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hal_api_version: HARDWARE_HAL_API_VERSION, 62a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang id: CAMERA_HARDWARE_MODULE_ID, 63a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang name: "Qcamera", 64a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang author:"Qcom", 65a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang methods: &camera_module_methods, 66a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang dso: NULL, 67a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang reserved: {0}, 68a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang}; 69a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 70a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangcamera_module_t HAL_MODULE_INFO_SYM = { 71a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang common: camera_common, 72a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang get_number_of_cameras: get_number_of_cameras, 73a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang get_camera_info: get_camera_info, 74a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang}; 75a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 76a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangcamera2_device_ops_t camera_ops = { 77a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang set_request_queue_src_ops: android::set_request_queue_src_ops, 78a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang notify_request_queue_not_empty: android::notify_request_queue_not_empty, 79a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang set_frame_queue_dst_ops: android::set_frame_queue_dst_ops, 80a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang get_in_progress_count: android::get_in_progress_count, 81a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang flush_captures_in_progress: android::flush_captures_in_progress, 82a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang construct_default_request: android::construct_default_request, 83a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 84a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang allocate_stream: android::allocate_stream, 85a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang register_stream_buffers: android::register_stream_buffers, 86a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang release_stream: android::release_stream, 87a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 88a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang allocate_reprocess_stream: android::allocate_reprocess_stream, 89f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala allocate_reprocess_stream_from_stream: android::allocate_reprocess_stream_from_stream, 90a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang release_reprocess_stream: android::release_reprocess_stream, 91a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 92a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang trigger_action: android::trigger_action, 93a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang set_notify_callback: android::set_notify_callback, 94a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang get_metadata_vendor_tag_ops: android::get_metadata_vendor_tag_ops, 95a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang dump: android::dump, 96a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang}; 97a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 98a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangnamespace android { 99a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 100a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangtypedef struct { 101a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera2_device_t hw_dev; 102a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware; 103a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int camera_released; 104a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int cameraId; 105a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} camera_hardware_t; 106a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 107a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen WangQCameraHardwareInterface *util_get_Hal_obj(const camera2_device_t * device) 108a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 109a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = NULL; 110a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(device && device->priv){ 111a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 112a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware = camHal->hardware; 113a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 114a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return hardware; 115a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 116a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 117a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangextern "C" int get_number_of_cameras() 118a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 119a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang /* try to query every time we get the call!*/ 120a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 121a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return android::HAL_getNumberOfCameras(); 122a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 123a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 124a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangextern "C" int get_camera_info(int camera_id, struct camera_info *info) 125a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 126a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 127a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E, id = %d", __func__, camera_id); 128a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(info) { 129a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = android::HAL_getCameraInfo(camera_id, info); 130a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 131a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: X, id = %d", __func__, camera_id); 132a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 133a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 134a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 135a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 136a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang/* HAL should return NULL if it fails to open camera hardware. */ 137a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangextern "C" int camera_device_open( 138a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const struct hw_module_t* module, const char* id, 139a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang struct hw_device_t** hw_device) 140a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 141a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 142a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int mode = 0; 143a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera2_device_t *device = NULL; 144a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E, id = %s", __func__, id); 145a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(module && id && hw_device) { 146a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int cameraId = atoi(id); 147a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 148a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if (!strcmp(module->name, camera_common.name)) { 149a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_hardware_t *camHal = 150a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang (camera_hardware_t *) malloc(sizeof (camera_hardware_t)); 151a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(!camHal) { 152a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang *hw_device = NULL; 153a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("%s: end in no mem", __func__); 154a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 155a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 156a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang /* we have the camera_hardware obj malloced */ 157a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang memset(camHal, 0, sizeof (camera_hardware_t)); 158a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camHal->hardware = new QCameraHardwareInterface(cameraId, mode); 159a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if (camHal->hardware && camHal->hardware->isCameraReady()) { 160a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camHal->cameraId = cameraId; 161a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang device = &camHal->hw_dev; 162a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang device->common.close = close_camera_device; 163a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang device->common.version = CAMERA_DEVICE_API_VERSION_2_0; 164a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang device->ops = &camera_ops; 165a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang device->priv = (void *)camHal; 166a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = 0; 167a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } else { 168a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if (camHal->hardware) { 169a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang delete camHal->hardware; 170a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camHal->hardware = NULL; 171a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 172a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang free(camHal); 173a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang device = NULL; 174a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 175a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 176a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 177a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang /* pass actual hw_device ptr to framework. This amkes that we actally be use memberof() macro */ 178a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang *hw_device = (hw_device_t*)&device->common; 179a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("%s: end rc %d", __func__, rc); 180a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 181a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 182a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 183a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangextern "C" int close_camera_device(hw_device_t *hw_dev) 184a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 185a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: device =%p E", __func__, hw_dev); 186a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 187a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera2_device_t *device = (camera2_device_t *)hw_dev; 188a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 189a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(device) { 190a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 191a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(camHal ) { 192a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 193a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(!camHal->camera_released) { 194a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 195a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->release( ); 196a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 197a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 198a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) 199a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang delete hardware; 200a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang free(camHal); 201a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 202a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = 0; 203a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 204a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 205a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 206a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 207a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint set_request_queue_src_ops(const struct camera2_device *device, 208a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const camera2_request_queue_src_ops_t *request_src_ops) 209a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 210a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 211a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 212a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 213a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 214a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->set_request_queue_src_ops(request_src_ops); 215a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 216a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 217a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 218a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 219a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint notify_request_queue_not_empty(const struct camera2_device *device) 220a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 221a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 222a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 223a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 224a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 225a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->notify_request_queue_not_empty(); 226a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 227a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 228a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 229a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 230a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint set_frame_queue_dst_ops(const struct camera2_device *device, 231a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const camera2_frame_queue_dst_ops_t *frame_dst_ops) 232a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 233a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 234a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 235a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 236a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 237a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->set_frame_queue_dst_ops(frame_dst_ops); 238a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 239a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 240a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 241a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 242a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint get_in_progress_count(const struct camera2_device *device) 243a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 244a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 245a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("%s:E",__func__); 246a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 247a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 248a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 249a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->get_in_progress_count(); 250a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 251a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("%s:X",__func__); 252a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 253a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 254a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 255a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint flush_captures_in_progress(const struct camera2_device *) 256a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 257a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("%s:E",__func__); 258a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("%s:X",__func__); 259a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return INVALID_OPERATION; 260a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 261a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 262a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint construct_default_request(const struct camera2_device *device, 263a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int request_template, 264a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_metadata_t **request) 265a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 266a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 267a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 268a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 269a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 270a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->construct_default_request(request_template, request); 271a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 272a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 273a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 274a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 275a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint allocate_stream(const struct camera2_device *device, 276a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t width, 277a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t height, 278a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int format, 279a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const camera2_stream_ops_t *stream_ops, 280a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t *stream_id, 281a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t *format_actual, 282a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t *usage, 283a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t *max_buffers) 284a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 285a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 286a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 287a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 288a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 289a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->allocate_stream(width, height, format, stream_ops, 290a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang stream_id, format_actual, usage, max_buffers); 291a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 292a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 293a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 294a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 295a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint register_stream_buffers( 296a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const struct camera2_device *device, 297a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t stream_id, 298a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int num_buffers, 299a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang buffer_handle_t *buffers) 300a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 301a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 302a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 303a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 304a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 305a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->register_stream_buffers(stream_id, num_buffers, buffers); 306a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 307a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 308a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 309a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 310a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint release_stream( 311a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const struct camera2_device *device, 312a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t stream_id) 313a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 314a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 315a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 316a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 317a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 318a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->release_stream(stream_id); 319a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 320a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 321a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 322a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 323a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint allocate_reprocess_stream(const struct camera2_device *, 324a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t width, 325a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t height, 326a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t format, 327a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const camera2_stream_in_ops_t *reprocess_stream_ops, 328a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t *stream_id, 329a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t *consumer_usage, 330a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t *max_buffers) 331a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 332a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return INVALID_OPERATION; 333a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 334a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 335f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvalaint allocate_reprocess_stream_from_stream(const struct camera2_device *, 336f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala uint32_t output_stream_id, 337f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala const camera2_stream_in_ops_t *reprocess_stream_ops, 338f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala uint32_t *stream_id) 339f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala{ 340f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala return INVALID_OPERATION; 341f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala} 342f9761fc5f713a47795f77e0cd8c6dfc23e166f70Eino-Ville Talvala 343a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint release_reprocess_stream( 344a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const struct camera2_device *, 345a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t stream_id) 346a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 347a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return INVALID_OPERATION; 348a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 349a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 350a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint trigger_action(const struct camera2_device *, 351a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang uint32_t trigger_id, 352a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int32_t ext1, 353a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int32_t ext2) 354a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 355a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return INVALID_OPERATION; 356a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 357a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 358a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint set_notify_callback(const struct camera2_device *device, 359a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera2_notify_callback notify_cb, 360a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang void *user) 361a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 362a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 363a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 364a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 365a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 366a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->set_notify_callback(notify_cb, user); 367a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 368a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 369a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 370a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 371a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint get_metadata_vendor_tag_ops(const struct camera2_device *device, 372a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang vendor_tag_query_ops_t **ops) 373a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 374a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = INVALID_OPERATION; 375a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 376a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 377a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 378a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->get_metadata_vendor_tag_ops(ops); 379a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 380a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 381a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 382a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 383a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint dump(const struct camera2_device *, int fd) 384a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 385a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return INVALID_OPERATION; 386a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 387a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 388a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#if 0 389a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint set_preview_window(camera2_device_t * device, 390a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang struct preview_stream_ops *window) 391a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 392a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 393a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 394a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 395a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL) { 396a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->setPreviewWindow(window); 397a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 398a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 399a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 400a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 401a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid set_CallBacks(camera2_device_t * device, 402a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_notify_callback notify_cb, 403a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_data_callback data_cb, 404a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_data_timestamp_callback data_cb_timestamp, 405a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_request_memory get_memory, 406a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang void *user) 407a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 408a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 409a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 410a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 411a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->setCallbacks(notify_cb,data_cb, data_cb_timestamp, get_memory, user); 412a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 413a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 414a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 415a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid enable_msg_type(camera2_device_t * device, int32_t msg_type) 416a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 417a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 418a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 419a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->enableMsgType(msg_type); 420a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 421a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 422a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 423a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid disable_msg_type(camera2_device_t * device, int32_t msg_type) 424a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 425a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 426a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 427a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 428a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->disableMsgType(msg_type); 429a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 430a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 431a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 432a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint msg_type_enabled(camera2_device_t * device, int32_t msg_type) 433a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 434a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 435a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 436a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 437a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 438a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->msgTypeEnabled(msg_type); 439a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 440a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 441a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 442a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 443a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint start_preview(camera2_device_t * device) 444a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 445a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 446a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 447a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 448a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 449a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->startPreview( ); 450a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 451a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: X", __func__); 452a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 453a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 454a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 455a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid stop_preview(camera2_device_t * device) 456a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 457a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 458a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 459a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 460a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->stopPreview( ); 461a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 462a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 463a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 464a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint preview_enabled(camera2_device_t * device) 465a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 466a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 467a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 468a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 469a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 470a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->previewEnabled( ); 471a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 472a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 473a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 474a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 475a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint store_meta_data_in_buffers(camera2_device_t *device, int enable) 476a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 477a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 478a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 479a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 480a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 481a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->storeMetaDataInBuffers(enable); 482a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 483a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 484a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 485a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 486a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint start_recording(camera2_device_t *device) 487a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 488a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 489a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 490a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 491a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 492a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->startRecording( ); 493a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 494a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 495a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 496a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 497a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid stop_recording(camera2_device_t *device) 498a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 499a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 500a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 501a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 502a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->stopRecording( ); 503a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 504a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 505a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 506a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint recording_enabled(camera2_device_t *device) 507a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 508a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 509a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 510a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 511a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 512a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->recordingEnabled( ); 513a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 514a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 515a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 516a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 517a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid release_recording_frame(camera2_device_t *device, 518a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang const void *opaque) 519a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 520a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGV("Q%s: E", __func__); 521a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 522a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 523a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->releaseRecordingFrame(opaque); 524a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 525a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 526a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 527a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint auto_focus(camera2_device_t *device) 528a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 529a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 530a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 531a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 532a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 533a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->autoFocus( ); 534a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 535a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 536a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 537a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 538a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint cancel_auto_focus(camera2_device_t *device) 539a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 540a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 541a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 542a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 543a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 544a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->cancelAutoFocus( ); 545a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 546a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 547a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 548a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 549a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint take_picture(camera2_device_t *device) 550a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 551a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 552a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 553a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 554a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 555a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->takePicture( ); 556a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 557a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 558a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 559a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 560a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint cancel_picture(camera2_device_t *device) 561a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 562a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 563a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 564a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 565a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 566a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 567a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->cancelPicture( ); 568a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 569a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 570a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 571a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 572a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint set_parameters(camera2_device_t *device, const char *parms) 573a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 574a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 575a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 576a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 577a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 578a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL && parms){ 579a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang //QCameraParameters param;// = util_get_HAL_parameter(device); 580a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang //String8 str = String8(parms); 581a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 582a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang //param.unflatten(str); 583a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->setParameters(parms); 584a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang //rc = 0; 585a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 586a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 587a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 588a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 589a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangchar* get_parameters(camera2_device_t *device) 590a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 591a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 592a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 593a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 594a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang char *parms = NULL; 595a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->getParameters(&parms); 596a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return parms; 597a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 598a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return NULL; 599a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 600a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 601a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid put_parameters(camera2_device_t *device, char *parm) 602a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 603a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 604a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 605a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 606a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 607a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->putParameters(parm); 608a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 609a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 610a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 611a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint send_command(camera2_device_t *device, 612a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int32_t cmd, int32_t arg1, int32_t arg2) 613a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 614a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 615a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 616a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 617a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 618a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->sendCommand( cmd, arg1, arg2); 619a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 620a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 621a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 622a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 623a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangvoid release(camera2_device_t *device) 624a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 625a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 626a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 627a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 628a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 629a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang hardware->release( ); 630a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang camHal->camera_released = true; 631a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 632a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 633a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 634a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wangint dump(camera2_device_t *device, int fd) 635a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang{ 636a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang ALOGE("Q%s: E", __func__); 637a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang int rc = -1; 638a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang QCameraHardwareInterface *hardware = util_get_Hal_obj(device); 639a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang if(hardware != NULL){ 640a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang rc = hardware->dump( fd ); 641a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang } 642a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang return rc; 643a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang} 644a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang#endif 645a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang 646a46eb3014aec9c8a6ed170f2a99b498100d6f392Shuzhen Wang}; // namespace android 647