1734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen/* 2734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * Copyright 2016 The Android Open Source Project 3734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * 4734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * Licensed under the Apache License, Version 2.0 (the "License"); 5734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * you may not use this file except in compliance with the License. 6734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * You may obtain a copy of the License at 7734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * 8734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * http://www.apache.org/licenses/LICENSE-2.0 9734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * 10734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * Unless required by applicable law or agreed to in writing, software 11734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * distributed under the License is distributed on an "AS IS" BASIS, 12734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * See the License for the specific language governing permissions and 14734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * limitations under the License. 15734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen */ 16734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 17734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen// Modified from hardware/libhardware/modules/camera/CameraHAL.h 18734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 193841a7f4951fe1498bf5ba88466def3ea18f8867Ari Hausman-Cohen#ifndef V4L2_CAMERA_HAL_V4L2_CAMERA_HAL_H_ 203841a7f4951fe1498bf5ba88466def3ea18f8867Ari Hausman-Cohen#define V4L2_CAMERA_HAL_V4L2_CAMERA_HAL_H_ 21734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 22734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen#include <vector> 23734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 24734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen#include <hardware/camera_common.h> 25734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen#include <hardware/hardware.h> 26734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 273841a7f4951fe1498bf5ba88466def3ea18f8867Ari Hausman-Cohen#include "camera.h" 283841a7f4951fe1498bf5ba88466def3ea18f8867Ari Hausman-Cohen#include "common.h" 29734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 30734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohennamespace v4l2_camera_hal { 31734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen/* 32734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * V4L2CameraHAL contains all module state that isn't specific to an 33734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * individual camera device. This class is based off of the sample 34734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen * default CameraHAL from /hardware/libhardware/modules/camera. 35734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen */ 36734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohenclass V4L2CameraHAL { 379430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen public: 38734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen V4L2CameraHAL(); 39734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen ~V4L2CameraHAL(); 40734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 41734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen // Camera Module Interface (see <hardware/camera_common.h>). 42734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen int getNumberOfCameras(); 43734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen int getCameraInfo(int camera_id, camera_info_t* info); 44734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen int setCallbacks(const camera_module_callbacks_t* callbacks); 45734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen void getVendorTagOps(vendor_tag_ops_t* ops); 469430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen int openLegacy(const hw_module_t* module, 479430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen const char* id, 489430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen uint32_t halVersion, 499430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen hw_device_t** device); 50734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen int setTorchMode(const char* camera_id, bool enabled); 51734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 52734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen // Hardware Module Interface (see <hardware/hardware.h>). 5363f69824e48bb48762b082d73c60306b693d3de1Ari Hausman-Cohen int openDevice(const hw_module_t* mod, const char* name, hw_device_t** dev); 54734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 559430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen private: 56734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen // Vector of cameras. 57734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen std::vector<std::unique_ptr<default_camera_hal::Camera>> mCameras; 58734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen // Callback handle. 599430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen const camera_module_callbacks_t* mCallbacks; 60734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 61734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen DISALLOW_COPY_AND_ASSIGN(V4L2CameraHAL); 62734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen}; 63734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 649430ad946f3518e813bbe9f9c56a5fed5cf7cbf8Ari Hausman-Cohen} // namespace v4l2_camera_hal 65734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 66734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohenextern camera_module_t HAL_MODULE_INFO_SYM; 67734421538c99e1910fc7ea998670d976aa96b107Ari Hausman-Cohen 683841a7f4951fe1498bf5ba88466def3ea18f8867Ari Hausman-Cohen#endif // V4L2_CAMERA_HAL_V4L2_CAMERA_HAL_H_ 69