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