1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H 18 #define HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H 19 20 /** 21 * Contains declaration of a class EmulatedCamera that encapsulates 22 * functionality common to all version 3.0 emulated camera devices. Instances 23 * of this class (for each emulated camera) are created during the construction 24 * of the EmulatedCameraFactory instance. This class serves as an entry point 25 * for all camera API calls that defined by camera3_device_ops_t API. 26 */ 27 28 #include "hardware/camera3.h" 29 #include "system/camera_metadata.h" 30 #include "EmulatedBaseCamera.h" 31 32 namespace android { 33 34 /** 35 * Encapsulates functionality common to all version 3.0 emulated camera devices 36 * 37 * Note that EmulatedCameraFactory instantiates an object of this class just 38 * once, when EmulatedCameraFactory instance gets constructed. Connection to / 39 * disconnection from the actual camera device is handled by calls to 40 * connectDevice(), and closeCamera() methods of this class that are invoked in 41 * response to hw_module_methods_t::open, and camera_device::close callbacks. 42 */ 43 class EmulatedCamera3 : public camera3_device, public EmulatedBaseCamera { 44 public: 45 /* Constructs EmulatedCamera3 instance. 46 * Param: 47 * cameraId - Zero based camera identifier, which is an index of the camera 48 * instance in camera factory's array. 49 * module - Emulated camera HAL module descriptor. 50 */ 51 EmulatedCamera3(int cameraId, 52 struct hw_module_t* module); 53 54 /* Destructs EmulatedCamera2 instance. */ 55 virtual ~EmulatedCamera3(); 56 57 /* List of all defined capabilities plus useful HW levels */ 58 enum AvailableCapabilities { 59 BACKWARD_COMPATIBLE, 60 MANUAL_SENSOR, 61 MANUAL_POST_PROCESSING, 62 RAW, 63 PRIVATE_REPROCESSING, 64 READ_SENSOR_SETTINGS, 65 BURST_CAPTURE, 66 YUV_REPROCESSING, 67 DEPTH_OUTPUT, 68 CONSTRAINED_HIGH_SPEED_VIDEO, 69 MOTION_TRACKING, 70 // Levels 71 FULL_LEVEL, 72 73 NUM_CAPABILITIES 74 }; 75 76 // Char strings for above enum, with size NUM_CAPABILITIES 77 static const char *sAvailableCapabilitiesStrings[]; 78 79 /**************************************************************************** 80 * Abstract API 81 ***************************************************************************/ 82 83 public: 84 85 /**************************************************************************** 86 * Public API 87 ***************************************************************************/ 88 89 public: 90 virtual status_t Initialize(); 91 92 /**************************************************************************** 93 * Camera module API and generic hardware device API implementation 94 ***************************************************************************/ 95 96 public: 97 virtual status_t connectCamera(hw_device_t** device); 98 99 virtual status_t closeCamera(); 100 101 virtual status_t getCameraInfo(struct camera_info* info); 102 103 /**************************************************************************** 104 * Camera API implementation. 105 * These methods are called from the camera API callback routines. 106 ***************************************************************************/ 107 108 protected: 109 110 virtual status_t initializeDevice( 111 const camera3_callback_ops *callbackOps); 112 113 virtual status_t configureStreams( 114 camera3_stream_configuration *streamList); 115 116 virtual status_t registerStreamBuffers( 117 const camera3_stream_buffer_set *bufferSet) ; 118 119 virtual const camera_metadata_t* constructDefaultRequestSettings( 120 int type); 121 122 virtual status_t processCaptureRequest(camera3_capture_request *request); 123 124 virtual status_t flush(); 125 126 /** Debug methods */ 127 128 virtual void dump(int fd); 129 130 /**************************************************************************** 131 * Camera API callbacks as defined by camera3_device_ops structure. See 132 * hardware/libhardware/include/hardware/camera3.h for information on each 133 * of these callbacks. Implemented in this class, these callbacks simply 134 * dispatch the call into an instance of EmulatedCamera3 class defined in 135 * the 'camera_device3' parameter. 136 ***************************************************************************/ 137 138 private: 139 140 /** Startup */ 141 static int initialize(const struct camera3_device *, 142 const camera3_callback_ops_t *callback_ops); 143 144 /** Stream configuration and buffer registration */ 145 146 static int configure_streams(const struct camera3_device *, 147 camera3_stream_configuration_t *stream_list); 148 149 static int register_stream_buffers(const struct camera3_device *, 150 const camera3_stream_buffer_set_t *buffer_set); 151 152 /** Template request settings provision */ 153 154 static const camera_metadata_t* construct_default_request_settings( 155 const struct camera3_device *, int type); 156 157 /** Submission of capture requests to HAL */ 158 159 static int process_capture_request(const struct camera3_device *, 160 camera3_capture_request_t *request); 161 162 static void dump(const camera3_device_t *, int fd); 163 164 static int flush(const camera3_device_t *); 165 166 /** For hw_device_t ops */ 167 static int close(struct hw_device_t* device); 168 169 /**************************************************************************** 170 * Data members shared with implementations 171 ***************************************************************************/ 172 protected: 173 174 enum { 175 // State at construction time, and after a device operation error 176 STATUS_ERROR = 0, 177 // State after startup-time init and after device instance close 178 STATUS_CLOSED, 179 // State after being opened, before device instance init 180 STATUS_OPEN, 181 // State after device instance initialization 182 STATUS_READY, 183 // State while actively capturing data 184 STATUS_ACTIVE 185 } mStatus; 186 187 /** 188 * Callbacks back to the framework 189 */ 190 191 void sendCaptureResult(camera3_capture_result_t *result); 192 void sendNotify(camera3_notify_msg_t *msg); 193 194 /**************************************************************************** 195 * Data members 196 ***************************************************************************/ 197 private: 198 static camera3_device_ops_t sDeviceOps; 199 const camera3_callback_ops_t *mCallbackOps; 200 }; 201 202 }; /* namespace android */ 203 204 #endif /* HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H */ 205