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