13068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen/* 23068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * Copyright (C) 2015 The Android Open Source Project 33068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * 43068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * Licensed under the Apache License, Version 2.0 (the "License"); 53068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * you may not use this file except in compliance with the License. 63068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * You may obtain a copy of the License at 73068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * 83068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * http://www.apache.org/licenses/LICENSE-2.0 93068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * 103068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * Unless required by applicable law or agreed to in writing, software 113068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * distributed under the License is distributed on an "AS IS" BASIS, 123068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * See the License for the specific language governing permissions and 143068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * limitations under the License. 153068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen */ 163068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 173068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#ifndef ANDROID_SERVERS_CAMERA_CAMERAFLASHLIGHT_H 183068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#define ANDROID_SERVERS_CAMERA_CAMERAFLASHLIGHT_H 193068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 203068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#include "hardware/camera_common.h" 213068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#include "utils/KeyedVector.h" 2288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen#include "utils/SortedVector.h" 233068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#include "gui/GLConsumer.h" 243068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#include "gui/Surface.h" 253068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#include "common/CameraDeviceBase.h" 26d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen#include "device1/CameraHardwareInterface.h" 273068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 283068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chennamespace android { 293068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 303068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen/** 313068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * FlashControlBase is a base class for flash control. It defines the functions 323068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * that a flash control for each camera module/device version should implement. 333068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen */ 343068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chenclass FlashControlBase : public virtual VirtualLightRefBase { 353068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen public: 363068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen virtual ~FlashControlBase(); 373068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 383068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // Whether a camera device has a flash unit. Calling this function may 393068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // cause the torch mode to be turned off in HAL v1 devices. If 403068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // previously-on torch mode is turned off, 413068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // callbacks.torch_mode_status_change() should be invoked. 4288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen virtual status_t hasFlashUnit(const String8& cameraId, 433068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen bool *hasFlash) = 0; 443068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 453068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // set the torch mode to on or off. 4688da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen virtual status_t setTorchMode(const String8& cameraId, 473068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen bool enabled) = 0; 483068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen}; 493068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 503068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen/** 513068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * CameraFlashlight can be used by camera service to control flashflight. 523068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen */ 533068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chenclass CameraFlashlight : public virtual VirtualLightRefBase { 543068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen public: 553068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen CameraFlashlight(CameraModule& cameraModule, 563068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen const camera_module_callbacks_t& callbacks); 573068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen virtual ~CameraFlashlight(); 583068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 5988da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // Find all flash units. This must be called before other methods. All 6088da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // camera devices must be closed when it's called because HAL v1 devices 6188da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // need to be opened to query available flash modes. 6288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t findFlashUnits(); 633068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 6488da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // Whether a camera device has a flash unit. Before findFlashUnits() is 6588da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // called, this function always returns false. 6688da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen bool hasFlashUnit(const String8& cameraId); 6788da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen 6888da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // set the torch mode to on or off. 6988da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t setTorchMode(const String8& cameraId, bool enabled); 703068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 713068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // Notify CameraFlashlight that camera service is going to open a camera 723068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // device. CameraFlashlight will free the resources that may cause the 733068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // camera open to fail. Camera service must call this function before 743068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // opening a camera device. 7588da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t prepareDeviceOpen(const String8& cameraId); 7688da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen 7788da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // Notify CameraFlashlight that camera service has closed a camera 7888da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // device. CameraFlashlight may invoke callbacks for torch mode 7988da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // available depending on the implementation. 8088da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t deviceClosed(const String8& cameraId); 813068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 823068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen private: 833068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // create flashlight control based on camera module API and camera 843068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // device API versions. 8588da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t createFlashlightControl(const String8& cameraId); 8688da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen 8788da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // mLock should be locked. 8888da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen bool hasFlashUnitLocked(const String8& cameraId); 893068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 903068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen sp<FlashControlBase> mFlashControl; 913068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen CameraModule *mCameraModule; 923068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen const camera_module_callbacks_t *mCallbacks; 9388da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen SortedVector<String8> mOpenedCameraIds; 943068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 9588da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // camera id -> if it has a flash unit 9688da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen KeyedVector<String8, bool> mHasFlashlightMap; 9788da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen bool mFlashlightMapInitialized; 9888da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen 9988da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen Mutex mLock; // protect CameraFlashlight API 1003068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen}; 1013068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1023068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen/** 1033068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * Flash control for camera module v2.4 and above. 1043068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen */ 10588da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chenclass ModuleFlashControl : public FlashControlBase { 1063068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen public: 10788da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen ModuleFlashControl(CameraModule& cameraModule, 1083068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen const camera_module_callbacks_t& callbacks); 10988da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen virtual ~ModuleFlashControl(); 1103068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1113068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // FlashControlBase 11288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t hasFlashUnit(const String8& cameraId, bool *hasFlash); 11388da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t setTorchMode(const String8& cameraId, bool enabled); 1143068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1153068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen private: 1163068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen CameraModule *mCameraModule; 1173068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1183068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen Mutex mLock; 1193068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen}; 1203068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1213068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen/** 1223068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen * Flash control for camera module <= v2.3 and camera HAL v2-v3 1233068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen */ 1243068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chenclass CameraDeviceClientFlashControl : public FlashControlBase { 1253068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen public: 1263068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen CameraDeviceClientFlashControl(CameraModule& cameraModule, 1273068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen const camera_module_callbacks_t& callbacks); 1283068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen virtual ~CameraDeviceClientFlashControl(); 1293068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1303068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // FlashControlBase 13188da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t setTorchMode(const String8& cameraId, bool enabled); 13288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t hasFlashUnit(const String8& cameraId, bool *hasFlash); 1333068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1343068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen private: 1353068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // connect to a camera device 13688da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t connectCameraDevice(const String8& cameraId); 13788da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // disconnect and free mDevice 13888da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t disconnectCameraDevice(); 1393068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1403068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // initialize a surface 14188da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t initializeSurface(sp<CameraDeviceBase>& device, int32_t width, 14288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen int32_t height); 1433068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 14488da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // submit a request to enable the torch mode 14588da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t submitTorchEnabledRequest(); 1463068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1473068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen // get the smallest surface size of IMPLEMENTATION_DEFINED 1483068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen status_t getSmallestSurfaceSize(const camera_info& info, int32_t *width, 1493068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen int32_t *height); 1503068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 151d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // protected by mLock 15288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen status_t hasFlashUnitLocked(const String8& cameraId, bool *hasFlash); 1533068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1543068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen CameraModule *mCameraModule; 1553068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen const camera_module_callbacks_t *mCallbacks; 15688da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen String8 mCameraId; 1573068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen bool mTorchEnabled; 1583068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen CameraMetadata *mMetadata; 15988da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // WORKAROUND: will be set to true for HAL v2 devices where 16088da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // setStreamingRequest() needs to be call for torch mode settings to 16188da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen // take effect. 16288da526d97442c80731e01bfc94c6b47c4b0c3c7Chien-Yu Chen bool mStreaming; 1633068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1643068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen sp<CameraDeviceBase> mDevice; 1653068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1663068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen sp<IGraphicBufferProducer> mProducer; 1673068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen sp<IGraphicBufferConsumer> mConsumer; 1683068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen sp<GLConsumer> mSurfaceTexture; 169727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala sp<Surface> mSurface; 1703068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen int32_t mStreamId; 1713068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 1723068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen Mutex mLock; 1733068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen}; 1743068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 175d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen/** 176d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen * Flash control for camera module <= v2.3 and camera HAL v1 177d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen */ 178d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chenclass CameraHardwareInterfaceFlashControl : public FlashControlBase { 179d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen public: 180d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen CameraHardwareInterfaceFlashControl(CameraModule& cameraModule, 181d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen const camera_module_callbacks_t& callbacks); 182d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen virtual ~CameraHardwareInterfaceFlashControl(); 183d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 184d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // FlashControlBase 185d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen status_t setTorchMode(const String8& cameraId, bool enabled); 186d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen status_t hasFlashUnit(const String8& cameraId, bool *hasFlash); 187d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 188d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen private: 189d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // connect to a camera device 190d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen status_t connectCameraDevice(const String8& cameraId); 191d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 192d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // disconnect and free mDevice 193d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen status_t disconnectCameraDevice(); 194d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 195d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // initialize the preview window 196d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen status_t initializePreviewWindow(sp<CameraHardwareInterface> device, 197d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen int32_t width, int32_t height); 198d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 199d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // start preview and enable torch 200d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen status_t startPreviewAndTorch(); 201d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 202d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // get the smallest surface 203d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen status_t getSmallestSurfaceSize(int32_t *width, int32_t *height); 204d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 205d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen // protected by mLock 2066dcc706b3b06eedcc8d24a3001543c3f49999d94Chien-Yu Chen // If this function opens camera device in order to check if it has a flash unit, the 2076dcc706b3b06eedcc8d24a3001543c3f49999d94Chien-Yu Chen // camera device will remain open if keepDeviceOpen is true and the camera device will be 2086dcc706b3b06eedcc8d24a3001543c3f49999d94Chien-Yu Chen // closed if keepDeviceOpen is false. If camera device is already open when calling this 2096dcc706b3b06eedcc8d24a3001543c3f49999d94Chien-Yu Chen // function, keepDeviceOpen is ignored. 2106dcc706b3b06eedcc8d24a3001543c3f49999d94Chien-Yu Chen status_t hasFlashUnitLocked(const String8& cameraId, bool *hasFlash, bool keepDeviceOpen); 211d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 212d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen CameraModule *mCameraModule; 213d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen const camera_module_callbacks_t *mCallbacks; 214d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen sp<CameraHardwareInterface> mDevice; 215d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen String8 mCameraId; 216d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen CameraParameters mParameters; 217d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen bool mTorchEnabled; 218d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 219d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen sp<IGraphicBufferProducer> mProducer; 220d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen sp<IGraphicBufferConsumer> mConsumer; 221d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen sp<GLConsumer> mSurfaceTexture; 222727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala sp<Surface> mSurface; 223d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 224d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen Mutex mLock; 225d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen}; 226d231fd61ca94441183abda9766ce6906a5b4c3cfChien-Yu Chen 2273068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen} // namespace android 2283068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen 2293068d73c6c7e1f44523b1466b903a9c82408b258Chien-Yu Chen#endif 230