13d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* Copyright (c) 2011-2014, 2016, The Linux Foundation. All rights reserved. 23d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 33d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Redistribution and use in source and binary forms, with or without 43d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * modification, are permitted provided that the following conditions are 53d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * met: 63d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Redistributions of source code must retain the above copyright 73d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * notice, this list of conditions and the following disclaimer. 83d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Redistributions in binary form must reproduce the above 93d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * copyright notice, this list of conditions and the following 103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * disclaimer in the documentation and/or other materials provided 113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * with the distribution. 123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Neither the name of The Linux Foundation nor the names of its 133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * contributors may be used to endorse or promote products derived 143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * from this software without specific prior written permission. 153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel */ 293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ALOG_NIDEBUG 0 313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define LOG_TAG "QualcommCamera" 323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// System dependencies 343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/threads.h> 353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <binder/IMemory.h> 363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <binder/MemoryBase.h> 373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <binder/MemoryHeapBase.h> 383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/RefBase.h> 393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" { 413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define TIME_H <SYSTEM_HEADER_PREFIX/time.h> 423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include TIME_H 433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// Camera dependencies 463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QualcommCamera.h" 473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QCamera2Factory.h" 483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QCamera2HWI.h" 493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* HAL function implementation goes here*/ 513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** 533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * The functions need to be provided by the camera HAL. 543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * If getNumberOfCameras() returns N, the valid cameraId for getCameraInfo() 563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * and openCameraHardware() is 0 to N-1. 573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel */ 583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic hw_module_methods_t camera_module_methods = { 613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel open: camera_device_open, 623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic hw_module_t camera_common = { 653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel tag: HARDWARE_MODULE_TAG, 663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel module_api_version: CAMERA_MODULE_API_VERSION_1_0, 673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hal_api_version: HARDWARE_HAL_API_VERSION, 683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel id: CAMERA_HARDWARE_MODULE_ID, 693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel name: "QCamera Module", 703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel author: "Quic on behalf of CAF", 713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel methods: &camera_module_methods, 723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dso: NULL, 733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reserved: {0}, 743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelusing namespace qcamera; 773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelnamespace android { 783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct { 803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_device hw_dev; 813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware; 823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int camera_released; 833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int cameraId; 843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} camera_hardware_t; 853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct { 873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_memory_t mem; 883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t msgType; 893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sp<IMemory> dataPtr; 903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void* user; 913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel unsigned int index; 923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} q_cam_memory_t; 933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 943d63919a23d7e7954e160c48c36713267106c3c2Thierry StrudelQCamera2HardwareInterface *util_get_Hal_obj( struct camera_device * device) 953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = NULL; 973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(device && device->priv){ 983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware = camHal->hardware; 1003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return hardware; 1023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" int get_number_of_cameras() 1053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* try to query every time we get the call!*/ 1073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 1093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return QCamera2Factory::get_number_of_cameras(); 1103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" int get_camera_info(int camera_id, struct camera_info *info) 1133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 1153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 1163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(info) { 1183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2Factory::get_camera_info(camera_id, info); 1193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Q%s: X"); 1213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 1223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* HAL should return NULL if it fails to open camera hardware. */ 1263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" int camera_device_open( 1273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const struct hw_module_t* module, const char* id, 1283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel struct hw_device_t** hw_device) 1293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 1313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_device *device = NULL; 1323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(module && id && hw_device) { 1343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (!strcmp(module->name, camera_common.name)) { 1353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int cameraId = atoi(id); 1363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_hardware_t *camHal = 1383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (camera_hardware_t *) malloc(sizeof (camera_hardware_t)); 1393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(!camHal) { 1403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *hw_device = NULL; 1413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE(" end in no mem"); 1423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 1433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* we have the camera_hardware obj malloced */ 1453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(camHal, 0, sizeof (camera_hardware_t)); 1463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->hardware = new QCamera2HardwareInterface((uint32_t)cameraId); 1473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (camHal->hardware) { 1483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->cameraId = cameraId; 1493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel device = &camHal->hw_dev; 1503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel device->common.close = close_camera_device; 1513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel device->ops = &QCamera2HardwareInterface::mCameraOps; 1523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel device->priv = (void *)camHal; 1533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = 0; 1543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 1553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (camHal->hardware) { 1563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel delete camHal->hardware; 1573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->hardware = NULL; 1583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(camHal); 1603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel device = NULL; 1613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel goto EXIT; 1623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* pass actual hw_device ptr to framework. This amkes that we actally be use memberof() macro */ 1663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *hw_device = (hw_device_t*)&device->common; 1673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1683d63919a23d7e7954e160c48c36713267106c3c2Thierry StrudelEXIT: 1693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE(" end rc %d", rc); 1713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 1723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" int close_camera_device( hw_device_t *hw_dev) 1753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: device =%p E", hw_dev); 1773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 1783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_device_t *device = (camera_device_t *)hw_dev; 1793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(device) { 1813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 1823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(camHal ) { 1833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj( device); 1843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(!camHal->camera_released) { 1853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL) { 1863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->release(device); 1873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL) 1903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel delete hardware; 1913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(camHal); 1923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = 0; 1943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 1963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint set_preview_window(struct camera_device * device, 2003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel struct preview_stream_ops *window) 2013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 2033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL) { 2063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->set_preview_window(device, window); 2073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 2093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid set_CallBacks(struct camera_device * device, 2123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_notify_callback notify_cb, 2133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_data_callback data_cb, 2143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_data_timestamp_callback data_cb_timestamp, 2153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_request_memory get_memory, 2163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *user) 2173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->set_CallBacks(device, notify_cb,data_cb, data_cb_timestamp, get_memory, user); 2223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid enable_msg_type(struct camera_device * device, int32_t msg_type) 2263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->enable_msg_type(device, msg_type); 2303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid disable_msg_type(struct camera_device * device, int32_t msg_type) 2343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->disable_msg_type(device, msg_type); 2393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint msg_type_enabled(struct camera_device * device, int32_t msg_type) 2433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 2463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->msg_type_enabled(device, msg_type); 2493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 2513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint start_preview(struct camera_device * device) 2543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 2573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->start_preview(device); 2603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: X"); 2623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 2633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid stop_preview(struct camera_device * device) 2663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->stop_preview(device); 2713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint preview_enabled(struct camera_device * device) 2753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 2783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->preview_enabled(device); 2813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 2833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint store_meta_data_in_buffers(struct camera_device * device, int enable) 2863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 2893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 2903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 2913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->store_meta_data_in_buffers(device, enable); 2923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 2943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint start_recording(struct camera_device * device) 2973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 2993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 3003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->start_recording(device); 3033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid stop_recording(struct camera_device * device) 3083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->stop_recording(device); 3133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint recording_enabled(struct camera_device * device) 3173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 3203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->recording_enabled(device); 3233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid release_recording_frame(struct camera_device * device, 3283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const void *opaque) 3293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Q%s: E"); 3313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->release_recording_frame(device, opaque); 3343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint auto_focus(struct camera_device * device) 3383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 3413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->auto_focus(device); 3443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint cancel_auto_focus(struct camera_device * device) 3493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 3523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->cancel_auto_focus(device); 3553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint take_picture(struct camera_device * device) 3603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 3633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->take_picture(device); 3663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint cancel_picture(struct camera_device * device) 3713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 3753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->cancel_picture(device); 3783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint set_parameters(struct camera_device * device, const char *parms) 3833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 3873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL && parms){ 3893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->set_parameters(device, parms); 3903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelchar* get_parameters(struct camera_device * device) 3953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 3973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 3983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 3993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char *parms = NULL; 4003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel parms = hardware->get_parameters(device); 4013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return parms; 4023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NULL; 4043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid put_parameters(struct camera_device * device, char *parm) 4073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 4093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 4103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 4113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 4123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->put_parameters(device, parm); 4133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint send_command(struct camera_device * device, 4173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t cmd, int32_t arg1, int32_t arg2) 4183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 4193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 4203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 4213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 4223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 4233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->send_command(device, cmd, arg1, arg2); 4243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 4263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid release(struct camera_device * device) 4293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 4303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 4313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 4323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 4333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camera_hardware_t *camHal = (camera_hardware_t *)device->priv; 4343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel hardware->release(device); 4353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->camera_released = true; 4363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint dump(struct camera_device * device, int fd) 4403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 4413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Q%s: E"); 4423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = -1; 4433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCamera2HardwareInterface *hardware = util_get_Hal_obj(device); 4443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(hardware != NULL){ 4453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = hardware->dump(device, fd); 4463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 4483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; // namespace android 451