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 // Levels 70 FULL_LEVEL, 71 72 NUM_CAPABILITIES 73 }; 74 75 // Char strings for above enum, with size NUM_CAPABILITIES 76 static const char *sAvailableCapabilitiesStrings[]; 77 78 /**************************************************************************** 79 * Abstract API 80 ***************************************************************************/ 81 82 public: 83 84 /**************************************************************************** 85 * Public API 86 ***************************************************************************/ 87 88 public: 89 virtual status_t Initialize(); 90 91 /**************************************************************************** 92 * Camera module API and generic hardware device API implementation 93 ***************************************************************************/ 94 95 public: 96 virtual status_t connectCamera(hw_device_t** device); 97 98 virtual status_t closeCamera(); 99 100 virtual status_t getCameraInfo(struct camera_info* info); 101 102 /**************************************************************************** 103 * Camera API implementation. 104 * These methods are called from the camera API callback routines. 105 ***************************************************************************/ 106 107 protected: 108 109 virtual status_t initializeDevice( 110 const camera3_callback_ops *callbackOps); 111 112 virtual status_t configureStreams( 113 camera3_stream_configuration *streamList); 114 115 virtual status_t registerStreamBuffers( 116 const camera3_stream_buffer_set *bufferSet) ; 117 118 virtual const camera_metadata_t* constructDefaultRequestSettings( 119 int type); 120 121 virtual status_t processCaptureRequest(camera3_capture_request *request); 122 123 virtual status_t flush(); 124 125 /** Debug methods */ 126 127 virtual void dump(int fd); 128 129 /**************************************************************************** 130 * Camera API callbacks as defined by camera3_device_ops structure. See 131 * hardware/libhardware/include/hardware/camera3.h for information on each 132 * of these callbacks. Implemented in this class, these callbacks simply 133 * dispatch the call into an instance of EmulatedCamera3 class defined in 134 * the 'camera_device3' parameter. 135 ***************************************************************************/ 136 137 private: 138 139 /** Startup */ 140 static int initialize(const struct camera3_device *, 141 const camera3_callback_ops_t *callback_ops); 142 143 /** Stream configuration and buffer registration */ 144 145 static int configure_streams(const struct camera3_device *, 146 camera3_stream_configuration_t *stream_list); 147 148 static int register_stream_buffers(const struct camera3_device *, 149 const camera3_stream_buffer_set_t *buffer_set); 150 151 /** Template request settings provision */ 152 153 static const camera_metadata_t* construct_default_request_settings( 154 const struct camera3_device *, int type); 155 156 /** Submission of capture requests to HAL */ 157 158 static int process_capture_request(const struct camera3_device *, 159 camera3_capture_request_t *request); 160 161 static void dump(const camera3_device_t *, int fd); 162 163 static int flush(const camera3_device_t *); 164 165 /** For hw_device_t ops */ 166 static int close(struct hw_device_t* device); 167 168 /**************************************************************************** 169 * Data members shared with implementations 170 ***************************************************************************/ 171 protected: 172 173 enum { 174 // State at construction time, and after a device operation error 175 STATUS_ERROR = 0, 176 // State after startup-time init and after device instance close 177 STATUS_CLOSED, 178 // State after being opened, before device instance init 179 STATUS_OPEN, 180 // State after device instance initialization 181 STATUS_READY, 182 // State while actively capturing data 183 STATUS_ACTIVE 184 } mStatus; 185 186 /** 187 * Callbacks back to the framework 188 */ 189 190 void sendCaptureResult(camera3_capture_result_t *result); 191 void sendNotify(camera3_notify_msg_t *msg); 192 193 /**************************************************************************** 194 * Data members 195 ***************************************************************************/ 196 private: 197 static camera3_device_ops_t sDeviceOps; 198 const camera3_callback_ops_t *mCallbackOps; 199 }; 200 201 }; /* namespace android */ 202 203 #endif /* HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H */ 204