| /* | 
 |  * Copyright (C) 2015 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */ | 
 |  | 
 | #ifndef ANDROID_SERVERS_CAMERA_CAMERAMODULE_H | 
 | #define ANDROID_SERVERS_CAMERA_CAMERAMODULE_H | 
 |  | 
 | #include <hardware/camera.h> | 
 | #include <camera/CameraMetadata.h> | 
 | #include <utils/Mutex.h> | 
 | #include <utils/KeyedVector.h> | 
 |  | 
 | namespace android { | 
 | /** | 
 |  * A wrapper class for HAL camera module. | 
 |  * | 
 |  * This class wraps camera_module_t returned from HAL to provide a wrapped | 
 |  * get_camera_info implementation which CameraService generates some | 
 |  * camera characteristics keys defined in newer HAL version on an older HAL. | 
 |  */ | 
 | class CameraModule { | 
 | public: | 
 |     explicit CameraModule(camera_module_t *module); | 
 |     virtual ~CameraModule(); | 
 |  | 
 |     // Must be called after construction | 
 |     // Returns OK on success, NO_INIT on failure | 
 |     int init(); | 
 |  | 
 |     int getCameraInfo(int cameraId, struct camera_info *info); | 
 |     int getNumberOfCameras(void); | 
 |     int open(const char* id, struct hw_device_t** device); | 
 |     int openLegacy(const char* id, uint32_t halVersion, struct hw_device_t** device); | 
 |     int setCallbacks(const camera_module_callbacks_t *callbacks); | 
 |     bool isVendorTagDefined(); | 
 |     void getVendorTagOps(vendor_tag_ops_t* ops); | 
 |     int setTorchMode(const char* camera_id, bool enable); | 
 |     uint16_t getModuleApiVersion(); | 
 |     const char* getModuleName(); | 
 |     uint16_t getHalApiVersion(); | 
 |     const char* getModuleAuthor(); | 
 |     // Only used by CameraModuleFixture native test. Do NOT use elsewhere. | 
 |     void *getDso(); | 
 |  | 
 | private: | 
 |     // Derive camera characteristics keys defined after HAL device version | 
 |     static void deriveCameraCharacteristicsKeys(uint32_t deviceVersion, CameraMetadata &chars); | 
 |     // Helper function to append available[request|result|chars]Keys | 
 |     static void appendAvailableKeys(CameraMetadata &chars, | 
 |             int32_t keyTag, const Vector<int32_t>& appendKeys); | 
 |     status_t filterOpenErrorCode(status_t err); | 
 |     camera_module_t *mModule; | 
 |     KeyedVector<int, camera_info> mCameraInfoMap; | 
 |     Mutex mCameraInfoLock; | 
 | }; | 
 |  | 
 | } // namespace android | 
 |  | 
 | #endif |