summaryrefslogtreecommitdiff
path: root/v3/EmulatedCamera3.h (plain)
blob: b7be30ec5db05120b1558129e2c517743326a671
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#include "DebugUtils.h"
32
33namespace android {
34
35/**
36 * Encapsulates functionality common to all version 3.0 emulated camera devices
37 *
38 * Note that EmulatedCameraFactory instantiates an object of this class just
39 * once, when EmulatedCameraFactory instance gets constructed. Connection to /
40 * disconnection from the actual camera device is handled by calls to
41 * connectDevice(), and closeCamera() methods of this class that are invoked in
42 * response to hw_module_methods_t::open, and camera_device::close callbacks.
43 */
44class EmulatedCamera3 : public camera3_device, public EmulatedBaseCamera {
45public:
46 /* Constructs EmulatedCamera3 instance.
47 * Param:
48 * cameraId - Zero based camera identifier, which is an index of the camera
49 * instance in camera factory's array.
50 * module - Emulated camera HAL module descriptor.
51 */
52 EmulatedCamera3(int cameraId,
53 struct hw_module_t* module);
54
55 /* Destructs EmulatedCamera2 instance. */
56 virtual ~EmulatedCamera3();
57
58 /****************************************************************************
59 * Abstract API
60 ***************************************************************************/
61
62public:
63
64 /****************************************************************************
65 * Public API
66 ***************************************************************************/
67
68public:
69 virtual status_t Initialize();
70 virtual void setCameraStatus(camera_status_t status);
71 virtual camera_status_t getCameraStatus();
72
73 /****************************************************************************
74 * Camera module API and generic hardware device API implementation
75 ***************************************************************************/
76
77public:
78 virtual status_t connectCamera(hw_device_t** device);
79
80 virtual status_t closeCamera();
81
82 virtual status_t getCameraInfo(struct camera_info* info);
83
84 /****************************************************************************
85 * Camera API implementation.
86 * These methods are called from the camera API callback routines.
87 ***************************************************************************/
88
89protected:
90
91 virtual status_t initializeDevice(
92 const camera3_callback_ops *callbackOps);
93
94 virtual status_t configureStreams(
95 camera3_stream_configuration *streamList);
96
97 virtual status_t registerStreamBuffers(
98 const camera3_stream_buffer_set *bufferSet) ;
99
100 virtual const camera_metadata_t* constructDefaultRequestSettings(
101 int type);
102
103 virtual status_t processCaptureRequest(camera3_capture_request *request);
104
105 /** Debug methods */
106
107 virtual void dump(int fd);
108
109 virtual int flush_all_requests();
110 /** Tag query methods */
111 virtual const char *getVendorSectionName(uint32_t tag);
112
113 virtual const char *getVendorTagName(uint32_t tag);
114
115 virtual int getVendorTagType(uint32_t tag);
116
117 /****************************************************************************
118 * Camera API callbacks as defined by camera3_device_ops structure. See
119 * hardware/libhardware/include/hardware/camera3.h for information on each
120 * of these callbacks. Implemented in this class, these callbacks simply
121 * dispatch the call into an instance of EmulatedCamera3 class defined in
122 * the 'camera_device3' parameter.
123 ***************************************************************************/
124
125private:
126
127 /** Startup */
128 static int initialize(const struct camera3_device *,
129 const camera3_callback_ops_t *callback_ops);
130
131 /** Stream configuration and buffer registration */
132
133 static int configure_streams(const struct camera3_device *,
134 camera3_stream_configuration_t *stream_list);
135
136 static int register_stream_buffers(const struct camera3_device *,
137 const camera3_stream_buffer_set_t *buffer_set);
138
139 /** Template request settings provision */
140
141 static const camera_metadata_t* construct_default_request_settings(
142 const struct camera3_device *, int type);
143
144 /** Submission of capture requests to HAL */
145
146 static int process_capture_request(const struct camera3_device *,
147 camera3_capture_request_t *request);
148
149 /** Vendor metadata registration */
150 static void get_metadata_vendor_tag_ops(const camera3_device_t *,
151 vendor_tag_query_ops_t *ops);
152 // for get_metadata_vendor_tag_ops
153 static const char* get_camera_vendor_section_name(
154 const vendor_tag_query_ops_t *,
155 uint32_t tag);
156 static const char* get_camera_vendor_tag_name(
157 const vendor_tag_query_ops_t *,
158 uint32_t tag);
159 static int get_camera_vendor_tag_type(
160 const vendor_tag_query_ops_t *,
161 uint32_t tag);
162
163 static void dump(const camera3_device_t *, int fd);
164 static int flush(const struct camera3_device *d);
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 struct TagOps : public vendor_tag_query_ops {
175 EmulatedCamera3 *parent;
176 };
177 TagOps mVendorTagOps;
178
179 enum {
180 // State at construction time, and after a device operation error
181 STATUS_ERROR = 0,
182 // State after startup-time init and after device instance close
183 STATUS_CLOSED,
184 // State after being opened, before device instance init
185 STATUS_OPEN,
186 // State after device instance initialization
187 STATUS_READY,
188 // State while actively capturing data
189 STATUS_ACTIVE
190 } mStatus;
191
192 bool mPlugged;
193 /**
194 * Callbacks back to the framework
195 */
196
197 void sendCaptureResult(camera3_capture_result_t *result);
198 void sendNotify(camera3_notify_msg_t *msg);
199
200 /****************************************************************************
201 * Data members
202 ***************************************************************************/
203 private:
204 static camera3_device_ops_t sDeviceOps;
205 const camera3_callback_ops_t *mCallbackOps;
206};
207
208}; /* namespace android */
209
210#endif /* HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H */
211