1bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/* 2bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** Copyright (c) 2011 Code Aurora Forum. All rights reserved. 3bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** 4bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** Licensed under the Apache License, Version 2.0 (the "License"); 5bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** you may not use this file except in compliance with the License. 6bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** You may obtain a copy of the License at 7bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** 8bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** http://www.apache.org/licenses/LICENSE-2.0 9bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** 10bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** Unless required by applicable law or agreed to in writing, software 11bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** distributed under the License is distributed on an "AS IS" BASIS, 12bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** See the License for the specific language governing permissions and 14bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** limitations under the License. 15bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani*/ 16bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 17bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/*#error uncomment this for compiler test!*/ 18bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 19bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//#define ALOG_NDEBUG 0 20bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#define ALOG_NIDEBUG 0 21fece04335ca331d76bf84f75d8818f1b24916f4eAjay Dudani#define LOG_TAG "QualcommCamera" 22bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <utils/Log.h> 23bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <utils/threads.h> 24bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <fcntl.h> 25bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <sys/mman.h> 26bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 27bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/* include QCamera Hardware Interface Header*/ 28bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include "QualcommCamera.h" 29bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include "QualcommCameraHardware.h" 30bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//#include <camera/CameraHardwareInterface.h> 31bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 32bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniextern "C" { 33bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <sys/time.h> 34bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 35bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 36bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/* HAL function implementation goes here*/ 37bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 38bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/** 39bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani * The functions need to be provided by the camera HAL. 40bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani * 41bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani * If getNumberOfCameras() returns N, the valid cameraId for getCameraInfo() 42bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani * and openCameraHardware() is 0 to N-1. 43bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani */ 44bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 45bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic hw_module_methods_t camera_module_methods = { 46bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani open: camera_device_open, 47bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}; 48bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 49bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 50bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic hw_module_t camera_common = { 51bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani tag: HARDWARE_MODULE_TAG, 52bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani version_major: 0, 53bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani version_minor: 01, 54bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani id: CAMERA_HARDWARE_MODULE_ID, 55bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani name: "Qcamera", 56bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani author:"Qcom", 57bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani methods: &camera_module_methods, 58bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani dso: NULL, 59bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //reserved[0]: 0, 60bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}; 61bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 62bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanicamera_module_t HAL_MODULE_INFO_SYM = { 63bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani common: camera_common, 64bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani get_number_of_cameras: get_number_of_cameras, 65bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani get_camera_info: get_camera_info, 66bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}; 67bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 68bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanicamera_device_ops_t camera_ops = { 69bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani set_preview_window: android::set_preview_window, 70bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani set_callbacks: android::set_callbacks, 71bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani enable_msg_type: android::enable_msg_type, 72bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani disable_msg_type: android::disable_msg_type, 73bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani msg_type_enabled: android::msg_type_enabled, 74bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 75bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani start_preview: android::start_preview, 76bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani stop_preview: android::stop_preview, 77bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani preview_enabled: android::preview_enabled, 78bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani store_meta_data_in_buffers: android::store_meta_data_in_buffers, 79bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 80bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani start_recording: android::start_recording, 81bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani stop_recording: android::stop_recording, 82bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani recording_enabled: android::recording_enabled, 83bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani release_recording_frame: android::release_recording_frame, 84bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 85bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani auto_focus: android::auto_focus, 86bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cancel_auto_focus: android::cancel_auto_focus, 87bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 88bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani take_picture: android::take_picture, 89bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cancel_picture: android::cancel_picture, 90bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 91bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani set_parameters: android::set_parameters, 92bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani get_parameters: android::get_parameters, 93bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani put_parameters: android::put_parameters, 94bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani send_command: android::send_command, 95bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 96bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani release: android::release, 97bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani dump: android::dump, 98bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}; 99bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 100bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaninamespace android { 101bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 102bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanitypedef struct { 103bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware *hardware; 104bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int camera_released; 105bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QCameraParameters parameters; 106bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani #if 1 107bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_notify_callback notify_cb; 108bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_callback data_cb; 109bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_timestamp_callback data_cb_timestamp; 110bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_request_memory get_memory; 111bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user_data; 112bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani #endif 113bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} camera_hardware_t; 114bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 115bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanitypedef struct { 116bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_memory_t mem; 117bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int32_t msgType; 118bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani sp<IMemory> dataPtr; 119bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void* user; 120bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani unsigned int index; 121bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} q_cam_memory_t; 122bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 123bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 124bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic void camera_release_memory(struct camera_memory *mem) 125bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 126bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 127bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 128bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid cam_notify_callback(int32_t msgType, 129bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int32_t ext1, 130bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int32_t ext2, 131bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void* user) 132bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 133968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 134bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_device * device = (camera_device *)user; 135bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device) { 136bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 137bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal) { 138bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_notify_callback notify_cb = camHal->notify_cb; 139bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user_data = camHal->user_data; 140bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(notify_cb) { 141bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani notify_cb(msgType, ext1, ext2, user_data); 142bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 143bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 144bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 145bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 146bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 147bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanicamera_memory_t* get_mem(int fd,size_t buf_size, 148bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani unsigned int num_bufs, 149bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user) 150bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 151968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 152bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_device * device = (camera_device *)user; 153bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device) { 154bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 155bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal) { 156bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_request_memory getmem_cb = camHal->get_memory; 157bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user_data = camHal->user_data; 158bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(getmem_cb) { 159bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return getmem_cb(fd, buf_size, num_bufs, user_data); 160bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 161bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 162bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 163bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return NULL; 164bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 165bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#if 0 166bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid native_send_data_callback(int32_t msgType, 167bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_memory_t * framebuffer, 168bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void* user) 169bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 170bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani ALOGE("Q%s: E", __func__); 171bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani static unsigned int counter = 0; 172bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#if 0 173bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_device * device = (camera_device *)user; 174bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device) { 175bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 176bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal) { 177bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_callback data_cb = camHal->data_cb; 178bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user_data = camHal->user_data; 179bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(data_cb) { 180bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani q_cam_memory_t *qmem = (q_cam_memory_t *)malloc(sizeof(q_cam_memory_t)); 181bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if (qmem) { 182bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->dataPtr = dataPtr; 183bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.data = (void *)((int)dataPtr->pointer() + dataPtr->offset()); 184bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.handle = NULL; //(void *)dataPtr->getHeapID(); 185bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.size = dataPtr->size( ); 186bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.release = camera_release_memory; 187bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->msgType = msgType; 188bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->index = counter; 189bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#endif 190bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani data_cb(msgType, framebuffer, counter, NULL, user); 191bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani counter++; 192bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#if 0 193bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 194bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani ALOGE("%s: out of memory", __func__); 195bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 196bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#endif 197bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// } 198bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// } 199bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// } 200bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 201bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#endif 202bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 203bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic void cam_data_callback(int32_t msgType, 204bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani const sp<IMemory>& dataPtr, 205bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void* user) 206bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 207968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 208bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani static unsigned int counter = 0; 209bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_device * device = (camera_device *)user; 210bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device) { 211bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 212bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal) { 213bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_callback data_cb = camHal->data_cb; 214bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user_data = camHal->user_data; 215bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(data_cb) { 216bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani q_cam_memory_t *qmem = (q_cam_memory_t *)malloc(sizeof(q_cam_memory_t)); 217bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if (qmem) { 218bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->dataPtr = dataPtr; 219bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.data = (void *)((int)dataPtr->pointer() + dataPtr->offset()); 220bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.handle = NULL; //(void *)dataPtr->getHeapID(); 221bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.size = dataPtr->size( ); 222bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.release = camera_release_memory; 223bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->msgType = msgType; 224bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->index = counter; 225bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani counter++; 226bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani data_cb(msgType, (camera_memory_t *)qmem, counter, NULL, user_data); 227bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 228bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani ALOGE("%s: out of memory", __func__); 229bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 230bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 231bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 232bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 233bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 234bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 235bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic void cam_data_callback_timestamp(nsecs_t timestamp, 236bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int32_t msgType, 237bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani const sp<IMemory>& dataPtr, 238bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void* user) 239bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 240968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 241bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 242bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani static unsigned int counter = 0; 243bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_device * device = (camera_device *)user; 244bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device) { 245bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 246bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal) { 247bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_timestamp_callback data_cb_timestamp = camHal->data_cb_timestamp; 248bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user_data = camHal->user_data; 249bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(data_cb_timestamp) { 250bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani q_cam_memory_t *qmem = (q_cam_memory_t *)malloc(sizeof(q_cam_memory_t)); 251bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if (qmem) { 252bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->dataPtr = dataPtr; 253bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.data = (void *)((int)dataPtr->pointer() + dataPtr->offset()); 254bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.handle = NULL; //(void *)dataPtr->getHeapID(); 255bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.size = dataPtr->size( ); 256bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->mem.release = camera_release_memory; 257bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->msgType = msgType; 258bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani qmem->index = counter; 259bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani counter++; 260bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani data_cb_timestamp(timestamp, msgType, (camera_memory_t *)qmem, counter, user_data); 261bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 262bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani ALOGE("%s: out of memory", __func__); 263bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 264bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 265bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 266bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 267bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 268bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 269bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay DudaniQualcommCameraHardware * util_get_Hal_obj( struct camera_device * device) 270bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 271bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware* hardware = NULL; 272bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device && device->priv){ 273bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 274bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware = camHal->hardware; 275bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 276bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return hardware; 277bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 278bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid close_Hal_obj( struct camera_device * device) 279bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 280968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("%s: E", __func__); 281bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware* hardware = NULL; 282bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device && device->priv){ 283bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 284bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani ALOGI("%s: clear hw", __func__); 285bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware = camHal->hardware; 286bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani delete hardware; 287bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 288968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("%s: X", __func__); 289bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 290bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 291bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 292bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay DudaniQCameraParameters* util_get_HAL_parameter( struct camera_device * device) 293bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 294bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QCameraParameters *param = NULL; 295bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device && device->priv){ 296bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 297bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani param = &(camHal->parameters); 298bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 299bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return param; 300bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 301bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 302bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 303bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniextern "C" int get_number_of_cameras() 304bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 305bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani /* try to query every time we get the call!*/ 306bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 307968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 308bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return android::HAL_getNumberOfCameras( ); 309bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 310bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 311bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniextern "C" int get_camera_info(int camera_id, struct camera_info *info) 312bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 313bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 314968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 315bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(info) { 316bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani struct CameraInfo camInfo; 317bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani memset(&camInfo, -1, sizeof (struct CameraInfo)); 318bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani HAL_getCameraInfo(camera_id, &camInfo); 319bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if (camInfo.facing >= 0) { 320bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = 0; 321bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani info->facing = camInfo.facing; 322bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani info->orientation = camInfo.orientation; 323bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 324bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 325bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani ALOGV("Q%s: X", __func__); 326bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 327bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 328bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 329bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 330bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/* HAL should return NULL if it fails to open camera hardware. */ 331bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniextern "C" int camera_device_open( 332bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani const struct hw_module_t* module, const char* id, 333bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani struct hw_device_t** hw_device) 334bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 335968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 336bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 337bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_device *device = NULL; 338bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(module && id && hw_device) { 339bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int cameraId = atoi(id); 340bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 341bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if (!strcmp(module->name, camera_common.name)) { 342bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani device = 343bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani (camera_device *)malloc(sizeof (struct camera_device)); 344bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device) { 345bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = 346bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani (camera_hardware_t *) malloc(sizeof (camera_hardware_t)); 347bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal) { 348bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani memset(camHal, 0, sizeof (camera_hardware_t)); 349bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camHal->hardware = HAL_openCameraHardware(cameraId); 350bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if (camHal->hardware != NULL) { 351bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani /*To Do: populate camHal*/ 352bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani device->common.close = close_camera_device; 353bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani device->ops = &camera_ops; 354bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani device->priv = (void *)camHal; 355bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = 0; 356bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 357bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani free(camHal); 358bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani free (device); 359bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani device = NULL; 360bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 361bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 362bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani free (device); 363bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani device = NULL; 364bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 365bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 366bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 367bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 368bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani *hw_device = (hw_device_t*)device; 369bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 370bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 371bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 372bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniextern "C" int close_camera_device( hw_device_t *hw_dev) 373bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 374968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: device =%p E", __func__, hw_dev); 375bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 376bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_device_t *device = (camera_device_t *)hw_dev; 377bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(device) { 378bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 379bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal ) { 380bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //if(!camHal->camera_released) { 381bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware* hardware = util_get_Hal_obj( device); 382bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL) { 383bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal->camera_released != true) 384bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->release( ); 385bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //hardware.clear( ); 386bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 387bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 388bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //} 389bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani close_Hal_obj(device); 390bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani free(device->priv); 391bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani device->priv = NULL; 392bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 393bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani free(device); 394bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = 0; 395bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 396bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 397bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 398bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 399bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 400bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint set_preview_window(struct camera_device * device, 401bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani struct preview_stream_ops *window) 402bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 403968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E window = %p", __func__, window); 404bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 405bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware *hardware = util_get_Hal_obj(device); 406bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL) { 407bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->set_PreviewWindow((void *)window); 408bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 409bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 410bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 411bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 412bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid set_callbacks(struct camera_device * device, 413bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_notify_callback notify_cb, 414bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_callback data_cb, 415bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_timestamp_callback data_cb_timestamp, 416bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_request_memory get_memory, 417bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani void *user) 418bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 419968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 420bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 421bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 422bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 423bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(camHal) { 424bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_notify_callback cam_nt_cb; 425bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_callback cam_dt_cb; 426bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_data_timestamp_callback cam_dt_timestamp_cb; 427bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 428bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camHal->notify_cb = notify_cb; 429bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camHal->data_cb = data_cb; 430bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camHal->data_cb_timestamp = data_cb_timestamp; 431bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camHal->user_data = user; 432bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camHal->get_memory = get_memory; 433bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani #if 0 434bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(notify_cb) { 435bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cam_nt_cb = cam_notify_callback; 436bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 437bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cam_nt_cb = NULL; 438bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 439bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 440bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(data_cb) { 441bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cam_dt_cb = cam_data_callback; 442bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 443bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cam_dt_cb = NULL; 444bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 445bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 446bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(data_cb_timestamp) { 447bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cam_dt_timestamp_cb = cam_data_callback_timestamp; 448bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 449bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani cam_dt_timestamp_cb = NULL; 450bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 451bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani #endif 452968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("cam_nt_cb =%p,cam_dt_cb=%p,cam_dt_timestamp_cb=%p", cam_nt_cb, cam_dt_cb, cam_dt_timestamp_cb); 453bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->setCallbacks(notify_cb,data_cb,data_cb_timestamp,get_memory, user); 454bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 455bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 456bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 457bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 458bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid enable_msg_type(struct camera_device * device, int32_t msg_type) 459bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 460bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 461bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 462bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->enableMsgType(msg_type); 463bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 464bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 465bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 466bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid disable_msg_type(struct camera_device * device, int32_t msg_type) 467bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 468bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 469968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 470bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 471bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->disableMsgType(msg_type); 472bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 473bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 474bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 475bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint msg_type_enabled(struct camera_device * device, int32_t msg_type) 476bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 477968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 478bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 479bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 480bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 481bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->msgTypeEnabled(msg_type); 482bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 483bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 484bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 485bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 486bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint start_preview(struct camera_device * device) 487bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 488968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 489bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 490bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 491bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 492bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->startPreview( ); 493bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 494968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: X", __func__); 495bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 496bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 497bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 498bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid stop_preview(struct camera_device * device) 499bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 500968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 501bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 502bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 503bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->stopPreview( ); 504bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 505bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 506bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 507bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint preview_enabled(struct camera_device * device) 508bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 509968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 510bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 511bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware* hardware = util_get_Hal_obj(device); 512bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 513bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->previewEnabled( ); 514bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 515bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 516bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 517bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 518bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint store_meta_data_in_buffers(struct camera_device * device, int enable) 519bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 520968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 521bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 522bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 523bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 524bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->storeMetaDataInBuffers( enable); 525bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 526bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 527bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 528bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 529bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint start_recording(struct camera_device * device) 530bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 531968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 532bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 533bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 534bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 535bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->startRecording( ); 536bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 537bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 538bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 539bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 540bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid stop_recording(struct camera_device * device) 541bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 542968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 543bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware* hardware = util_get_Hal_obj(device); 544bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 545bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->stopRecording( ); 546bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 547bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 548bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 549bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint recording_enabled(struct camera_device * device) 550bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 551968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 552bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 553bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 554bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 555bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->recordingEnabled( ); 556bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 557bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 558bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 559bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 560bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid release_recording_frame(struct camera_device * device, 561bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani const void *opaque) 562bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 563968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 564bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 565bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 566bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->releaseRecordingFrame( opaque); 567bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 568bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 569bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 570bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint auto_focus(struct camera_device * device) 571bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 572968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 573bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 574bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 575bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 576bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->autoFocus( ); 577bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 578bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 579bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 580bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 581bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint cancel_auto_focus(struct camera_device * device) 582bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 583968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 584bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 585bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 586bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 587bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->cancelAutoFocus( ); 588bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 589bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 590bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 591bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 592bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint take_picture(struct camera_device * device) 593bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 594968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 595bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 596bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 597bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 598bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->takePicture( ); 599bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 600bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 601bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 602bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 603bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint cancel_picture(struct camera_device * device) 604bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 605bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 606968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 607bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 608bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 609bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 610bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->cancelPicture( ); 611bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 612bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 613bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 614bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 615bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay DudaniQCameraParameters g_param; 616bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay DudaniString8 g_str; 617bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint set_parameters(struct camera_device * device, const char *parms) 618bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 619bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 620968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 621bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 622bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 623bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL && parms){ 624bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani // = util_get_HAL_parameter(device); 625bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani g_str = String8(parms); 626bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 627bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani g_param.unflatten(g_str); 628bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->setParameters( g_param ); 629bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 630bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 631bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 632bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 633bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanichar* get_parameters(struct camera_device * device) 634bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 635968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 636bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani char* rc = NULL; 637bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 638bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QCameraParameters param; 639bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 640bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 641bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani g_param = hardware->getParameters( ); 642bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani g_str = g_param.flatten( ); 643bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = (char *)g_str.string( ); 644bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if (!rc) { 645bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani ALOGE("get_parameters: NULL string"); 646bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } else { 647bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //ALOGE("get_parameters: %s", rc); 648bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 649bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 650968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("get_parameters X"); 651bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 652bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 653bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 654bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid put_parameters(struct camera_device * device, char *parm) 655bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 656bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 657968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 658bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 659bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 660bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 661bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //rc = hardware->putParameters(parm ); 662bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 663bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 664968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("put_parameters X"); 665bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 666bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 667bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint send_command(struct camera_device * device, 668bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int32_t cmd, int32_t arg1, int32_t arg2) 669bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 670968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 671bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 672bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 673bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 674bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = hardware->sendCommand( cmd, arg1, arg2); 675bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 676bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 677bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 678bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 679bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid release(struct camera_device * device) 680bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 681968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 682bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 683bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 684bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 685bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani hardware->release( ); 686bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani camHal->camera_released = true; 687bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 688bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 689bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 690bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint dump(struct camera_device * device, int fd) 691bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{ 692968e904f91c5de6bda43517a9f192527986e2052Azam Sadiq Pasha Kapatrala Syed ALOGV("Q%s: E", __func__); 693bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani int rc = -1; 694bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani QualcommCameraHardware * hardware = util_get_Hal_obj(device); 695bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani if(hardware != NULL){ 696bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //rc = hardware->dump( fd ); 697bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani rc = 0; 698bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani } 699bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani return rc; 700bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani} 701bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani 702bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}; // namespace android 703