1b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine/* 2b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Copyright (C) 2011 The Android Open Source Project 3b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * 4b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Licensed under the Apache License, Version 2.0 (the "License"); 5b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * you may not use this file except in compliance with the License. 6b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * You may obtain a copy of the License at 7b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * 8b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * http://www.apache.org/licenses/LICENSE-2.0 9b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * 10b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Unless required by applicable law or agreed to in writing, software 11b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * distributed under the License is distributed on an "AS IS" BASIS, 12b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * See the License for the specific language governing permissions and 14b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * limitations under the License. 15b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 16b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 17b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine#ifndef HW_EMULATOR_CAMERA_EMULATED_CAMERA_FACTORY_H 18b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine#define HW_EMULATOR_CAMERA_EMULATED_CAMERA_FACTORY_H 19b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 20d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala#include "EmulatedBaseCamera.h" 2133bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine#include "QemuClient.h" 22b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 23b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkinenamespace android { 24b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 25b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine/* 26b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Contains declaration of a class EmulatedCameraFactory that manages cameras 27b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * available for the emulation. A global instance of this class is statically 28b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * instantiated and initialized when camera emulation HAL is loaded. 29b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 30b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 31b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine/* Class EmulatedCameraFactoryManages cameras available for the emulation. 32b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * 33b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * When the global static instance of this class is created on the module load, 34b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * it enumerates cameras available for the emulation by connecting to the 35b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * emulator's 'camera' service. For every camera found out there it creates an 36b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * instance of an appropriate class, and stores it an in array of emulated 37b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * cameras. In addition to the cameras reported by the emulator, a fake camera 38b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * emulator is always created, so there is always at least one camera that is 39b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * available. 40b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * 41b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Instance of this class is also used as the entry point for the camera HAL API, 42b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * including: 43b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * - hw_module_methods_t::open entry point 44b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * - camera_module_t::get_number_of_cameras entry point 45b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * - camera_module_t::get_camera_info entry point 46b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * 47b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 48b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkineclass EmulatedCameraFactory { 49b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkinepublic: 50b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Constructs EmulatedCameraFactory instance. 51b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * In this constructor the factory will create and initialize a list of 52b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * emulated cameras. All errors that occur on this constructor are reported 535467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine * via mConstructedOK data member of this class. 54b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 55b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine EmulatedCameraFactory(); 56b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 57b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Destructs EmulatedCameraFactory instance. */ 58b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine ~EmulatedCameraFactory(); 59b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 60b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /**************************************************************************** 61b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Camera HAL API handlers. 62b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine ***************************************************************************/ 63b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 64b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkinepublic: 65b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Opens (connects to) a camera device. 66b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * This method is called in response to hw_module_methods_t::open callback. 67b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 685467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine int cameraDeviceOpen(int camera_id, hw_device_t** device); 69b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 70b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Gets emulated camera information. 71b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * This method is called in response to camera_module_t::get_camera_info callback. 72b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 735467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine int getCameraInfo(int camera_id, struct camera_info *info); 74b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 75b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /**************************************************************************** 76b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Camera HAL API callbacks. 77b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine ***************************************************************************/ 78b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 79b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkinepublic: 80b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* camera_module_t::get_number_of_cameras callback entry point. */ 81b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine static int get_number_of_cameras(void); 82b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 83b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* camera_module_t::get_camera_info callback entry point. */ 84b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine static int get_camera_info(int camera_id, struct camera_info *info); 85b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 86b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkineprivate: 87b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* hw_module_methods_t::open callback entry point. */ 88b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine static int device_open(const hw_module_t* module, 89b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine const char* name, 90b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine hw_device_t** device); 91b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 92b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /**************************************************************************** 93b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Public API. 94b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine ***************************************************************************/ 95b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 96b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkinepublic: 9733bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine 9833bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine /* Gets fake camera orientation. */ 995467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine int getFakeCameraOrientation() { 10033bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine /* TODO: Have a boot property that controls that. */ 10133bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine return 90; 10233bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine } 10333bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine 10433bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine /* Gets qemu camera orientation. */ 1055467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine int getQemuCameraOrientation() { 10633bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine /* TODO: Have a boot property that controls that. */ 10733bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine return 270; 10833bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine } 10933bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine 110b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Gets number of emulated cameras. 111b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 1125467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine int getEmulatedCameraNum() const { 1135467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine return mEmulatedCameraNum; 114b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine } 115b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 116b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Checks whether or not the constructor has succeeded. 117b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 1185467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine bool isConstructedOK() const { 1195467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine return mConstructedOK; 120b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine } 121b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 122b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /**************************************************************************** 123b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Private API 124b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine ***************************************************************************/ 125b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 126b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkineprivate: 127b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Populates emulated cameras array with cameras that are available via 128b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * 'camera' service in the emulator. For each such camera and instance of 1295467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine * the EmulatedCameraQemud will be created and added to the mEmulatedCameras 130b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * array. 131b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine */ 1325467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine void createQemuCameras(); 13333bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine 134c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine /* Checks if fake camera emulation is on for the camera facing back. */ 135c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine bool isBackFakeCameraEmulationOn(); 136c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine 1370819e42a0b8c0da6db7a8267d067f235d060e37fEino-Ville Talvala /* Gets camera device version number to use for back camera emulation */ 1380819e42a0b8c0da6db7a8267d067f235d060e37fEino-Ville Talvala int getBackCameraHalVersion(); 1390819e42a0b8c0da6db7a8267d067f235d060e37fEino-Ville Talvala 140c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine /* Checks if fake camera emulation is on for the camera facing front. */ 141c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine bool isFrontFakeCameraEmulationOn(); 142b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 1430819e42a0b8c0da6db7a8267d067f235d060e37fEino-Ville Talvala /* Gets camera device version number to use for front camera emulation */ 1440819e42a0b8c0da6db7a8267d067f235d060e37fEino-Ville Talvala int getFrontCameraHalVersion(); 1450819e42a0b8c0da6db7a8267d067f235d060e37fEino-Ville Talvala 146b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /**************************************************************************** 147b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine * Data members. 148b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine ***************************************************************************/ 149b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 150b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkineprivate: 15133bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine /* Connection to the camera service in the emulator. */ 1525467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine FactoryQemuClient mQemuClient; 15333bda475286a625337ed184e7053fc29e403d57bVladimir Chtchetkine 154b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Array of cameras available for the emulation. */ 155d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala EmulatedBaseCamera** mEmulatedCameras; 156b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 157c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine /* Number of emulated cameras (including the fake ones). */ 1585467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine int mEmulatedCameraNum; 159b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 160c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine /* Number of emulated fake cameras. */ 161c9d6edeea5921a11e305273f3dd604278c45e9d7Vladimir Chtchetkine int mFakeCameraNum; 162b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 163b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Flags whether or not constructor has succeeded. */ 1645467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine bool mConstructedOK; 165b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 166b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkinepublic: 167b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine /* Contains device open entry point, as required by HAL API. */ 1685467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkine static struct hw_module_methods_t mCameraModuleMethods; 169b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine}; 170b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 171b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine}; /* namespace android */ 172b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 173b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine/* References the global EmulatedCameraFactory instance. */ 1745467be2eefc007ebf09baf109dafe058abc1ffc5Vladimir Chtchetkineextern android::EmulatedCameraFactory gEmulatedCameraFactory; 175b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine 176b97c2f0b5919b716ba5433e6153a29d7e1e357feVladimir Chtchetkine#endif /* HW_EMULATOR_CAMERA_EMULATED_CAMERA_FACTORY_H */ 177