1819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray/*
2819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * Copyright (C) 2013 The Android Open Source Project
3819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray *
4819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * Licensed under the Apache License, Version 2.0 (the "License");
5819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * you may not use this file except in compliance with the License.
6819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * You may obtain a copy of the License at
7819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray *
8819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray *      http://www.apache.org/licenses/LICENSE-2.0
9819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray *
10819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * Unless required by applicable law or agreed to in writing, software
11819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * distributed under the License is distributed on an "AS IS" BASIS,
12819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * See the License for the specific language governing permissions and
14819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray * limitations under the License.
15819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray */
16819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray
17819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray#ifndef CAMERA_HAL_H_
18819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray#define CAMERA_HAL_H_
19819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray
20a0ed4bead4d7a9b9031f7cefe0ef49a951443461Alex Ray#include <cutils/bitops.h>
21819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray#include <hardware/hardware.h>
22819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray#include <hardware/camera_common.h>
23b35bee2a909819964b58c00628b433d79b1989d1Ruben Brunk#include <system/camera_vendor_tags.h>
24a0ed4bead4d7a9b9031f7cefe0ef49a951443461Alex Ray#include "Camera.h"
257915e97d637df3ebbdb9fda542a2657236361e14Alex Ray#include "VendorTags.h"
26819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray
27819cfd87bad560fbd89747371088ad35aaef8d43Alex Raynamespace default_camera_hal {
28819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray// CameraHAL contains all module state that isn't specific to an individual
29819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray// camera device.
30819cfd87bad560fbd89747371088ad35aaef8d43Alex Rayclass CameraHAL {
31819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray    public:
32928e679cf30d8871b9e00e008e29728b2cccac96Chih-Hung Hsieh        explicit CameraHAL(int num_cameras);
33819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        ~CameraHAL();
34819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray
35819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        // Camera Module Interface (see <hardware/camera_common.h>)
36819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        int getNumberOfCameras();
37819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        int getCameraInfo(int camera_id, struct camera_info *info);
38819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        int setCallbacks(const camera_module_callbacks_t *callbacks);
397915e97d637df3ebbdb9fda542a2657236361e14Alex Ray        void getVendorTagOps(vendor_tag_ops_t* ops);
40819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray
41819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        // Hardware Module Interface (see <hardware/hardware.h>)
42819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        int open(const hw_module_t* mod, const char* name, hw_device_t** dev);
43819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray
44819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray    private:
45819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        // Number of cameras
46819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        const int mNumberOfCameras;
47819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        // Callback handle
48819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray        const camera_module_callbacks_t *mCallbacks;
49a0ed4bead4d7a9b9031f7cefe0ef49a951443461Alex Ray        // Array of camera devices, contains mNumberOfCameras device pointers
50a0ed4bead4d7a9b9031f7cefe0ef49a951443461Alex Ray        Camera **mCameras;
51819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray};
52819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray} // namespace default_camera_hal
53819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray
54819cfd87bad560fbd89747371088ad35aaef8d43Alex Ray#endif // CAMERA_HAL_H_
55