blob: f6848cd3cbe5ac6cfaac9b5b0505dd4e23dc3ca1 [file] [log] [blame]
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +01001/*
Biswarup Pal6152a302023-12-19 12:44:09 +00002 * Copyright 2023 The Android Open Source Project
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +01003 *
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
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +010017#ifndef ANDROID_COMPANION_VIRTUALCAMERA_METADATAUTIL_H
18#define ANDROID_COMPANION_VIRTUALCAMERA_METADATAUTIL_H
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +010019
20#include <chrono>
21#include <cstdint>
22#include <map>
23#include <memory>
24#include <variant>
25#include <vector>
26
27#include "aidl/android/hardware/camera/device/CameraMetadata.h"
28#include "system/camera_metadata.h"
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +010029#include "util/Util.h"
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +010030
31namespace android {
32namespace companion {
33namespace virtualcamera {
34
35// Convenience builder for the
36// aidl::android::hardware::camera::device::CameraMetadata.
37//
38// Calling the same builder setter multiple will overwrite the value.
39// This class is not thread-safe.
40class MetadataBuilder {
41 public:
42 struct StreamConfiguration {
43 int32_t width = 0;
44 int32_t height = 0;
45 int32_t format = 0;
46 // Minimal frame duration - corresponds to maximal FPS for given format.
47 // See ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS in CameraMetadataTag.aidl.
Biswarup Pal6152a302023-12-19 12:44:09 +000048 std::chrono::nanoseconds minFrameDuration{0};
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +010049 // Minimal stall duration.
50 // See ANDROID_SCALER_AVAILABLE_STALL_DURATIONS in CameraMetadataTag.aidl.
51 std::chrono::nanoseconds minStallDuration{0};
52 };
53
54 struct ControlRegion {
55 int32_t x0 = 0;
56 int32_t y0 = 0;
57 int32_t x1 = 0;
58 int32_t y1 = 0;
59 int32_t weight = 0;
60 };
61
62 MetadataBuilder() = default;
63 ~MetadataBuilder() = default;
64
65 // See ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL in CameraMetadataTag.aidl.
66 MetadataBuilder& setSupportedHardwareLevel(
67 camera_metadata_enum_android_info_supported_hardware_level_t hwLevel);
68
69 // Whether this camera device has a flash unit
70 // See ANDROID_FLASH_INFO_AVAILABLE in CameraMetadataTag.aidl.
71 MetadataBuilder& setFlashAvailable(bool flashAvailable);
72
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +010073 // See FLASH_STATE in CaptureResult.java.
74 MetadataBuilder& setFlashState(
75 camera_metadata_enum_android_flash_state_t flashState);
76
77 // See FLASH_MODE in CaptureRequest.java.
78 MetadataBuilder& setFlashMode(
79 camera_metadata_enum_android_flash_mode_t flashMode);
80
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +010081 // See ANDROID_LENS_FACING in CameraMetadataTag.aidl.
82 MetadataBuilder& setLensFacing(
83 camera_metadata_enum_android_lens_facing lensFacing);
84
Jan Sebechlebskya984ffb2024-02-01 09:12:37 +010085 // See ANDROID_SENSOR_READOUT_TIMESTAMP in CameraMetadataTag.aidl.
86 MetadataBuilder& setSensorReadoutTimestamp(
87 camera_metadata_enum_android_sensor_readout_timestamp_t
88 sensorReadoutTimestamp);
89
Biswarup Pal8ad8bc52024-02-08 13:41:44 +000090 // See ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS in CameraMetadataTag.aidl.
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +010091 MetadataBuilder& setAvailableFocalLengths(
92 const std::vector<float>& focalLengths);
Biswarup Pal8ad8bc52024-02-08 13:41:44 +000093
94 // See ANDROID_LENS_FOCAL_LENGTH in CameraMetadataTag.aidl.
Biswarup Pald9be04d2024-01-31 14:35:15 +000095 MetadataBuilder& setFocalLength(float focalLength);
96
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +010097 // See ANDROID_SENSOR_ORIENTATION in CameraMetadataTag.aidl.
98 MetadataBuilder& setSensorOrientation(int32_t sensorOrientation);
99
100 // Time at start of exposure of first row of the image
101 // sensor active array, in nanoseconds.
102 //
103 // See ANDROID_SENSOR_TIMESTAMP in CameraMetadataTag.aidl.
104 MetadataBuilder& setSensorTimestamp(std::chrono::nanoseconds timestamp);
105
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100106 // See SENSOR_INFO_TIMESTAMP_SOURCE in CameraCharacteristic.java.
107 MetadataBuilder& setSensorTimestampSource(
108 camera_metadata_enum_android_sensor_info_timestamp_source_t timestampSource);
109
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100110 // See ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE in CameraMetadataTag.aidl.
111 MetadataBuilder& setSensorActiveArraySize(int x0, int y0, int x1, int y1);
112
Biswarup Pald9be04d2024-01-31 14:35:15 +0000113 // See ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE in CameraMetadataTag.aidl.
114 MetadataBuilder& setSensorPixelArraySize(int width, int height);
115
116 // See ANDROID_SENSOR_INFO_PHYSICAL_SIZE in CameraMetadataTag.aidl.
117 MetadataBuilder& setSensorPhysicalSize(float width, float height);
118
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100119 // See ANDROID_STATISTICS_FACE_DETECT_MODE in CameraMetadataTag.aidl.
120 MetadataBuilder& setAvailableFaceDetectModes(
121 const std::vector<camera_metadata_enum_android_statistics_face_detect_mode_t>&
122 faceDetectMode);
123
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100124 // See SENSOR_AVAILABLE_TEST_PATTERN_MODES in CameraCharacteristics.java.
125 MetadataBuilder& setAvailableTestPatternModes(
126 const std::vector<camera_metadata_enum_android_sensor_test_pattern_mode>&
127 testPatternModes);
128
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100129 // See ANDROID_STATISTICS_FACE_DETECT_MODE in CaptureRequest.java.
130 MetadataBuilder& setFaceDetectMode(
131 camera_metadata_enum_android_statistics_face_detect_mode_t faceDetectMode);
132
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100133 // Sets available stream configurations along with corresponding minimal frame
134 // durations (corresponding to max fps) and stall durations.
135 //
136 // See ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
137 // ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS and
138 // ANDROID_SCALER_AVAILABLE_STALL_DURATIONS in CameraMetadataTag.aidl.
139 MetadataBuilder& setAvailableOutputStreamConfigurations(
140 const std::vector<StreamConfiguration>& streamConfigurations);
141
Jan Sebechlebskyab378202024-02-26 10:50:42 +0100142 // See COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES in CameraCharacteristics.java.
143 MetadataBuilder& setAvailableAberrationCorrectionModes(
144 const std::vector<
145 camera_metadata_enum_android_color_correction_aberration_mode>&
146 aberrationCorectionModes);
147
Jan Sebechlebsky4be2bd02024-02-26 18:35:18 +0100148 // See COLOR_CORRECTION_ABERRATION_MODE in CaptureRequest.java.
149 MetadataBuilder& setAberrationCorrectionMode(
150 camera_metadata_enum_android_color_correction_aberration_mode
151 aberrationCorrectionMode);
152
Jan Sebechlebskyab378202024-02-26 10:50:42 +0100153 // See NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES in CameraCharacteristics.java.
154 MetadataBuilder& setAvailableNoiseReductionModes(
155 const std::vector<camera_metadata_enum_android_noise_reduction_mode>&
156 noiseReductionModes);
157
Jan Sebechlebsky4be2bd02024-02-26 18:35:18 +0100158 // See NOISE_REDUCTION_MODE in CaptureRequest.java.
159 MetadataBuilder& setNoiseReductionMode(
160 camera_metadata_enum_android_noise_reduction_mode noiseReductionMode);
161
Jan Sebechlebskyab378202024-02-26 10:50:42 +0100162 // See REQUEST_PARTIAL_RESULT_COUNT in CameraCharacteristics.java.
163 MetadataBuilder& setRequestPartialResultCount(int partialResultCount);
164
165 // See SCALER_CROPPING_TYPE in CameraCharacteristics.java.
166 MetadataBuilder& setCroppingType(
167 camera_metadata_enum_android_scaler_cropping_type croppingType);
168
169 // See STATISTICS_INFO_MAX_FACE_COUNT in CameraCharacteristic.java.
170 MetadataBuilder& setMaxFaceCount(int maxFaceCount);
171
Jan Sebechlebskyb0119fa2023-12-04 10:29:06 +0100172 // See ANDROID_CONTROL_AVAILABLE_MODES in CameraMetadataTag.aidl.
173 MetadataBuilder& setControlAvailableModes(
174 const std::vector<camera_metadata_enum_android_control_mode_t>&
175 availableModes);
176
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100177 // See ANDROID_CONTROL_MODE in CaptureRequest.java.
178 MetadataBuilder& setControlMode(
179 camera_metadata_enum_android_control_mode_t mode);
180
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100181 // See ANDROID_CONTROL_AVAILABLE_SCENE_MODES in CameraMetadataTag.aidl.
182 MetadataBuilder& setControlAvailableSceneModes(
183 const std::vector<camera_metadata_enum_android_control_scene_mode>&
184 availableSceneModes);
185
Vadim Caen11dfd932024-03-05 09:57:20 +0100186 // See ANDROID_CONTROL_SCENE_MODE in CameraMetadataTag.aidl
187 MetadataBuilder& setControlSceneMode(
188 camera_metadata_enum_android_control_scene_mode sceneMode);
189
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100190 // See ANDROID_CONTROL_AVAILABLE_EFFECTS in CameraMetadataTag.aidl.
191 MetadataBuilder& setControlAvailableEffects(
192 const std::vector<camera_metadata_enum_android_control_effect_mode>&
193 availableEffects);
194
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100195 // See CONTROL_EFFECT_MODE in CaptureRequest.java.
196 MetadataBuilder& setControlEffectMode(
197 camera_metadata_enum_android_control_effect_mode_t effectMode);
198
Vadim Caen11dfd932024-03-05 09:57:20 +0100199 // See ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES in CameraMetadataTag.aidl.
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100200 MetadataBuilder& setControlAvailableVideoStabilizationModes(
201 const std::vector<
202 camera_metadata_enum_android_control_video_stabilization_mode_t>&
203 videoStabilizationModes);
204
Vadim Caen11dfd932024-03-05 09:57:20 +0100205 // See ANDROID_CONTROL_VIDEO_STABILIZATION_MODE in CameraMetadataTag.aidl.
206 MetadataBuilder& setControlVideoStabilizationMode(
207 camera_metadata_enum_android_control_video_stabilization_mode
208 stabilizationMode);
209
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100210 // See CONTROL_AE_AVAILABLE_ANTIBANDING_MODES in CameraCharacteristics.java.
211 MetadataBuilder& setControlAeAvailableAntibandingModes(
212 const std::vector<camera_metadata_enum_android_control_ae_antibanding_mode_t>&
213 antibandingModes);
214
215 // See CONTROL_AE_ANTIBANDING_MODE in CaptureRequest.java.
216 MetadataBuilder& setControlAeAntibandingMode(
217 camera_metadata_enum_android_control_ae_antibanding_mode_t antibandingMode);
218
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100219 // See ANDROID_CONTROL_AE_COMPENSATION_RANGE in CameraMetadataTag.aidl.
220 MetadataBuilder& setControlAeCompensationRange(int32_t min, int32_t max);
221
222 // See ANDROID_CONTROL_AE_COMPENSATION_STEP in CameraMetadataTag.aidl.
223 MetadataBuilder& setControlAeCompensationStep(camera_metadata_rational step);
224
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100225 // See ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION in CameraMetadataTag.aidl.
226 MetadataBuilder& setControlAeExposureCompensation(int32_t exposureCompensation);
227
228 // See ANDROID_CONTROL_AE_AVAILABLE_MODES in CameraCharacteristics.java.
229 MetadataBuilder& setControlAeAvailableModes(
230 const std::vector<camera_metadata_enum_android_control_ae_mode_t>& modes);
231
232 // See ANDROID_CONTROL_AE_MODE in CaptureRequest.java.
233 MetadataBuilder& setControlAeMode(
234 camera_metadata_enum_android_control_ae_mode_t step);
235
236 // See ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER in CaptureRequest.java.
237 MetadataBuilder& setControlAePrecaptureTrigger(
238 camera_metadata_enum_android_control_ae_precapture_trigger_t trigger);
239
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100240 // See ANDROID_CONTROL_AF_AVAILABLE_MODES in CameraMetadataTag.aidl.
241 MetadataBuilder& setControlAfAvailableModes(
242 const std::vector<camera_metadata_enum_android_control_af_mode_t>&
243 availableModes);
244
245 // See ANDROID_CONTROL_AF_MODE in CameraMetadataTag.aidl.
246 MetadataBuilder& setControlAfMode(
247 const camera_metadata_enum_android_control_af_mode_t mode);
248
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100249 // See ANDROID_CONTROL_AF_TRIGGER_MODE in CameraMetadataTag.aidl.
250 MetadataBuilder& setControlAfTrigger(
251 const camera_metadata_enum_android_control_af_trigger_t trigger);
252
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100253 // See ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES in CameraMetadataTag.aidl.
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100254 MetadataBuilder& setControlAeAvailableFpsRanges(
255 const std::vector<FpsRange>& fpsRanges);
256
257 // See ANDROID_CONTROL_AE_TARGET_FPS_RANGE in CaptureRequest.java.
Vadim Caen11dfd932024-03-05 09:57:20 +0100258 MetadataBuilder& setControlAeTargetFpsRange(FpsRange fpsRange);
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100259
260 // See ANDROID_CONTROL_CAPTURE_INTENT in CameraMetadataTag.aidl.
261 MetadataBuilder& setControlCaptureIntent(
262 camera_metadata_enum_android_control_capture_intent_t intent);
263
264 // See ANDROID_CONTROL_MAX_REGIONS in CameraMetadataTag.aidl.
265 MetadataBuilder& setControlMaxRegions(int32_t maxAeRegions,
266 int32_t maxAwbRegions,
267 int32_t maxAfRegions);
268
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100269 // See ANDROID_CONTROL_AWB_AVAILABLE_MODES in CameraMetadataTag.aidl.
270 MetadataBuilder& setControlAvailableAwbModes(
271 const std::vector<camera_metadata_enum_android_control_awb_mode>& awbModes);
272
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100273 // See ANDROID_CONTROL_AWB_AVAILABLE_MODE in CaptureRequest.java.
274 MetadataBuilder& setControlAwbMode(
275 camera_metadata_enum_android_control_awb_mode awb);
276
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100277 // See CONTROL_AWB_LOCK_AVAILABLE in CameraMetadataTag.aidl.
278 MetadataBuilder& setControlAwbLockAvailable(bool awbLockAvailable);
279
Vadim Caen11dfd932024-03-05 09:57:20 +0100280 // See CONTROL_AWB_LOCK in CameraMetadataTag.aidl
281 MetadataBuilder& setControlAwbLock(
282 camera_metadata_enum_android_control_awb_lock awbLock);
283
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100284 // See CONTROL_AE_LOCK_AVAILABLE in CameraMetadataTag.aidl.
285 MetadataBuilder& setControlAeLockAvailable(bool aeLockAvailable);
286
Vadim Caen11dfd932024-03-05 09:57:20 +0100287 // See CONTROL_AE_LOCK in CameraMetadataTag.aidl.
288 MetadataBuilder& setControlAeLock(
289 camera_metadata_enum_android_control_ae_lock aeLock);
290
291 // See CONTROL_AE_STATE in CameraMetadataTag.aidl
292 MetadataBuilder& setControlAeState(
293 camera_metadata_enum_android_control_ae_state aeState);
294
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100295 // See ANDROID_CONTROL_AE_REGIONS in CameraMetadataTag.aidl.
296 MetadataBuilder& setControlAeRegions(
297 const std::vector<ControlRegion>& aeRegions);
298
299 // See ANDROID_CONTROL_AWB_REGIONS in CameraMetadataTag.aidl.
300 MetadataBuilder& setControlAwbRegions(
301 const std::vector<ControlRegion>& awbRegions);
302
Vadim Caen11dfd932024-03-05 09:57:20 +0100303 // See ANDROID_CONTROL_AWB_STATE in CameraMetadataTag.aidl.
304 MetadataBuilder& setControlAwbState(
305 camera_metadata_enum_android_control_awb_state awbState);
306
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100307 // See ANDROID_SCALER_CROP_REGION in CaptureRequest.java.
308 MetadataBuilder& setCropRegion(int32_t x, int32_t y, int32_t width,
309 int32_t height);
310
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100311 // See ANDROID_CONTROL_AF_REGIONS in CameraMetadataTag.aidl.
312 MetadataBuilder& setControlAfRegions(
313 const std::vector<ControlRegion>& afRegions);
314
Vadim Caen11dfd932024-03-05 09:57:20 +0100315 // See ANDROID_CONTROL_AF_STATE in CameraMetadataTag.aidl.
316 MetadataBuilder& setControlAfState(
317 camera_metadata_enum_android_control_af_state aeftate);
318
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100319 // The size of the compressed JPEG image, in bytes.
320 //
321 // See ANDROID_JPEG_SIZE in CameraMetadataTag.aidl.
322 MetadataBuilder& setMaxJpegSize(int32_t size);
323
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100324 // See SENSOR_INFO_MAX_FRAME_DURATION in CameraCharacteristic.java.
325 MetadataBuilder& setMaxFrameDuration(std::chrono::nanoseconds duration);
326
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100327 // See JPEG_AVAILABLE_THUMBNAIL_SIZES in CameraCharacteristic.java.
328 MetadataBuilder& setJpegAvailableThumbnailSizes(
329 const std::vector<Resolution>& thumbnailSizes);
330
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +0100331 // See JPEG_QUALITY in CaptureRequest.java.
332 MetadataBuilder& setJpegQuality(uint8_t quality);
333
334 // See JPEG_THUMBNAIL_SIZE in CaptureRequest.java.
335 MetadataBuilder& setJpegThumbnailSize(int width, int height);
336
337 // See JPEG_THUMBNAIL_QUALITY in CaptureRequest.java.
338 MetadataBuilder& setJpegThumbnailQuality(uint8_t quality);
339
Jan Sebechlebsky8ae23592024-02-02 16:08:18 +0100340 // The maximum numbers of different types of output streams
341 // that can be configured and used simultaneously by a camera device.
342 //
343 // See ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS in CameraMetadataTag.aidl.
344 MetadataBuilder& setMaxNumberOutputStreams(int32_t maxRawStreams,
345 int32_t maxProcessedStreams,
346 int32_t maxStallStreams);
347
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100348 // See ANDROID_SYNC_MAX_LATENCY in CameraMetadataTag.aidl.
349 MetadataBuilder& setSyncMaxLatency(
350 camera_metadata_enum_android_sync_max_latency setSyncMaxLatency);
351
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100352 // See REQUEST_PIPELINE_MAX_DEPTH in CameraCharacteristic.java.
353 MetadataBuilder& setPipelineMaxDepth(uint8_t maxDepth);
354
355 // See REQUEST_PIPELINE_DEPTH in CaptureResult.java.
356 MetadataBuilder& setPipelineDepth(uint8_t depth);
357
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100358 // See ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM in CameraMetadataTag.aidl.
359 MetadataBuilder& setAvailableMaxDigitalZoom(const float maxZoom);
360
Jan Sebechlebsky6ab07fe2023-12-05 15:23:34 +0100361 // See ANDROID_CONTROL_ZOOM_RATIO_RANGE in CameraMetadataTag.aidl.
362 MetadataBuilder& setControlZoomRatioRange(float min, float max);
363
Vadim Caen11dfd932024-03-05 09:57:20 +0100364 // See ANDROID_STATISTICS_SCENE_FLICKER in CameraMetadataTag.aidl.
365 MetadataBuilder& setStatisticsSceneFlicker(
366 camera_metadata_enum_android_statistics_scene_flicker sceneFlicker);
367
368 // See ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE in CameraMetadataTag.aidl.
369 MetadataBuilder& setStatisticsHotPixelMapMode(
370 camera_metadata_enum_android_statistics_hot_pixel_map_mode mode);
371
372 // See ANDROID_STATISTICS_LENS_SHADING_MAP_MODE in CameraMetadataTag.aidl.
373 MetadataBuilder& setStatisticsLensShadingMapMode(
374 camera_metadata_enum_android_statistics_lens_shading_map_mode
375 lensShadingMapMode);
376
377 // See ANDROID_LENS_OPTICAL_STABILIZATION_MODE in CameraMetadataTag.aidl.
378 MetadataBuilder& setLensOpticalStabilizationMode(
379 camera_metadata_enum_android_lens_optical_stabilization_mode_t
380 opticalStabilizationMode);
381
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100382 // See ANDROID_REQUEST_AVAILABLE_CAPABILITIES in CameraMetadataTag.aidl.
383 MetadataBuilder& setAvailableRequestCapabilities(
384 const std::vector<
385 camera_metadata_enum_android_request_available_capabilities_t>&
386 requestCapabilities);
387
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100388 // A list of all keys that the camera device has available to use with
389 // CaptureRequest.
390 //
391 // See ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS in CameraMetadataTag.aidl.
392 MetadataBuilder& setAvailableRequestKeys(const std::vector<int32_t>& keys);
393
394 // A list of all keys that the camera device has available to use with
395 // CaptureResult.
396 //
397 // See ANDROID_RESULT_AVAILABLE_REQUEST_KEYS in CameraMetadataTag.aidl.
398 MetadataBuilder& setAvailableResultKeys(const std::vector<int32_t>& keys);
399
400 // See ANDROID_REQUEST_AVAILABLE_CAPABILITIES in CameraMetadataTag.aidl.
401 MetadataBuilder& setAvailableCapabilities(
402 const std::vector<
403 camera_metadata_enum_android_request_available_capabilities_t>&
404 capabilities);
405
406 // A list of all keys that the camera device has available to use.
407 //
408 // See ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS in CameraMetadataTag.aidl.
409 MetadataBuilder& setAvailableCharacteristicKeys(
410 const std::vector<camera_metadata_tag_t>& keys);
411
412 // Extends metadata with ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100413 // containing all set tags.
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100414 MetadataBuilder& setAvailableCharacteristicKeys();
415
416 // Build CameraMetadata instance.
417 //
418 // Returns nullptr in case something went wrong.
419 std::unique_ptr<::aidl::android::hardware::camera::device::CameraMetadata>
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100420 build();
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100421
422 private:
423 // Maps metadata tags to vectors of values for the given tag.
424 std::map<camera_metadata_tag_t,
425 std::variant<std::vector<int64_t>, std::vector<int32_t>,
426 std::vector<uint8_t>, std::vector<float>,
427 std::vector<camera_metadata_rational_t>>>
428 mEntryMap;
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100429 // Extend metadata with ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS.
430 bool mExtendWithAvailableCharacteristicsKeys = false;
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100431};
432
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +0100433// Returns JPEG_QUALITY from metadata, or nullopt if the key is not present.
434std::optional<int32_t> getJpegQuality(
435 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
436
437// Returns JPEG_THUMBNAIL_SIZE from metadata, or nullopt if the key is not present.
438std::optional<Resolution> getJpegThumbnailSize(
439 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
440
441// Returns JPEG_THUMBNAIL_QUALITY from metadata, or nullopt if the key is not present.
442std::optional<int32_t> getJpegThumbnailQuality(
443 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
444
445// Returns JPEG_AVAILABLE_THUMBNAIL_SIZES from metadata, or nullopt if the key
446// is not present.
447std::vector<Resolution> getJpegAvailableThumbnailSizes(
448 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
449
Vadim Caen11dfd932024-03-05 09:57:20 +0100450std::optional<FpsRange> getFpsRange(
451 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
452
453std::optional<camera_metadata_enum_android_control_capture_intent> getCaptureIntent(
454 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
455
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100456} // namespace virtualcamera
457} // namespace companion
458} // namespace android
459
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +0100460#endif // ANDROID_COMPANION_VIRTUALCAMERA_METADATAUTIL_H