2 * Copyright (C) 2013 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H
18 #define HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H
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.
28 #include "hardware/camera3.h"
29 #include "system/camera_metadata.h"
30 #include "EmulatedBaseCamera.h"
35 * Encapsulates functionality common to all version 3.0 emulated camera devices
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.
43 class EmulatedCamera3 : public camera3_device, public EmulatedBaseCamera {
45 /* Constructs EmulatedCamera3 instance.
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.
51 EmulatedCamera3(int cameraId,
52 struct hw_module_t* module);
54 /* Destructs EmulatedCamera2 instance. */
55 virtual ~EmulatedCamera3();
57 /* List of all defined capabilities plus useful HW levels */
58 enum AvailableCapabilities {
61 MANUAL_POST_PROCESSING,
68 CONSTRAINED_HIGH_SPEED_VIDEO,
75 // Char strings for above enum, with size NUM_CAPABILITIES
76 static const char *sAvailableCapabilitiesStrings[];
78 /****************************************************************************
80 ***************************************************************************/
84 /****************************************************************************
86 ***************************************************************************/
89 virtual status_t Initialize();
91 /****************************************************************************
92 * Camera module API and generic hardware device API implementation
93 ***************************************************************************/
96 virtual status_t connectCamera(hw_device_t** device);
98 virtual status_t closeCamera();
100 virtual status_t getCameraInfo(struct camera_info* info);
102 /****************************************************************************
103 * Camera API implementation.
104 * These methods are called from the camera API callback routines.
105 ***************************************************************************/
109 virtual status_t initializeDevice(
110 const camera3_callback_ops *callbackOps);
112 virtual status_t configureStreams(
113 camera3_stream_configuration *streamList);
115 virtual status_t registerStreamBuffers(
116 const camera3_stream_buffer_set *bufferSet) ;
118 virtual const camera_metadata_t* constructDefaultRequestSettings(
121 virtual status_t processCaptureRequest(camera3_capture_request *request);
123 virtual status_t flush();
127 virtual void dump(int fd);
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 ***************************************************************************/
140 static int initialize(const struct camera3_device *,
141 const camera3_callback_ops_t *callback_ops);
143 /** Stream configuration and buffer registration */
145 static int configure_streams(const struct camera3_device *,
146 camera3_stream_configuration_t *stream_list);
148 static int register_stream_buffers(const struct camera3_device *,
149 const camera3_stream_buffer_set_t *buffer_set);
151 /** Template request settings provision */
153 static const camera_metadata_t* construct_default_request_settings(
154 const struct camera3_device *, int type);
156 /** Submission of capture requests to HAL */
158 static int process_capture_request(const struct camera3_device *,
159 camera3_capture_request_t *request);
161 static void dump(const camera3_device_t *, int fd);
163 static int flush(const camera3_device_t *);
165 /** For hw_device_t ops */
166 static int close(struct hw_device_t* device);
168 /****************************************************************************
169 * Data members shared with implementations
170 ***************************************************************************/
174 // State at construction time, and after a device operation error
176 // State after startup-time init and after device instance close
178 // State after being opened, before device instance init
180 // State after device instance initialization
182 // State while actively capturing data
187 * Callbacks back to the framework
190 void sendCaptureResult(camera3_capture_result_t *result);
191 void sendNotify(camera3_notify_msg_t *msg);
193 /****************************************************************************
195 ***************************************************************************/
197 static camera3_device_ops_t sDeviceOps;
198 const camera3_callback_ops_t *mCallbackOps;
201 }; /* namespace android */
203 #endif /* HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H */