blob: b4d60cb20efdfc2311158f96203d050470a8295d [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
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +010062 struct FpsRange {
63 int32_t minFps;
64 int32_t maxFps;
65
66 bool operator<(const FpsRange& other) const {
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +010067 return maxFps == other.maxFps ? minFps < other.minFps
68 : maxFps < other.maxFps;
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +010069 }
70 };
71
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +010072 MetadataBuilder() = default;
73 ~MetadataBuilder() = default;
74
75 // See ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL in CameraMetadataTag.aidl.
76 MetadataBuilder& setSupportedHardwareLevel(
77 camera_metadata_enum_android_info_supported_hardware_level_t hwLevel);
78
79 // Whether this camera device has a flash unit
80 // See ANDROID_FLASH_INFO_AVAILABLE in CameraMetadataTag.aidl.
81 MetadataBuilder& setFlashAvailable(bool flashAvailable);
82
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +010083 // See FLASH_STATE in CaptureResult.java.
84 MetadataBuilder& setFlashState(
85 camera_metadata_enum_android_flash_state_t flashState);
86
87 // See FLASH_MODE in CaptureRequest.java.
88 MetadataBuilder& setFlashMode(
89 camera_metadata_enum_android_flash_mode_t flashMode);
90
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +010091 // See ANDROID_LENS_FACING in CameraMetadataTag.aidl.
92 MetadataBuilder& setLensFacing(
93 camera_metadata_enum_android_lens_facing lensFacing);
94
Jan Sebechlebskya984ffb2024-02-01 09:12:37 +010095 // See ANDROID_SENSOR_READOUT_TIMESTAMP in CameraMetadataTag.aidl.
96 MetadataBuilder& setSensorReadoutTimestamp(
97 camera_metadata_enum_android_sensor_readout_timestamp_t
98 sensorReadoutTimestamp);
99
Biswarup Pal8ad8bc52024-02-08 13:41:44 +0000100 // See ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS in CameraMetadataTag.aidl.
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +0100101 MetadataBuilder& setAvailableFocalLengths(
102 const std::vector<float>& focalLengths);
Biswarup Pal8ad8bc52024-02-08 13:41:44 +0000103
104 // See ANDROID_LENS_FOCAL_LENGTH in CameraMetadataTag.aidl.
Biswarup Pald9be04d2024-01-31 14:35:15 +0000105 MetadataBuilder& setFocalLength(float focalLength);
106
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100107 // See ANDROID_SENSOR_ORIENTATION in CameraMetadataTag.aidl.
108 MetadataBuilder& setSensorOrientation(int32_t sensorOrientation);
109
110 // Time at start of exposure of first row of the image
111 // sensor active array, in nanoseconds.
112 //
113 // See ANDROID_SENSOR_TIMESTAMP in CameraMetadataTag.aidl.
114 MetadataBuilder& setSensorTimestamp(std::chrono::nanoseconds timestamp);
115
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100116 // See SENSOR_INFO_TIMESTAMP_SOURCE in CameraCharacteristic.java.
117 MetadataBuilder& setSensorTimestampSource(
118 camera_metadata_enum_android_sensor_info_timestamp_source_t timestampSource);
119
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100120 // See ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE in CameraMetadataTag.aidl.
121 MetadataBuilder& setSensorActiveArraySize(int x0, int y0, int x1, int y1);
122
Biswarup Pald9be04d2024-01-31 14:35:15 +0000123 // See ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE in CameraMetadataTag.aidl.
124 MetadataBuilder& setSensorPixelArraySize(int width, int height);
125
126 // See ANDROID_SENSOR_INFO_PHYSICAL_SIZE in CameraMetadataTag.aidl.
127 MetadataBuilder& setSensorPhysicalSize(float width, float height);
128
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100129 // See ANDROID_STATISTICS_FACE_DETECT_MODE in CameraMetadataTag.aidl.
130 MetadataBuilder& setAvailableFaceDetectModes(
131 const std::vector<camera_metadata_enum_android_statistics_face_detect_mode_t>&
132 faceDetectMode);
133
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100134 // See SENSOR_AVAILABLE_TEST_PATTERN_MODES in CameraCharacteristics.java.
135 MetadataBuilder& setAvailableTestPatternModes(
136 const std::vector<camera_metadata_enum_android_sensor_test_pattern_mode>&
137 testPatternModes);
138
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100139 // See ANDROID_STATISTICS_FACE_DETECT_MODE in CaptureRequest.java.
140 MetadataBuilder& setFaceDetectMode(
141 camera_metadata_enum_android_statistics_face_detect_mode_t faceDetectMode);
142
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100143 // Sets available stream configurations along with corresponding minimal frame
144 // durations (corresponding to max fps) and stall durations.
145 //
146 // See ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
147 // ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS and
148 // ANDROID_SCALER_AVAILABLE_STALL_DURATIONS in CameraMetadataTag.aidl.
149 MetadataBuilder& setAvailableOutputStreamConfigurations(
150 const std::vector<StreamConfiguration>& streamConfigurations);
151
Jan Sebechlebskyab378202024-02-26 10:50:42 +0100152 // See COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES in CameraCharacteristics.java.
153 MetadataBuilder& setAvailableAberrationCorrectionModes(
154 const std::vector<
155 camera_metadata_enum_android_color_correction_aberration_mode>&
156 aberrationCorectionModes);
157
Jan Sebechlebsky4be2bd02024-02-26 18:35:18 +0100158 // See COLOR_CORRECTION_ABERRATION_MODE in CaptureRequest.java.
159 MetadataBuilder& setAberrationCorrectionMode(
160 camera_metadata_enum_android_color_correction_aberration_mode
161 aberrationCorrectionMode);
162
Jan Sebechlebskyab378202024-02-26 10:50:42 +0100163 // See NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES in CameraCharacteristics.java.
164 MetadataBuilder& setAvailableNoiseReductionModes(
165 const std::vector<camera_metadata_enum_android_noise_reduction_mode>&
166 noiseReductionModes);
167
Jan Sebechlebsky4be2bd02024-02-26 18:35:18 +0100168 // See NOISE_REDUCTION_MODE in CaptureRequest.java.
169 MetadataBuilder& setNoiseReductionMode(
170 camera_metadata_enum_android_noise_reduction_mode noiseReductionMode);
171
Jan Sebechlebskyab378202024-02-26 10:50:42 +0100172 // See REQUEST_PARTIAL_RESULT_COUNT in CameraCharacteristics.java.
173 MetadataBuilder& setRequestPartialResultCount(int partialResultCount);
174
175 // See SCALER_CROPPING_TYPE in CameraCharacteristics.java.
176 MetadataBuilder& setCroppingType(
177 camera_metadata_enum_android_scaler_cropping_type croppingType);
178
179 // See STATISTICS_INFO_MAX_FACE_COUNT in CameraCharacteristic.java.
180 MetadataBuilder& setMaxFaceCount(int maxFaceCount);
181
Jan Sebechlebskyb0119fa2023-12-04 10:29:06 +0100182 // See ANDROID_CONTROL_AVAILABLE_MODES in CameraMetadataTag.aidl.
183 MetadataBuilder& setControlAvailableModes(
184 const std::vector<camera_metadata_enum_android_control_mode_t>&
185 availableModes);
186
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100187 // See ANDROID_CONTROL_MODE in CaptureRequest.java.
188 MetadataBuilder& setControlMode(
189 camera_metadata_enum_android_control_mode_t mode);
190
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100191 // See ANDROID_CONTROL_AVAILABLE_SCENE_MODES in CameraMetadataTag.aidl.
192 MetadataBuilder& setControlAvailableSceneModes(
193 const std::vector<camera_metadata_enum_android_control_scene_mode>&
194 availableSceneModes);
195
196 // See ANDROID_CONTROL_AVAILABLE_EFFECTS in CameraMetadataTag.aidl.
197 MetadataBuilder& setControlAvailableEffects(
198 const std::vector<camera_metadata_enum_android_control_effect_mode>&
199 availableEffects);
200
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100201 // See CONTROL_EFFECT_MODE in CaptureRequest.java.
202 MetadataBuilder& setControlEffectMode(
203 camera_metadata_enum_android_control_effect_mode_t effectMode);
204
205 // See ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES
206 MetadataBuilder& setControlAvailableVideoStabilizationModes(
207 const std::vector<
208 camera_metadata_enum_android_control_video_stabilization_mode_t>&
209 videoStabilizationModes);
210
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100211 // See CONTROL_AE_AVAILABLE_ANTIBANDING_MODES in CameraCharacteristics.java.
212 MetadataBuilder& setControlAeAvailableAntibandingModes(
213 const std::vector<camera_metadata_enum_android_control_ae_antibanding_mode_t>&
214 antibandingModes);
215
216 // See CONTROL_AE_ANTIBANDING_MODE in CaptureRequest.java.
217 MetadataBuilder& setControlAeAntibandingMode(
218 camera_metadata_enum_android_control_ae_antibanding_mode_t antibandingMode);
219
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100220 // See ANDROID_CONTROL_AE_COMPENSATION_RANGE in CameraMetadataTag.aidl.
221 MetadataBuilder& setControlAeCompensationRange(int32_t min, int32_t max);
222
223 // See ANDROID_CONTROL_AE_COMPENSATION_STEP in CameraMetadataTag.aidl.
224 MetadataBuilder& setControlAeCompensationStep(camera_metadata_rational step);
225
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100226 // See ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION in CameraMetadataTag.aidl.
227 MetadataBuilder& setControlAeExposureCompensation(int32_t exposureCompensation);
228
229 // See ANDROID_CONTROL_AE_AVAILABLE_MODES in CameraCharacteristics.java.
230 MetadataBuilder& setControlAeAvailableModes(
231 const std::vector<camera_metadata_enum_android_control_ae_mode_t>& modes);
232
233 // See ANDROID_CONTROL_AE_MODE in CaptureRequest.java.
234 MetadataBuilder& setControlAeMode(
235 camera_metadata_enum_android_control_ae_mode_t step);
236
237 // See ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER in CaptureRequest.java.
238 MetadataBuilder& setControlAePrecaptureTrigger(
239 camera_metadata_enum_android_control_ae_precapture_trigger_t trigger);
240
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100241 // See ANDROID_CONTROL_AF_AVAILABLE_MODES in CameraMetadataTag.aidl.
242 MetadataBuilder& setControlAfAvailableModes(
243 const std::vector<camera_metadata_enum_android_control_af_mode_t>&
244 availableModes);
245
246 // See ANDROID_CONTROL_AF_MODE in CameraMetadataTag.aidl.
247 MetadataBuilder& setControlAfMode(
248 const camera_metadata_enum_android_control_af_mode_t mode);
249
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100250 // See ANDROID_CONTROL_AF_TRIGGER_MODE in CameraMetadataTag.aidl.
251 MetadataBuilder& setControlAfTrigger(
252 const camera_metadata_enum_android_control_af_trigger_t trigger);
253
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100254 // See ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES in CameraMetadataTag.aidl.
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100255 MetadataBuilder& setControlAeAvailableFpsRanges(
256 const std::vector<FpsRange>& fpsRanges);
257
258 // See ANDROID_CONTROL_AE_TARGET_FPS_RANGE in CaptureRequest.java.
259 MetadataBuilder& setControlAeTargetFpsRange(int32_t min, int32_t max);
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100260
261 // See ANDROID_CONTROL_CAPTURE_INTENT in CameraMetadataTag.aidl.
262 MetadataBuilder& setControlCaptureIntent(
263 camera_metadata_enum_android_control_capture_intent_t intent);
264
265 // See ANDROID_CONTROL_MAX_REGIONS in CameraMetadataTag.aidl.
266 MetadataBuilder& setControlMaxRegions(int32_t maxAeRegions,
267 int32_t maxAwbRegions,
268 int32_t maxAfRegions);
269
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100270 // See ANDROID_CONTROL_AWB_AVAILABLE_MODES in CameraMetadataTag.aidl.
271 MetadataBuilder& setControlAvailableAwbModes(
272 const std::vector<camera_metadata_enum_android_control_awb_mode>& awbModes);
273
Jan Sebechlebskyc3e1a632024-02-06 14:19:05 +0100274 // See ANDROID_CONTROL_AWB_AVAILABLE_MODE in CaptureRequest.java.
275 MetadataBuilder& setControlAwbMode(
276 camera_metadata_enum_android_control_awb_mode awb);
277
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100278 // See CONTROL_AWB_LOCK_AVAILABLE in CameraMetadataTag.aidl.
279 MetadataBuilder& setControlAwbLockAvailable(bool awbLockAvailable);
280
281 // See CONTROL_AE_LOCK_AVAILABLE in CameraMetadataTag.aidl.
282 MetadataBuilder& setControlAeLockAvailable(bool aeLockAvailable);
283
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100284 // See ANDROID_CONTROL_AE_REGIONS in CameraMetadataTag.aidl.
285 MetadataBuilder& setControlAeRegions(
286 const std::vector<ControlRegion>& aeRegions);
287
288 // See ANDROID_CONTROL_AWB_REGIONS in CameraMetadataTag.aidl.
289 MetadataBuilder& setControlAwbRegions(
290 const std::vector<ControlRegion>& awbRegions);
291
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100292 // See ANDROID_SCALER_CROP_REGION in CaptureRequest.java.
293 MetadataBuilder& setCropRegion(int32_t x, int32_t y, int32_t width,
294 int32_t height);
295
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100296 // See ANDROID_CONTROL_AF_REGIONS in CameraMetadataTag.aidl.
297 MetadataBuilder& setControlAfRegions(
298 const std::vector<ControlRegion>& afRegions);
299
300 // The size of the compressed JPEG image, in bytes.
301 //
302 // See ANDROID_JPEG_SIZE in CameraMetadataTag.aidl.
303 MetadataBuilder& setMaxJpegSize(int32_t size);
304
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100305 // See SENSOR_INFO_MAX_FRAME_DURATION in CameraCharacteristic.java.
306 MetadataBuilder& setMaxFrameDuration(std::chrono::nanoseconds duration);
307
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100308 // See JPEG_AVAILABLE_THUMBNAIL_SIZES in CameraCharacteristic.java.
309 MetadataBuilder& setJpegAvailableThumbnailSizes(
310 const std::vector<Resolution>& thumbnailSizes);
311
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +0100312 // See JPEG_QUALITY in CaptureRequest.java.
313 MetadataBuilder& setJpegQuality(uint8_t quality);
314
315 // See JPEG_THUMBNAIL_SIZE in CaptureRequest.java.
316 MetadataBuilder& setJpegThumbnailSize(int width, int height);
317
318 // See JPEG_THUMBNAIL_QUALITY in CaptureRequest.java.
319 MetadataBuilder& setJpegThumbnailQuality(uint8_t quality);
320
Jan Sebechlebsky8ae23592024-02-02 16:08:18 +0100321 // The maximum numbers of different types of output streams
322 // that can be configured and used simultaneously by a camera device.
323 //
324 // See ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS in CameraMetadataTag.aidl.
325 MetadataBuilder& setMaxNumberOutputStreams(int32_t maxRawStreams,
326 int32_t maxProcessedStreams,
327 int32_t maxStallStreams);
328
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100329 // See ANDROID_SYNC_MAX_LATENCY in CameraMetadataTag.aidl.
330 MetadataBuilder& setSyncMaxLatency(
331 camera_metadata_enum_android_sync_max_latency setSyncMaxLatency);
332
Jan Sebechlebskybb01c1d2024-02-12 11:41:37 +0100333 // See REQUEST_PIPELINE_MAX_DEPTH in CameraCharacteristic.java.
334 MetadataBuilder& setPipelineMaxDepth(uint8_t maxDepth);
335
336 // See REQUEST_PIPELINE_DEPTH in CaptureResult.java.
337 MetadataBuilder& setPipelineDepth(uint8_t depth);
338
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100339 // See ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM in CameraMetadataTag.aidl.
340 MetadataBuilder& setAvailableMaxDigitalZoom(const float maxZoom);
341
Jan Sebechlebsky6ab07fe2023-12-05 15:23:34 +0100342 // See ANDROID_CONTROL_ZOOM_RATIO_RANGE in CameraMetadataTag.aidl.
343 MetadataBuilder& setControlZoomRatioRange(float min, float max);
344
Jan Sebechlebsky4425a732024-01-31 11:31:54 +0100345 // See ANDROID_REQUEST_AVAILABLE_CAPABILITIES in CameraMetadataTag.aidl.
346 MetadataBuilder& setAvailableRequestCapabilities(
347 const std::vector<
348 camera_metadata_enum_android_request_available_capabilities_t>&
349 requestCapabilities);
350
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100351 // A list of all keys that the camera device has available to use with
352 // CaptureRequest.
353 //
354 // See ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS in CameraMetadataTag.aidl.
355 MetadataBuilder& setAvailableRequestKeys(const std::vector<int32_t>& keys);
356
357 // A list of all keys that the camera device has available to use with
358 // CaptureResult.
359 //
360 // See ANDROID_RESULT_AVAILABLE_REQUEST_KEYS in CameraMetadataTag.aidl.
361 MetadataBuilder& setAvailableResultKeys(const std::vector<int32_t>& keys);
362
363 // See ANDROID_REQUEST_AVAILABLE_CAPABILITIES in CameraMetadataTag.aidl.
364 MetadataBuilder& setAvailableCapabilities(
365 const std::vector<
366 camera_metadata_enum_android_request_available_capabilities_t>&
367 capabilities);
368
369 // A list of all keys that the camera device has available to use.
370 //
371 // See ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS in CameraMetadataTag.aidl.
372 MetadataBuilder& setAvailableCharacteristicKeys(
373 const std::vector<camera_metadata_tag_t>& keys);
374
375 // Extends metadata with ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100376 // containing all set tags.
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100377 MetadataBuilder& setAvailableCharacteristicKeys();
378
379 // Build CameraMetadata instance.
380 //
381 // Returns nullptr in case something went wrong.
382 std::unique_ptr<::aidl::android::hardware::camera::device::CameraMetadata>
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100383 build();
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100384
385 private:
386 // Maps metadata tags to vectors of values for the given tag.
387 std::map<camera_metadata_tag_t,
388 std::variant<std::vector<int64_t>, std::vector<int32_t>,
389 std::vector<uint8_t>, std::vector<float>,
390 std::vector<camera_metadata_rational_t>>>
391 mEntryMap;
Jan Sebechlebskyad8d35f2024-02-05 11:58:59 +0100392 // Extend metadata with ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS.
393 bool mExtendWithAvailableCharacteristicsKeys = false;
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100394};
395
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +0100396// Returns JPEG_QUALITY from metadata, or nullopt if the key is not present.
397std::optional<int32_t> getJpegQuality(
398 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
399
400// Returns JPEG_THUMBNAIL_SIZE from metadata, or nullopt if the key is not present.
401std::optional<Resolution> getJpegThumbnailSize(
402 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
403
404// Returns JPEG_THUMBNAIL_QUALITY from metadata, or nullopt if the key is not present.
405std::optional<int32_t> getJpegThumbnailQuality(
406 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
407
408// Returns JPEG_AVAILABLE_THUMBNAIL_SIZES from metadata, or nullopt if the key
409// is not present.
410std::vector<Resolution> getJpegAvailableThumbnailSizes(
411 const aidl::android::hardware::camera::device::CameraMetadata& metadata);
412
Jan Sebechlebsky5cb39962023-11-22 17:33:07 +0100413} // namespace virtualcamera
414} // namespace companion
415} // namespace android
416
Jan Sebechlebsky4ce32082024-02-14 16:02:11 +0100417#endif // ANDROID_COMPANION_VIRTUALCAMERA_METADATAUTIL_H