Patch Detail
Show a patch.
GET /api/patches/27133/?format=api
{ "id": 27133, "url": "https://patchwork.libcamera.org/api/patches/27133/?format=api", "web_url": "https://patchwork.libcamera.org/patch/27133/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260629163017.863145-50-barnabas.pocze@ideasonboard.com>", "date": "2026-06-29T16:30:12", "name": "[RFC,v1,49/54] android: Update imported files", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "b40982279e1c4506f123fe77772580d5faac7c6c", "submitter": { "id": 216, "url": "https://patchwork.libcamera.org/api/people/216/?format=api", "name": "Barnabás Pőcze", "email": "barnabas.pocze@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/27133/mbox/", "series": [ { "id": 6025, "url": "https://patchwork.libcamera.org/api/series/6025/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6025", "date": "2026-06-29T16:29:23", "name": "libcamera: Split requests and buffers", "version": 1, "mbox": "https://patchwork.libcamera.org/series/6025/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/27133/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/27133/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id CABF6C3264\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 29 Jun 2026 16:40:43 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7809E65F4A;\n\tMon, 29 Jun 2026 18:40:43 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 67E3865F73\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 29 Jun 2026 18:30:33 +0200 (CEST)", "from pb-laptop.local (185.221.140.128.nat.pool.zt.hu\n\t[185.221.140.128])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 4FBF78D4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 29 Jun 2026 18:29:49 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"envWavue\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1782750590;\n\tbh=0YwRqVc4R63sYZt5n6gxdPiyT3znhwgxNofyeqfF8Js=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=envWavuewiUr3oi5ZAFd81dHHYObOHbqEJgQanhtEv1BcIAIg5Zobi3oMLpRPV87q\n\t+xUBZModZ+a3vQyzU0q+LqBPdCNPbqSWcX1xQ3PBRkvQSCN70ce0DRcG8bjvrWGcr0\n\tNjbkb5VmWEyC9mM/a44NE7x7hlyLsQJXQ0OXzkMk=", "From": "=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Subject": "[RFC PATCH v1 49/54] android: Update imported files", "Date": "Mon, 29 Jun 2026 18:30:12 +0200", "Message-ID": "<20260629163017.863145-50-barnabas.pocze@ideasonboard.com>", "X-Mailer": "git-send-email 2.54.0", "In-Reply-To": "<20260629163017.863145-1-barnabas.pocze@ideasonboard.com>", "References": "<20260629163017.863145-1-barnabas.pocze@ideasonboard.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-Mailman-Approved-At": "Mon, 29 Jun 2026 18:40:42 +0200", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Update the android headers and source files from the android repositories:\n\n * https://android.googlesource.com/platform/hardware/libhardware/\n * https://android.googlesource.com/platform/system/core/\n * https://android.googlesource.com/platform/system/logging/\n * https://android.googlesource.com/platform/system/media/\n\nall from tag `android-17.0.0_r1`.\n\nThe SPDX license identifiers are kept or added for new files.\nCertain new struct members also need to be initialized for the\ncompilation to succeed.\n\nSigned-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n---\n .../libhardware/include/hardware/camera3.h | 360 +-\n .../include/hardware/camera_common.h | 304 +-\n .../libhardware/include/hardware/gralloc.h | 99 +-\n .../android/metadata/camera_metadata_hidden.h | 11 +-\n .../android/metadata/system/camera_metadata.h | 41 +-\n .../metadata/system/camera_metadata_tags.h | 633 +-\n .../metadata/system/camera_vendor_tags.h | 10 +-\n .../android/system/core/include/android/log.h | 450 +-\n .../core/include/cutils/native_handle.h | 62 +-\n .../system/core/include/system/camera.h | 4 +-\n .../core/include/system/graphics-base-v1.2.h | 36 +\n .../core/include/system/graphics-base.h | 1 +\n .../system/core/include/system/graphics.h | 10 +-\n src/android/camera3_hal.cpp | 3 +\n src/android/camera_ops.cpp | 4 +-\n src/android/metadata/camera_metadata.c | 183 +-\n .../metadata/camera_metadata_tag_info.c | 5478 ++++++++++++++++-\n 17 files changed, 7437 insertions(+), 252 deletions(-)\n create mode 100644 include/android/system/core/include/system/graphics-base-v1.2.h", "diff": "diff --git a/include/android/hardware/libhardware/include/hardware/camera3.h b/include/android/hardware/libhardware/include/hardware/camera3.h\nindex fd1e2072ad..fe7285f904 100644\n--- a/include/android/hardware/libhardware/include/hardware/camera3.h\n+++ b/include/android/hardware/libhardware/include/hardware/camera3.h\n@@ -22,7 +22,7 @@\n #include \"camera_common.h\"\n \n /**\n- * Camera device HAL 3.5[ CAMERA_DEVICE_API_VERSION_3_5 ]\n+ * Camera device HAL 3.6[ CAMERA_DEVICE_API_VERSION_3_6 ]\n *\n * This is the current recommended version of the camera device HAL.\n *\n@@ -30,7 +30,7 @@\n * android.hardware.camera2 API as LIMITED or above hardware level.\n *\n * Camera devices that support this version of the HAL must return\n- * CAMERA_DEVICE_API_VERSION_3_5 in camera_device_t.common.version and in\n+ * CAMERA_DEVICE_API_VERSION_3_6 in camera_device_t.common.version and in\n * camera_info_t.device_version (from camera_module_t.get_camera_info).\n *\n * CAMERA_DEVICE_API_VERSION_3_3 and above:\n@@ -184,6 +184,25 @@\n * for a logical multi camera, the application has the option to specify individual\n * settings for a particular physical device.\n *\n+ * 3.6: Minor revisions to support HAL buffer management APIs:\n+ *\n+ * - Add ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION static metadata, which allows HAL to\n+ * opt in to the new buffer management APIs described below.\n+ *\n+ * - Add request_stream_buffers() and return_stream_buffers() to camera3_callback_ops_t for HAL to\n+ * request and return output buffers from camera service.\n+ *\n+ * - Add signal_stream_flush() to camera3_device_ops_t for camera service to notify HAL an\n+ * upcoming configure_streams() call requires HAL to return buffers of certain streams.\n+ *\n+ * - Add CAMERA3_JPEG_APP_SEGMENTS_BLOB_ID to support BLOB with only JPEG apps\n+ * segments and thumbnail (without main image bitstream). Camera framework\n+ * uses such stream togerther with a HAL YUV_420_888/IMPLEMENTATION_DEFINED\n+ * stream to encode HEIC (ISO/IEC 23008-12) image.\n+ *\n+ * - Add is_reconfiguration_required() to camera3_device_ops_t to enable HAL to skip or\n+ * trigger stream reconfiguration depending on new session parameter values.\n+ *\n */\n \n /**\n@@ -1314,7 +1333,7 @@\n * To avoid excessive amount of noise reduction and insufficient amount of edge enhancement\n * being applied to the input buffer, the application can hint the HAL how much effective\n * exposure time improvement has been done by the application, then the HAL can adjust the\n- * noise reduction and edge enhancement paramters to get best reprocessed image quality.\n+ * noise reduction and edge enhancement parameters to get best reprocessed image quality.\n * Below tag can be used for this purpose:\n * - android.reprocess.effectiveExposureFactor\n * The value would be exposure time increase factor applied to the original output image,\n@@ -1737,24 +1756,8 @@ typedef struct camera3_stream {\n */\n const char* physical_camera_id;\n \n- /**\n- * This should be one of the camera3_stream_rotation_t values except for\n- * CAMERA3_STREAM_ROTATION_180.\n- * When setting to CAMERA3_STREAM_ROTATION_90 or CAMERA3_STREAM_ROTATION_270, HAL would crop,\n- * rotate the frame by the specified degrees clockwise and scale it up to original size.\n- * In Chrome OS, it's possible to have a portrait activity run in a landscape screen with\n- * landscape-mounted camera. The activity would show stretched or rotated preview because it\n- * does not expect to receive landscape preview frames. To solve this problem, we ask HAL to\n- * crop, rotate and scale the frames and modify CameraCharacteristics.SENSOR_ORIENTATION\n- * accordingly to imitate a portrait camera.\n- * Setting it to CAMERA3_STREAM_ROTATION_0 means no crop-rotate-scale would be performed.\n- * |cros_rotate_scale_degrees| in all camera3_stream_t of a configure_streams() call must be\n- * identical. The HAL should return -EINVAL if the degrees are not the same for all the streams.\n- */\n- int crop_rotate_scale_degrees;\n-\n /* reserved for future use */\n- void *reserved[5];\n+ void *reserved[6];\n \n } camera3_stream_t;\n \n@@ -1958,21 +1961,25 @@ typedef struct camera3_stream_buffer_set {\n /**\n * camera3_jpeg_blob:\n *\n- * Transport header for compressed JPEG buffers in output streams.\n+ * Transport header for compressed JPEG or JPEG_APP_SEGMENTS buffers in output streams.\n *\n- * To capture JPEG images, a stream is created using the pixel format\n+ * To capture JPEG or JPEG_APP_SEGMENTS images, a stream is created using the pixel format\n * HAL_PIXEL_FORMAT_BLOB. The buffer size for the stream is calculated by the\n- * framework, based on the static metadata field android.jpeg.maxSize. Since\n- * compressed JPEG images are of variable size, the HAL needs to include the\n- * final size of the compressed image using this structure inside the output\n- * stream buffer. The JPEG blob ID field must be set to CAMERA3_JPEG_BLOB_ID.\n+ * framework, based on the static metadata field android.jpeg.maxSize for JPEG,\n+ * and android.jpeg.maxAppsSegments for JPEG_APP_SEGMENTS.\n *\n- * Transport header should be at the end of the JPEG output stream buffer. That\n+ * Since compressed JPEG/JPEG_APP_SEGMENTS images are of variable size, the HAL needs to\n+ * include the final size of the image using this structure inside the output\n+ * stream buffer. The JPEG blob ID field must be set to CAMERA3_JPEG_BLOB_ID for\n+ * JPEG and CAMERA3_JPEG_APP_SEGMENTS_BLOB_ID for APP segments.\n+ *\n+ * Transport header should be at the end of the output stream buffer. That\n * means the jpeg_blob_id must start at byte[buffer_size -\n * sizeof(camera3_jpeg_blob)], where the buffer_size is the size of gralloc buffer.\n- * Any HAL using this transport header must account for it in android.jpeg.maxSize\n- * The JPEG data itself starts at the beginning of the buffer and should be\n- * jpeg_size bytes long.\n+ * The blob data itself starts at the beginning of the buffer and should be\n+ * jpeg_size bytes long. HAL using this transport header for JPEG must account for\n+ * it in android.jpeg.maxSize. For JPEG APP segments, camera framework makes\n+ * sure that the output stream buffer is large enough for the transport header.\n */\n typedef struct camera3_jpeg_blob {\n uint16_t jpeg_blob_id;\n@@ -1980,7 +1987,8 @@ typedef struct camera3_jpeg_blob {\n } camera3_jpeg_blob_t;\n \n enum {\n- CAMERA3_JPEG_BLOB_ID = 0x00FF\n+ CAMERA3_JPEG_BLOB_ID = 0x00FF,\n+ CAMERA3_JPEG_APP_SEGMENTS_BLOB_ID = 0x0100,\n };\n \n /**********************************************************************\n@@ -2046,6 +2054,14 @@ typedef enum camera3_error_msg_code {\n * available. Subsequent requests are unaffected, and the device remains\n * operational. The frame_number field specifies the request for which\n * result metadata won't be available.\n+ *\n+ * >= CAMERA_DEVICE_API_VERSION_3_6:\n+ *\n+ * In case the result metadata is absent for a logical camera device, then the\n+ * error_stream pointer must be set to NULL.\n+ * If the result metadata cannot be produced for a physical camera device, then\n+ * error_stream must contain a pointer to a respective stream associated with\n+ * that physical device.\n */\n CAMERA3_MSG_ERROR_RESULT = 3,\n \n@@ -2143,6 +2159,153 @@ typedef struct camera3_notify_msg {\n \n } camera3_notify_msg_t;\n \n+\n+/**********************************************************************\n+ *\n+ * Types definition for request_stream_buffers() callback.\n+ *\n+ */\n+\n+/**\n+ * camera3_buffer_request_status_t:\n+ *\n+ * The overall buffer request status returned by request_stream_buffers()\n+ */\n+typedef enum camera3_buffer_request_status {\n+ /**\n+ * request_stream_buffers() call succeeded and all requested buffers are\n+ * returned.\n+ */\n+ CAMERA3_BUF_REQ_OK = 0,\n+\n+ /**\n+ * request_stream_buffers() call failed for some streams.\n+ * Check per stream status for each returned camera3_stream_buffer_ret_t.\n+ */\n+ CAMERA3_BUF_REQ_FAILED_PARTIAL = 1,\n+\n+ /**\n+ * request_stream_buffers() call failed for all streams and no buffers are\n+ * returned at all. Camera service is about to or is performing\n+ * configure_streams() call. HAL must wait until next configure_streams()\n+ * call is finished before requesting buffers again.\n+ */\n+ CAMERA3_BUF_REQ_FAILED_CONFIGURING = 2,\n+\n+ /**\n+ * request_stream_buffers() call failed for all streams and no buffers are\n+ * returned at all. Failure due to bad camera3_buffer_request input, eg:\n+ * unknown stream or repeated stream in the list of buffer requests.\n+ */\n+ CAMERA3_BUF_REQ_FAILED_ILLEGAL_ARGUMENTS = 3,\n+\n+ /**\n+ * request_stream_buffers() call failed for all streams and no buffers are\n+ * returned at all. This can happen for unknown reasons or a combination\n+ * of different failure reasons per stream. For the latter case, caller can\n+ * check per stream failure reason returned in camera3_stream_buffer_ret.\n+ */\n+ CAMERA3_BUF_REQ_FAILED_UNKNOWN = 4,\n+\n+ /**\n+ * Number of buffer request status\n+ */\n+ CAMERA3_BUF_REQ_NUM_STATUS\n+\n+} camera3_buffer_request_status_t;\n+\n+/**\n+ * camera3_stream_buffer_req_status_t:\n+ *\n+ * The per stream buffer request status returned by request_stream_buffers()\n+ */\n+typedef enum camera3_stream_buffer_req_status {\n+ /**\n+ * Get buffer succeeds and all requested buffers are returned.\n+ */\n+ CAMERA3_PS_BUF_REQ_OK = 0,\n+\n+ /**\n+ * Get buffer failed due to timeout waiting for an available buffer. This is\n+ * likely due to the client application holding too many buffers, or the\n+ * system is under memory pressure.\n+ * This is not a fatal error. HAL can try to request buffer for this stream\n+ * later. If HAL cannot get a buffer for certain capture request in time\n+ * due to this error, HAL can send an ERROR_REQUEST to camera service and\n+ * drop processing that request.\n+ */\n+ CAMERA3_PS_BUF_REQ_NO_BUFFER_AVAILABLE = 1,\n+\n+ /**\n+ * Get buffer failed due to HAL has reached its maxBuffer count. This is not\n+ * a fatal error. HAL can try to request buffer for this stream again after\n+ * it returns at least one buffer of that stream to camera service.\n+ */\n+ CAMERA3_PS_BUF_REQ_MAX_BUFFER_EXCEEDED = 2,\n+\n+ /**\n+ * Get buffer failed due to the stream is disconnected by client\n+ * application, has been removed, or not recognized by camera service.\n+ * This means application is no longer interested in this stream.\n+ * Requesting buffer for this stream will never succeed after this error is\n+ * returned. HAL must safely return all buffers of this stream after\n+ * getting this error. If HAL gets another capture request later targeting\n+ * a disconnected stream, HAL must send an ERROR_REQUEST to camera service\n+ * and drop processing that request.\n+ */\n+ CAMERA3_PS_BUF_REQ_STREAM_DISCONNECTED = 3,\n+\n+ /**\n+ * Get buffer failed for unknown reason. This is a fatal error and HAL must\n+ * send ERROR_DEVICE to camera service and be ready to be closed.\n+ */\n+ CAMERA3_PS_BUF_REQ_UNKNOWN_ERROR = 4,\n+\n+ /**\n+ * Number of buffer request status\n+ */\n+ CAMERA3_PS_BUF_REQ_NUM_STATUS\n+} camera3_stream_buffer_req_status_t;\n+\n+typedef struct camera3_buffer_request {\n+ /**\n+ * The stream HAL wants to request buffer from\n+ */\n+ camera3_stream_t *stream;\n+\n+ /**\n+ * The number of buffers HAL requested\n+ */\n+ uint32_t num_buffers_requested;\n+} camera3_buffer_request_t;\n+\n+typedef struct camera3_stream_buffer_ret {\n+ /**\n+ * The stream HAL wants to request buffer from\n+ */\n+ camera3_stream_t *stream;\n+\n+ /**\n+ * The status of buffer request of this stream\n+ */\n+ camera3_stream_buffer_req_status_t status;\n+\n+ /**\n+ * Number of output buffers returned. Must be 0 when above status is not\n+ * CAMERA3_PS_BUF_REQ_OK; otherwise the value must be equal to\n+ * num_buffers_requested in the corresponding camera3_buffer_request_t\n+ */\n+ uint32_t num_output_buffers;\n+\n+ /**\n+ * The returned output buffers for the stream.\n+ * Caller of request_stream_buffers() should supply this with enough memory\n+ * (num_buffers_requested * sizeof(camera3_stream_buffer_t))\n+ */\n+ camera3_stream_buffer_t *output_buffers;\n+} camera3_stream_buffer_ret_t;\n+\n+\n /**********************************************************************\n *\n * Capture request/result definitions for the HAL process_capture_request()\n@@ -2660,6 +2823,65 @@ typedef struct camera3_callback_ops {\n void (*notify)(const struct camera3_callback_ops *,\n const camera3_notify_msg_t *msg);\n \n+ /**\n+ * request_stream_buffers:\n+ *\n+ * <= CAMERA_DEVICE_API_VERISON_3_5:\n+ *\n+ * DO NOT USE: not defined and must be NULL.\n+ *\n+ * >= CAMERA_DEVICE_API_VERISON_3_6:\n+ *\n+ * Synchronous callback for HAL to ask for output buffer from camera service.\n+ *\n+ * This call may be serialized in camera service so it is strongly\n+ * recommended to only call this method from one thread.\n+ *\n+ * When camera device advertises\n+ * (android.info.supportedBufferManagementVersion ==\n+ * ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5), HAL\n+ * can use this method to request buffers from camera service.\n+ *\n+ * Caller is responsible for allocating enough memory for returned_buf_reqs\n+ * argument (num_buffer_reqs * sizeof(camera3_stream_buffer_ret_t)) bytes\n+ * and also the memory for the output_buffers field in each\n+ * camera3_stream_buffer_ret_t\n+ * (num_buffers_requested * sizeof(camera3_stream_buffer_t)) bytes\n+ *\n+ * Performance requirements:\n+ * This is a blocking call that takes more time with more buffers requested.\n+ * HAL should not request large amount of buffers on a latency critical code\n+ * path. It is highly recommended to use a dedicated thread to perform\n+ * all requestStreamBuffer calls, and adjust the thread priority and/or\n+ * timing of making the call in order for buffers to arrive before HAL is\n+ * ready to fill the buffer.\n+ */\n+ camera3_buffer_request_status_t (*request_stream_buffers)(\n+ const struct camera3_callback_ops *,\n+ uint32_t num_buffer_reqs,\n+ const camera3_buffer_request_t *buffer_reqs,\n+ /*out*/uint32_t *num_returned_buf_reqs,\n+ /*out*/camera3_stream_buffer_ret_t *returned_buf_reqs);\n+\n+ /**\n+ * return_stream_buffers:\n+ *\n+ * <= CAMERA_DEVICE_API_VERISON_3_5:\n+ *\n+ * DO NOT USE: not defined and must be NULL.\n+ *\n+ * >= CAMERA_DEVICE_API_VERISON_3_6:\n+ *\n+ * Synchronous callback for HAL to return output buffers to camera service.\n+ *\n+ * If this method is called during a configure_streams() call, it will be\n+ * blocked until camera service finishes the ongoing configure_streams() call.\n+ */\n+ void (*return_stream_buffers)(\n+ const struct camera3_callback_ops *,\n+ uint32_t num_buffers,\n+ const camera3_stream_buffer_t* const* buffers);\n+\n } camera3_callback_ops_t;\n \n /**********************************************************************\n@@ -3238,8 +3460,82 @@ typedef struct camera3_device_ops {\n */\n int (*flush)(const struct camera3_device *);\n \n+ /**\n+ * signal_stream_flush:\n+ *\n+ * <= CAMERA_DEVICE_API_VERISON_3_5:\n+ *\n+ * Not defined and must be NULL\n+ *\n+ * >= CAMERA_DEVICE_API_VERISON_3_6:\n+ *\n+ * Signaling HAL camera service is about to perform configure_streams() call\n+ * and HAL must return all buffers of designated streams. HAL must finish\n+ * inflight requests normally and return all buffers belonging to the\n+ * designated streams through process_capture_result() or\n+ * return_stream_buffers() API in a timely manner, or camera service will run\n+ * into a fatal error.\n+ *\n+ * Note that this call serves as an optional hint and camera service may\n+ * skip calling this if all buffers are already returned.\n+ *\n+ */\n+ void (*signal_stream_flush)(const struct camera3_device*,\n+ uint32_t num_streams,\n+ const camera3_stream_t* const* streams);\n+\n+ /**\n+ * is_reconfiguration_required:\n+ *\n+ * <= CAMERA_DEVICE_API_VERISON_3_5:\n+ *\n+ * Not defined and must be NULL\n+ *\n+ * >= CAMERA_DEVICE_API_VERISON_3_6:\n+ *\n+ * Check whether complete stream reconfiguration is required for possible new session\n+ * parameter values.\n+ *\n+ * This method must be called by the camera framework in case the client changes\n+ * the value of any advertised session parameters. Depending on the specific values\n+ * the HAL can decide whether a complete stream reconfiguration is required. In case\n+ * the HAL returns -ENVAL, the camera framework must skip the internal reconfiguration.\n+ * In case Hal returns 0, the framework must reconfigure the streams and pass the\n+ * new session parameter values accordingly.\n+ * This call may be done by the framework some time before the request with new parameters\n+ * is submitted to the HAL, and the request may be cancelled before it ever gets submitted.\n+ * Therefore, the HAL must not use this query as an indication to change its behavior in any\n+ * way.\n+ * ------------------------------------------------------------------------\n+ *\n+ * Preconditions:\n+ *\n+ * The framework can call this method at any time after active\n+ * session configuration. There must be no impact on the performance of\n+ * pending camera requests in any way. In particular there must not be\n+ * any glitches or delays during normal camera streaming.\n+ *\n+ * Performance requirements:\n+ * HW and SW camera settings must not be changed and there must not be\n+ * a user-visible impact on camera performance.\n+ *\n+ * @param oldSessionParams The currently applied session parameters.\n+ * @param newSessionParams The new session parameters set by client.\n+ *\n+ * @return Status Status code for the operation, one of:\n+ * 0: In case the stream reconfiguration is required\n+ *\n+ * -EINVAL: In case the stream reconfiguration is not required.\n+ *\n+ * -ENOSYS: In case the camera device does not support the\n+ * reconfiguration query.\n+ */\n+ int (*is_reconfiguration_required)(const struct camera3_device*,\n+ const camera_metadata_t* old_session_params,\n+ const camera_metadata_t* new_session_params);\n+\n /* reserved for future use */\n- void *reserved[8];\n+ void *reserved[6];\n } camera3_device_ops_t;\n \n /**********************************************************************\ndiff --git a/include/android/hardware/libhardware/include/hardware/camera_common.h b/include/android/hardware/libhardware/include/hardware/camera_common.h\nindex 5c9bc06fe0..1d4a02a199 100644\n--- a/include/android/hardware/libhardware/include/hardware/camera_common.h\n+++ b/include/android/hardware/libhardware/include/hardware/camera_common.h\n@@ -118,6 +118,22 @@ __BEGIN_DECLS\n * 4. Module initialization method. This will be called by the camera service\n * right after the HAL module is loaded, to allow for one-time initialization\n * of the HAL. It is called before any other module methods are invoked.\n+ *\n+ *******************************************************************************\n+ * Version: 2.5 [CAMERA_MODULE_API_VERSION_2_5]\n+ *\n+ * This camera module version adds below API changes:\n+ *\n+ * 1. Support to query characteristics of a non-standalone physical camera, which can\n+ * only be accessed as part of a logical camera. It also adds camera stream combination\n+ * query.\n+ *\n+ * 2. Ability to query whether a particular camera stream combination is\n+ * supported by the camera device.\n+ *\n+ * 3. Device state change notification. This module version also supports\n+ * notification about the overall device state change, such as\n+ * folding/unfolding, or covering/uncovering of shutter.\n */\n \n /**\n@@ -134,8 +150,9 @@ __BEGIN_DECLS\n #define CAMERA_MODULE_API_VERSION_2_2 HARDWARE_MODULE_API_VERSION(2, 2)\n #define CAMERA_MODULE_API_VERSION_2_3 HARDWARE_MODULE_API_VERSION(2, 3)\n #define CAMERA_MODULE_API_VERSION_2_4 HARDWARE_MODULE_API_VERSION(2, 4)\n+#define CAMERA_MODULE_API_VERSION_2_5 HARDWARE_MODULE_API_VERSION(2, 5)\n \n-#define CAMERA_MODULE_API_VERSION_CURRENT CAMERA_MODULE_API_VERSION_2_4\n+#define CAMERA_MODULE_API_VERSION_CURRENT CAMERA_MODULE_API_VERSION_2_5\n \n /**\n * All device versions <= HARDWARE_DEVICE_API_VERSION(1, 0xFF) must be treated\n@@ -150,6 +167,7 @@ __BEGIN_DECLS\n #define CAMERA_DEVICE_API_VERSION_3_3 HARDWARE_DEVICE_API_VERSION(3, 3)\n #define CAMERA_DEVICE_API_VERSION_3_4 HARDWARE_DEVICE_API_VERSION(3, 4)\n #define CAMERA_DEVICE_API_VERSION_3_5 HARDWARE_DEVICE_API_VERSION(3, 5)\n+#define CAMERA_DEVICE_API_VERSION_3_6 HARDWARE_DEVICE_API_VERSION(3, 6)\n \n // Device version 3.5 is current, older HAL camera device versions are not\n // recommended for new devices.\n@@ -645,6 +663,192 @@ typedef struct camera_module_callbacks {\n \n } camera_module_callbacks_t;\n \n+/**\n+ * camera_stream_t:\n+ *\n+ * A handle to a single camera input or output stream. A stream is defined by\n+ * the framework by its buffer resolution and format and gralloc usage flags.\n+ *\n+ * The stream structures are owned by the framework and pointers to a\n+ * camera_stream passed into the HAL by is_stream_combination_supported() are\n+ * only valid within the scope of the call.\n+ *\n+ * All camera_stream members are immutable.\n+ */\n+typedef struct camera_stream {\n+ /**\n+ * The type of the stream, one of the camera3_stream_type_t values.\n+ */\n+ int stream_type;\n+\n+ /**\n+ * The width in pixels of the buffers in this stream\n+ */\n+ uint32_t width;\n+\n+ /**\n+ * The height in pixels of the buffers in this stream\n+ */\n+ uint32_t height;\n+\n+ /**\n+ * The pixel format for the buffers in this stream. Format is a value from\n+ * the HAL_PIXEL_FORMAT_* list in system/core/include/system/graphics.h, or\n+ * from device-specific headers.\n+ *\n+ * If HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED is used, then the platform\n+ * gralloc module will select a format based on the usage flags provided by\n+ * the camera device and the other endpoint of the stream.\n+ *\n+ */\n+ int format;\n+\n+ /**\n+ * The gralloc usage flags for this stream, as needed by the HAL. The usage\n+ * flags are defined in gralloc.h (GRALLOC_USAGE_*), or in device-specific\n+ * headers.\n+ *\n+ * For output streams, these are the HAL's producer usage flags. For input\n+ * streams, these are the HAL's consumer usage flags. The usage flags from\n+ * the producer and the consumer will be combined together and then passed\n+ * to the platform gralloc HAL module for allocating the gralloc buffers for\n+ * each stream.\n+ *\n+ * The usage flag for an output stream may be bitwise\n+ * combination of usage flags for multiple consumers, for the purpose of\n+ * sharing one camera stream between those consumers. The HAL must fail\n+ * the stream combination query call with -EINVAL if the combined flags cannot be\n+ * supported due to imcompatible buffer format, dataSpace, or other hardware\n+ * limitations.\n+ */\n+ uint32_t usage;\n+\n+ /**\n+ * A field that describes the contents of the buffer. The format and buffer\n+ * dimensions define the memory layout and structure of the stream buffers,\n+ * while dataSpace defines the meaning of the data within the buffer.\n+ *\n+ * For most formats, dataSpace defines the color space of the image data.\n+ * In addition, for some formats, dataSpace indicates whether image- or\n+ * depth-based data is requested. See system/core/include/system/graphics.h\n+ * for details of formats and valid dataSpace values for each format.\n+ *\n+ * Always set by the camera service. The dataspace values are set\n+ * using the V0 dataspace definitions in graphics.h\n+ */\n+ android_dataspace_t data_space;\n+\n+ /**\n+ * The required output rotation of the stream, one of\n+ * the camera3_stream_rotation_t values. This must be inspected by HAL along\n+ * with stream width and height. For example, if the rotation is 90 degree\n+ * and the stream width and height is 720 and 1280 respectively, camera service\n+ * will supply buffers of size 720x1280, and HAL should capture a 1280x720 image\n+ * and rotate the image by 90 degree counterclockwise. The rotation field is\n+ * no-op when the stream type is input. Camera HAL must ignore the rotation\n+ * field for an input stream.\n+ *\n+ * Always set by camera service. HAL must inspect this field during stream\n+ * combination query and return -EINVAL if it cannot perform such rotation.\n+ * HAL must always support CAMERA3_STREAM_ROTATION_0, so a\n+ * is_stream_combination_supported() call must not fail for unsupported rotation if\n+ * rotation field of all streams is CAMERA3_STREAM_ROTATION_0.\n+ *\n+ */\n+ int rotation;\n+\n+ /**\n+ * The physical camera id this stream belongs to.\n+ * Always set by camera service. If the camera device is not a logical\n+ * multi camera, or if the camera is a logical multi camera but the stream\n+ * is not a physical output stream, this field will point to a 0-length\n+ * string.\n+ *\n+ * A logical multi camera is a camera device backed by multiple physical\n+ * cameras that are also exposed to the application. And for a logical\n+ * multi camera, a physical output stream is an output stream specifically\n+ * requested on an underlying physical camera.\n+ *\n+ * For an input stream, this field is guaranteed to be a 0-length string.\n+ */\n+ const char* physical_camera_id;\n+\n+} camera_stream_t;\n+\n+/**\n+ * camera_stream_combination_t:\n+ *\n+ * A structure of stream definitions, used by is_stream_combination_supported(). This\n+ * structure defines all the input & output streams for specific camera use case.\n+ */\n+typedef struct camera_stream_combination {\n+ /**\n+ * The total number of streams by the framework. This includes\n+ * both input and output streams. The number of streams will be at least 1,\n+ * and there will be at least one output-capable stream.\n+ */\n+ uint32_t num_streams;\n+\n+ /**\n+ * An array of camera streams, defining the input/output\n+ * stream combination for the camera HAL device.\n+ *\n+ * At most one input-capable stream may be defined.\n+ *\n+ * At least one output-capable stream must be defined.\n+ */\n+ camera_stream_t *streams;\n+\n+ /**\n+ * The operation mode of streams in this stream combination, one of the value\n+ * defined in camera3_stream_configuration_mode_t.\n+ *\n+ */\n+ uint32_t operation_mode;\n+\n+} camera_stream_combination_t;\n+\n+/**\n+ * device_state_t:\n+ *\n+ * Possible physical states of the overall device, for use with\n+ * notify_device_state_change.\n+ */\n+typedef enum device_state {\n+ /**\n+ * The device is in its normal physical configuration. This is the default if the\n+ * device does not support multiple different states.\n+ */\n+ NORMAL = 0,\n+\n+ /**\n+ * Camera device(s) facing backward are covered.\n+ */\n+ BACK_COVERED = 1 << 0,\n+\n+ /**\n+ * Camera device(s) facing foward are covered.\n+ */\n+ FRONT_COVERED = 1 << 1,\n+\n+ /**\n+ * The device is folded. If not set, the device is unfolded or does not\n+ * support folding.\n+ *\n+ * The exact point when this status change happens during the folding\n+ * operation is device-specific.\n+ */\n+ FOLDED = 1 << 2,\n+\n+ /**\n+ * First vendor-specific device state. All bits above and including this one\n+ * are for vendor state values. Values below this one must only be used\n+ * for framework-defined states.\n+ */\n+ VENDOR_STATE_START = 1LL << 32\n+\n+} device_state_t;\n+\n typedef struct camera_module {\n /**\n * Common methods of the camera module. This *must* be the first member of\n@@ -910,8 +1114,104 @@ typedef struct camera_module {\n */\n int (*init)();\n \n+ /**\n+ * get_physical_camera_info:\n+ *\n+ * Return the static metadata for a physical camera as a part of a logical\n+ * camera device. This function is only called for those physical camera\n+ * ID(s) that are not exposed independently. In other words, camera_id will\n+ * be greater or equal to the return value of get_number_of_cameras().\n+ *\n+ * Return values:\n+ *\n+ * 0: On a successful operation\n+ *\n+ * -ENODEV: The information cannot be provided due to an internal\n+ * error.\n+ *\n+ * -EINVAL: The input arguments are invalid, i.e. the id is invalid,\n+ * and/or the module is invalid.\n+ *\n+ * Version information (based on camera_module_t.common.module_api_version):\n+ *\n+ * CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2/2_3/2_4:\n+ * Not provided by HAL module. Framework will not call this function.\n+ *\n+ * CAMERA_MODULE_API_VERSION_2_5 or higher:\n+ * If any of the camera devices accessible through this camera module is\n+ * a logical multi-camera, and at least one of the physical cameras isn't\n+ * a stand-alone camera device, this function will be called by the camera\n+ * framework. Calling this function with invalid physical_camera_id will\n+ * get -EINVAL, and NULL static_metadata.\n+ */\n+ int (*get_physical_camera_info)(int physical_camera_id,\n+ camera_metadata_t **static_metadata);\n+\n+ /**\n+ * is_stream_combination_supported:\n+ *\n+ * Check for device support of specific camera stream combination.\n+ *\n+ * Return values:\n+ *\n+ * 0: In case the stream combination is supported.\n+ *\n+ * -EINVAL: In case the stream combination is not supported.\n+ *\n+ * -ENOSYS: In case stream combination query is not supported.\n+ *\n+ * Version information (based on camera_module_t.common.module_api_version):\n+ *\n+ * CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2/2_3/2_4:\n+ * Not provided by HAL module. Framework will not call this function.\n+ *\n+ * CAMERA_MODULE_API_VERSION_2_5 or higher:\n+ * Valid to be called by the framework.\n+ */\n+ int (*is_stream_combination_supported)(int camera_id,\n+ const camera_stream_combination_t *streams);\n+\n+ /**\n+ * notify_device_state_change:\n+ *\n+ * Notify the camera module that the state of the overall device has\n+ * changed in some way that the HAL may want to know about.\n+ *\n+ * For example, a physical shutter may have been uncovered or covered,\n+ * or a camera may have been covered or uncovered by an add-on keyboard\n+ * or other accessory.\n+ *\n+ * The state is a bitfield of potential states, and some physical configurations\n+ * could plausibly correspond to multiple different combinations of state bits.\n+ * The HAL must ignore any state bits it is not actively using to determine\n+ * the appropriate camera configuration.\n+ *\n+ * For example, on some devices the FOLDED state could mean that\n+ * backward-facing cameras are covered by the fold, so FOLDED by itself implies\n+ * BACK_COVERED. But other devices may support folding but not cover any cameras\n+ * when folded, so for those FOLDED would not imply any of the other flags.\n+ * Since these relationships are very device-specific, it is difficult to specify\n+ * a comprehensive policy. But as a recommendation, it is suggested that if a flag\n+ * necessarily implies other flags are set as well, then those flags should be set.\n+ * So even though FOLDED would be enough to infer BACK_COVERED on some devices, the\n+ * BACK_COVERED flag should also be set for clarity.\n+ *\n+ * This method may be invoked by the HAL client at any time. It must not\n+ * cause any active camera device sessions to be closed, but may dynamically\n+ * change which physical camera a logical multi-camera is using for its\n+ * active and future output.\n+ *\n+ * The method must be invoked by the HAL client at least once before the\n+ * client calls ICameraDevice::open on any camera device interfaces listed\n+ * by this provider, to establish the initial device state.\n+ *\n+ * Note that the deviceState is 64-bit bitmask, with system defined states in\n+ * lower 32-bit and vendor defined states in upper 32-bit.\n+ */\n+ void (*notify_device_state_change)(uint64_t deviceState);\n+\n /* reserved for future use */\n- void* reserved[5];\n+ void* reserved[2];\n } camera_module_t;\n \n __END_DECLS\ndiff --git a/include/android/hardware/libhardware/include/hardware/gralloc.h b/include/android/hardware/libhardware/include/hardware/gralloc.h\nindex 01a7672747..2c5514b8ec 100644\n--- a/include/android/hardware/libhardware/include/hardware/gralloc.h\n+++ b/include/android/hardware/libhardware/include/hardware/gralloc.h\n@@ -19,8 +19,8 @@\n #ifndef ANDROID_GRALLOC_INTERFACE_H\n #define ANDROID_GRALLOC_INTERFACE_H\n \n-#include <hardware/hardware.h>\n #include <system/graphics.h>\n+#include <hardware/hardware.h>\n \n #include <stdint.h>\n #include <sys/cdefs.h>\n@@ -28,8 +28,8 @@\n \n #include <cutils/native_handle.h>\n \n-#include <hardware/fb.h>\n #include <hardware/hardware.h>\n+#include <hardware/fb.h>\n \n __BEGIN_DECLS\n \n@@ -132,6 +132,9 @@ enum {\n * handle this flag. */\n GRALLOC_USAGE_FOREIGN_BUFFERS = 0x00200000U,\n \n+ /* buffer will be used as input to HW HEIC image encoder */\n+ GRALLOC_USAGE_HW_IMAGE_ENCODER = 0x08000000U,\n+\n /* Mask of all flags which could be passed to a gralloc module for buffer\n * allocation. Any flags not in this mask do not need to be handled by\n * gralloc modules. */\n@@ -154,20 +157,20 @@ enum {\n */\n typedef struct gralloc_module_t {\n struct hw_module_t common;\n- \n+\n /*\n * (*registerBuffer)() must be called before a buffer_handle_t that has not\n * been created with (*alloc_device_t::alloc)() can be used.\n- * \n+ *\n * This is intended to be used with buffer_handle_t's that have been\n * received in this process through IPC.\n- * \n+ *\n * This function checks that the handle is indeed a valid one and prepares\n * it for use with (*lock)() and (*unlock)().\n- * \n- * It is not necessary to call (*registerBuffer)() on a handle created \n+ *\n+ * It is not necessary to call (*registerBuffer)() on a handle created\n * with (*alloc_device_t::alloc)().\n- * \n+ *\n * returns an error if this buffer_handle_t is not valid.\n */\n int (*registerBuffer)(struct gralloc_module_t const* module,\n@@ -177,25 +180,25 @@ typedef struct gralloc_module_t {\n * (*unregisterBuffer)() is called once this handle is no longer needed in\n * this process. After this call, it is an error to call (*lock)(),\n * (*unlock)(), or (*registerBuffer)().\n- * \n+ *\n * This function doesn't close or free the handle itself; this is done\n * by other means, usually through libcutils's native_handle_close() and\n- * native_handle_free(). \n- * \n+ * native_handle_free().\n+ *\n * It is an error to call (*unregisterBuffer)() on a buffer that wasn't\n * explicitly registered first.\n */\n int (*unregisterBuffer)(struct gralloc_module_t const* module,\n buffer_handle_t handle);\n- \n+\n /*\n- * The (*lock)() method is called before a buffer is accessed for the \n+ * The (*lock)() method is called before a buffer is accessed for the\n * specified usage. This call may block, for instance if the h/w needs\n * to finish rendering or if CPU caches need to be synchronized.\n- * \n- * The caller promises to modify only pixels in the area specified \n+ *\n+ * The caller promises to modify only pixels in the area specified\n * by (l,t,w,h).\n- * \n+ *\n * The content of the buffer outside of the specified area is NOT modified\n * by this call.\n *\n@@ -208,9 +211,9 @@ typedef struct gralloc_module_t {\n *\n * THREADING CONSIDERATIONS:\n *\n- * It is legal for several different threads to lock a buffer from \n+ * It is legal for several different threads to lock a buffer from\n * read access, none of the threads are blocked.\n- * \n+ *\n * However, locking a buffer simultaneously for write or read/write is\n * undefined, but:\n * - shall not result in termination of the process\n@@ -219,21 +222,21 @@ typedef struct gralloc_module_t {\n * into an indeterminate state.\n *\n * If the buffer was created with a usage mask incompatible with the\n- * requested usage flags here, -EINVAL is returned. \n- * \n+ * requested usage flags here, -EINVAL is returned.\n+ *\n */\n- \n+\n int (*lock)(struct gralloc_module_t const* module,\n buffer_handle_t handle, int usage,\n int l, int t, int w, int h,\n void** vaddr);\n \n- \n+\n /*\n * The (*unlock)() method must be called after all changes to the buffer\n * are completed.\n */\n- \n+\n int (*unlock)(struct gralloc_module_t const* module,\n buffer_handle_t handle);\n \n@@ -312,8 +315,38 @@ typedef struct gralloc_module_t {\n int l, int t, int w, int h,\n struct android_ycbcr *ycbcr, int fenceFd);\n \n+ /* getTransportSize(..., outNumFds, outNumInts)\n+ * This function is mandatory on devices running IMapper2.1 or higher.\n+ *\n+ * Get the transport size of a buffer. An imported buffer handle is a raw\n+ * buffer handle with the process-local runtime data appended. This\n+ * function, for example, allows a caller to omit the process-local\n+ * runtime data at the tail when serializing the imported buffer handle.\n+ *\n+ * Note that a client might or might not omit the process-local runtime\n+ * data when sending an imported buffer handle. The mapper must support\n+ * both cases on the receiving end.\n+ */\n+ int32_t (*getTransportSize)(\n+ struct gralloc_module_t const* module, buffer_handle_t handle, uint32_t *outNumFds,\n+ uint32_t *outNumInts);\n+\n+ /* validateBufferSize(..., w, h, format, usage, stride)\n+ * This function is mandatory on devices running IMapper2.1 or higher.\n+ *\n+ * Validate that the buffer can be safely accessed by a caller who assumes\n+ * the specified width, height, format, usage, and stride. This must at least validate\n+ * that the buffer size is large enough. Validating the buffer against\n+ * individual buffer attributes is optional.\n+ */\n+ int32_t (*validateBufferSize)(\n+ struct gralloc_module_t const* device, buffer_handle_t handle,\n+ uint32_t w, uint32_t h, int32_t format, int usage,\n+ uint32_t stride);\n+\n /* reserved for future use */\n- void* reserved_proc[3];\n+ void* reserved_proc[1];\n+\n } gralloc_module_t;\n \n /*****************************************************************************/\n@@ -326,32 +359,32 @@ typedef struct gralloc_module_t {\n typedef struct alloc_device_t {\n struct hw_device_t common;\n \n- /* \n+ /*\n * (*alloc)() Allocates a buffer in graphic memory with the requested\n * parameters and returns a buffer_handle_t and the stride in pixels to\n * allow the implementation to satisfy hardware constraints on the width\n- * of a pixmap (eg: it may have to be multiple of 8 pixels). \n+ * of a pixmap (eg: it may have to be multiple of 8 pixels).\n * The CALLER TAKES OWNERSHIP of the buffer_handle_t.\n *\n * If format is HAL_PIXEL_FORMAT_YCbCr_420_888, the returned stride must be\n * 0, since the actual strides are available from the android_ycbcr\n * structure.\n- * \n+ *\n * Returns 0 on success or -errno on error.\n */\n- \n+\n int (*alloc)(struct alloc_device_t* dev,\n int w, int h, int format, int usage,\n buffer_handle_t* handle, int* stride);\n \n /*\n- * (*free)() Frees a previously allocated buffer. \n+ * (*free)() Frees a previously allocated buffer.\n * Behavior is undefined if the buffer is still mapped in any process,\n * but shall not result in termination of the program or security breaches\n * (allowing a process to get access to another process' buffers).\n * THIS FUNCTION TAKES OWNERSHIP of the buffer_handle_t which becomes\n- * invalid after the call. \n- * \n+ * invalid after the call.\n+ *\n * Returns 0 on success or -errno on error.\n */\n int (*free)(struct alloc_device_t* dev,\n@@ -369,9 +402,9 @@ typedef struct alloc_device_t {\n \n /** convenience API for opening and closing a supported device */\n \n-static inline int gralloc_open(const struct hw_module_t* module, \n+static inline int gralloc_open(const struct hw_module_t* module,\n struct alloc_device_t** device) {\n- return module->methods->open(module, \n+ return module->methods->open(module,\n GRALLOC_HARDWARE_GPU0, TO_HW_DEVICE_T_OPEN(device));\n }\n \ndiff --git a/include/android/metadata/camera_metadata_hidden.h b/include/android/metadata/camera_metadata_hidden.h\nindex 91b11e4346..5629f7981b 100644\n--- a/include/android/metadata/camera_metadata_hidden.h\n+++ b/include/android/metadata/camera_metadata_hidden.h\n@@ -18,6 +18,9 @@\n #ifndef SYSTEM_MEDIA_PRIVATE_INCLUDE_CAMERA_METADATA_HIDDEN_H\n #define SYSTEM_MEDIA_PRIVATE_INCLUDE_CAMERA_METADATA_HIDDEN_H\n \n+#include <stdint.h>\n+#include <cutils/compiler.h>\n+#include <system/camera_metadata.h>\n #include <system/camera_vendor_tags.h>\n \n /**\n@@ -35,14 +38,6 @@ extern \"C\" {\n #endif\n /** **These are private functions for use only by the camera framework.** **/\n \n-/**\n- * Set the global vendor tag operations object used to define vendor tag\n- * structure when parsing camera metadata with functions defined in\n- * system/media/camera/include/camera_metadata.h.\n- */\n-ANDROID_API\n-int set_camera_metadata_vendor_ops(const vendor_tag_ops_t *query_ops);\n-\n /**\n * Set the global vendor tag cache operations object used to define vendor tag\n * structure when parsing camera metadata with functions defined in\ndiff --git a/include/android/metadata/system/camera_metadata.h b/include/android/metadata/system/camera_metadata.h\nindex 1672b09ee9..44c836144f 100644\n--- a/include/android/metadata/system/camera_metadata.h\n+++ b/include/android/metadata/system/camera_metadata.h\n@@ -18,13 +18,13 @@\n #ifndef SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_METADATA_H\n #define SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_METADATA_H\n \n+#include <sys/cdefs.h>\n #include <string.h>\n #include <stdint.h>\n #include <cutils/compiler.h>\n+#include <system/camera_vendor_tags.h>\n \n-#ifdef __cplusplus\n-extern \"C\" {\n-#endif\n+__BEGIN_DECLS\n \n /**\n * Tag hierarchy and enum definitions for camera_metadata_entry\n@@ -287,7 +287,7 @@ enum {\n };\n \n /**\n- * Validate that a metadata is structurally sane. That is, its internal\n+ * Validate that a metadata is structurally correct. That is, its internal\n * state is such that we won't get buffer overflows or run into other\n * 'impossible' issues when calling the other API functions.\n *\n@@ -481,6 +481,12 @@ ANDROID_API\n int get_local_camera_metadata_tag_type(uint32_t tag,\n const camera_metadata_t *meta);\n \n+/**\n+ * Retrieve all tags that need permission.\n+ */\n+ANDROID_API\n+const int32_t *get_camera_metadata_permission_needed(uint32_t *tag_count);\n+\n /**\n * Set up vendor-specific tag query methods. These are needed to properly add\n * entries with vendor-specified tags and to use the\n@@ -574,8 +580,29 @@ int camera_metadata_enum_snprint(uint32_t tag,\n char *dst,\n size_t size);\n \n-#ifdef __cplusplus\n-}\n-#endif\n+/**\n+ * Retrieves back the binary value of a given tag enum entry name. Only works for enum tags.\n+ * Returns 0 on success, -1 on failure.\n+ */\n+ANDROID_API\n+int camera_metadata_enum_value(uint32_t tag /*in*/,\n+ const char* name /*in*/,\n+ size_t size /*in*/,\n+ uint32_t *value /*out*/);\n+\n+/**\n+ * Set the global vendor tag operations object used to define vendor tag\n+ * structure when parsing camera metadata with functions defined in\n+ * system/media/camera/include/camera_metadata.h.\n+ *\n+ * Note: this is moved from system/media/private/camera/include/camera_metadata_hidden.h.\n+ * Every process that needs to read or write vendor tags has to call this method before\n+ * attempting to use them. The OS will handle standard app and system service processes,\n+ * but OEMs may need to invoke this method in HALs that process camera data.\n+ */\n+ANDROID_API\n+int set_camera_metadata_vendor_ops(const vendor_tag_ops_t *query_ops);\n+\n+__END_DECLS\n \n #endif\ndiff --git a/include/android/metadata/system/camera_metadata_tags.h b/include/android/metadata/system/camera_metadata_tags.h\nindex e0f2f5a37a..af6d5258ae 100644\n--- a/include/android/metadata/system/camera_metadata_tags.h\n+++ b/include/android/metadata/system/camera_metadata_tags.h\n@@ -64,6 +64,14 @@ typedef enum camera_metadata_section {\n ANDROID_DEPTH,\n ANDROID_LOGICAL_MULTI_CAMERA,\n ANDROID_DISTORTION_CORRECTION,\n+ ANDROID_HEIC,\n+ ANDROID_HEIC_INFO,\n+ ANDROID_AUTOMOTIVE,\n+ ANDROID_AUTOMOTIVE_LENS,\n+ ANDROID_EXTENSION,\n+ ANDROID_JPEGR,\n+ ANDROID_SHARED_SESSION,\n+ ANDROID_DESKTOP_EFFECTS,\n ANDROID_SECTION_COUNT,\n \n VENDOR_SECTION = 0x8000\n@@ -106,6 +114,14 @@ typedef enum camera_metadata_section_start {\n ANDROID_DISTORTION_CORRECTION_START\n = ANDROID_DISTORTION_CORRECTION\n << 16,\n+ ANDROID_HEIC_START = ANDROID_HEIC << 16,\n+ ANDROID_HEIC_INFO_START = ANDROID_HEIC_INFO << 16,\n+ ANDROID_AUTOMOTIVE_START = ANDROID_AUTOMOTIVE << 16,\n+ ANDROID_AUTOMOTIVE_LENS_START = ANDROID_AUTOMOTIVE_LENS << 16,\n+ ANDROID_EXTENSION_START = ANDROID_EXTENSION << 16,\n+ ANDROID_JPEGR_START = ANDROID_JPEGR << 16,\n+ ANDROID_SHARED_SESSION_START = ANDROID_SHARED_SESSION << 16,\n+ ANDROID_DESKTOP_EFFECTS_START = ANDROID_DESKTOP_EFFECTS << 16,\n VENDOR_SECTION_START = VENDOR_SECTION << 16\n } camera_metadata_section_start_t;\n \n@@ -123,6 +139,10 @@ typedef enum camera_metadata_tag {\n ANDROID_COLOR_CORRECTION_ABERRATION_MODE, // enum | public | HIDL v3.2\n ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,\n // byte[] | public | HIDL v3.2\n+ ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE, // int32 | public | HIDL v3.11\n+ ANDROID_COLOR_CORRECTION_COLOR_TINT, // int32 | public | HIDL v3.11\n+ ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE, // int32[] | public | HIDL v3.11\n+ ANDROID_COLOR_CORRECTION_AVAILABLE_MODES, // byte[] | public | HIDL v3.11\n ANDROID_COLOR_CORRECTION_END,\n \n ANDROID_CONTROL_AE_ANTIBANDING_MODE = // enum | public | HIDL v3.2\n@@ -171,6 +191,30 @@ typedef enum camera_metadata_tag {\n ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST, // int32 | public | HIDL v3.2\n ANDROID_CONTROL_ENABLE_ZSL, // enum | public | HIDL v3.2\n ANDROID_CONTROL_AF_SCENE_CHANGE, // enum | public | HIDL v3.3\n+ ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES,\n+ // int32[] | ndk_public | HIDL v3.5\n+ ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES,\n+ // float[] | ndk_public | HIDL v3.5\n+ ANDROID_CONTROL_EXTENDED_SCENE_MODE, // enum | public | HIDL v3.5\n+ ANDROID_CONTROL_ZOOM_RATIO_RANGE, // float[] | public | HIDL v3.5\n+ ANDROID_CONTROL_ZOOM_RATIO, // float | public | HIDL v3.5\n+ ANDROID_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS_MAXIMUM_RESOLUTION,\n+ // int32[] | hidden | HIDL v3.6\n+ ANDROID_CONTROL_AF_REGIONS_SET, // enum | fwk_only\n+ ANDROID_CONTROL_AE_REGIONS_SET, // enum | fwk_only\n+ ANDROID_CONTROL_AWB_REGIONS_SET, // enum | fwk_only\n+ ANDROID_CONTROL_SETTINGS_OVERRIDE, // enum | public | HIDL v3.9\n+ ANDROID_CONTROL_AVAILABLE_SETTINGS_OVERRIDES, // int32[] | public | HIDL v3.9\n+ ANDROID_CONTROL_SETTINGS_OVERRIDING_FRAME_NUMBER, // int32 | system | HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING, // enum | public | HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING_AVAILABLE, // enum | public | HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING_STATE, // enum | public | HIDL v3.9\n+ ANDROID_CONTROL_LOW_LIGHT_BOOST_INFO_LUMINANCE_RANGE,\n+ // float[] | public | HIDL v3.10\n+ ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE, // enum | public | HIDL v3.10\n+ ANDROID_CONTROL_ZOOM_METHOD, // enum | fwk_public\n+ ANDROID_CONTROL_AE_PRIORITY_MODE, // enum | public | HIDL v3.11\n+ ANDROID_CONTROL_AE_AVAILABLE_PRIORITY_MODES, // byte[] | public | HIDL v3.11\n ANDROID_CONTROL_END,\n \n ANDROID_DEMOSAIC_MODE = // enum | system | HIDL v3.2\n@@ -190,11 +234,18 @@ typedef enum camera_metadata_tag {\n ANDROID_FLASH_COLOR_TEMPERATURE, // byte | system | HIDL v3.2\n ANDROID_FLASH_MAX_ENERGY, // byte | system | HIDL v3.2\n ANDROID_FLASH_STATE, // enum | public | HIDL v3.2\n+ ANDROID_FLASH_STRENGTH_LEVEL, // int32 | public | HIDL v3.10\n+ ANDROID_FLASH_SINGLE_STRENGTH_MAX_LEVEL, // int32 | public | HIDL v3.10\n+ ANDROID_FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL, // int32 | public | HIDL v3.10\n+ ANDROID_FLASH_TORCH_STRENGTH_MAX_LEVEL, // int32 | public | HIDL v3.10\n+ ANDROID_FLASH_TORCH_STRENGTH_DEFAULT_LEVEL, // int32 | public | HIDL v3.10\n ANDROID_FLASH_END,\n \n ANDROID_FLASH_INFO_AVAILABLE = // enum | public | HIDL v3.2\n ANDROID_FLASH_INFO_START,\n ANDROID_FLASH_INFO_CHARGE_DURATION, // int64 | system | HIDL v3.2\n+ ANDROID_FLASH_INFO_STRENGTH_MAXIMUM_LEVEL, // int32 | public | HIDL v3.8\n+ ANDROID_FLASH_INFO_STRENGTH_DEFAULT_LEVEL, // int32 | public | HIDL v3.8\n ANDROID_FLASH_INFO_END,\n \n ANDROID_HOT_PIXEL_MODE = // enum | public | HIDL v3.2\n@@ -230,6 +281,9 @@ typedef enum camera_metadata_tag {\n ANDROID_LENS_RADIAL_DISTORTION, // float[] | public | HIDL v3.2\n ANDROID_LENS_POSE_REFERENCE, // enum | public | HIDL v3.3\n ANDROID_LENS_DISTORTION, // float[] | public | HIDL v3.3\n+ ANDROID_LENS_DISTORTION_MAXIMUM_RESOLUTION, // float[] | public | HIDL v3.6\n+ ANDROID_LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION,\n+ // float[] | public | HIDL v3.6\n ANDROID_LENS_END,\n \n ANDROID_LENS_INFO_AVAILABLE_APERTURES = // float[] | public | HIDL v3.2\n@@ -277,7 +331,15 @@ typedef enum camera_metadata_tag {\n ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS, // int32[] | ndk_public | HIDL v3.2\n ANDROID_REQUEST_AVAILABLE_SESSION_KEYS, // int32[] | ndk_public | HIDL v3.3\n ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS,\n- // int32[] | hidden | HIDL v3.3\n+ // int32[] | ndk_public | HIDL v3.3\n+ ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION,\n+ // int32[] | hidden | HIDL v3.4\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP,\n+ // enum[] | ndk_public | HIDL v3.8\n+ ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE,\n+ // int64 | java_public | HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP,\n+ // enum[] | ndk_public | HIDL v3.9\n ANDROID_REQUEST_END,\n \n ANDROID_SCALER_CROP_REGION = // int32[] | public | HIDL v3.2\n@@ -295,6 +357,29 @@ typedef enum camera_metadata_tag {\n ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, // int64[] | ndk_public | HIDL v3.2\n ANDROID_SCALER_AVAILABLE_STALL_DURATIONS, // int64[] | ndk_public | HIDL v3.2\n ANDROID_SCALER_CROPPING_TYPE, // enum | public | HIDL v3.2\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS,\n+ // enum[] | ndk_public | HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP,\n+ // int32 | ndk_public | HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_ROTATE_AND_CROP_MODES, // byte[] | public | HIDL v3.5\n+ ANDROID_SCALER_ROTATE_AND_CROP, // enum | public | HIDL v3.5\n+ ANDROID_SCALER_DEFAULT_SECURE_IMAGE_SIZE, // int32[] | public | HIDL v3.6\n+ ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS,\n+ // enum[] | ndk_public | HIDL v3.6\n+ ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,\n+ // enum[] | ndk_public | HIDL v3.6\n+ ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n+ ANDROID_SCALER_AVAILABLE_STALL_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n+ ANDROID_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP_MAXIMUM_RESOLUTION,\n+ // int32 | hidden | HIDL v3.6\n+ ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED, // enum | ndk_public | HIDL v3.6\n+ ANDROID_SCALER_CROP_REGION_SET, // enum | fwk_only\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES, // enum[] | public | HIDL v3.8\n+ ANDROID_SCALER_RAW_CROP_REGION, // int32[] | public | HIDL v3.9\n+ ANDROID_SCALER_CONCURRENT_MULTI_RESOLUTION_FORMATS,\n+ // int32[] | ndk_public | HIDL v3.12\n ANDROID_SCALER_END,\n \n ANDROID_SENSOR_EXPOSURE_TIME = // int64 | public | HIDL v3.2\n@@ -329,6 +414,10 @@ typedef enum camera_metadata_tag {\n ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL, // float[] | public | HIDL v3.2\n ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL, // int32 | public | HIDL v3.2\n ANDROID_SENSOR_OPAQUE_RAW_SIZE, // int32[] | system | HIDL v3.2\n+ ANDROID_SENSOR_OPAQUE_RAW_SIZE_MAXIMUM_RESOLUTION,// int32[] | system | HIDL v3.6\n+ ANDROID_SENSOR_PIXEL_MODE, // enum | public | HIDL v3.6\n+ ANDROID_SENSOR_RAW_BINNING_FACTOR_USED, // enum | public | HIDL v3.6\n+ ANDROID_SENSOR_READOUT_TIMESTAMP, // enum | java_public | HIDL v3.8\n ANDROID_SENSOR_END,\n \n ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE = // int32[] | public | HIDL v3.2\n@@ -344,6 +433,13 @@ typedef enum camera_metadata_tag {\n ANDROID_SENSOR_INFO_LENS_SHADING_APPLIED, // enum | public | HIDL v3.2\n ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE,\n // int32[] | public | HIDL v3.2\n+ ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION,\n+ // int32[] | public | HIDL v3.6\n+ ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION,\n+ // int32[] | public | HIDL v3.6\n+ ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION,\n+ // int32[] | public | HIDL v3.6\n+ ANDROID_SENSOR_INFO_BINNING_FACTOR, // int32[] | public | HIDL v3.6\n ANDROID_SENSOR_INFO_END,\n \n ANDROID_SHADING_MODE = // enum | public | HIDL v3.2\n@@ -374,9 +470,11 @@ typedef enum camera_metadata_tag {\n ANDROID_STATISTICS_OIS_TIMESTAMPS, // int64[] | ndk_public | HIDL v3.3\n ANDROID_STATISTICS_OIS_X_SHIFTS, // float[] | ndk_public | HIDL v3.3\n ANDROID_STATISTICS_OIS_Y_SHIFTS, // float[] | ndk_public | HIDL v3.3\n+ ANDROID_STATISTICS_LENS_INTRINSIC_TIMESTAMPS, // int64[] | ndk_public | HIDL v3.10\n+ ANDROID_STATISTICS_LENS_INTRINSIC_SAMPLES, // float[] | ndk_public | HIDL v3.10\n ANDROID_STATISTICS_END,\n \n- ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES = \n+ ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES =\n // byte[] | public | HIDL v3.2\n ANDROID_STATISTICS_INFO_START,\n ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT, // int32 | system | HIDL v3.2\n@@ -410,6 +508,11 @@ typedef enum camera_metadata_tag {\n ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL = // enum | public | HIDL v3.2\n ANDROID_INFO_START,\n ANDROID_INFO_VERSION, // byte | public | HIDL v3.3\n+ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION, // enum | system | HIDL v3.4\n+ ANDROID_INFO_DEVICE_STATE_ORIENTATIONS, // int64[] | ndk_public | HIDL v3.7\n+ ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION, // enum | fwk_java_public\n+ ANDROID_INFO_DEVICE_ID, // int32 | fwk_only\n+ ANDROID_INFO_DEVICE_TYPE, // enum | public | HIDL v3.12\n ANDROID_INFO_END,\n \n ANDROID_BLACK_LEVEL_LOCK = // enum | public | HIDL v3.2\n@@ -433,11 +536,35 @@ typedef enum camera_metadata_tag {\n ANDROID_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS,// int64[] | ndk_public | HIDL v3.2\n ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS, // int64[] | ndk_public | HIDL v3.2\n ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE, // enum | public | HIDL v3.2\n+ ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS,\n+ // int32[] | ndk_public | HIDL v3.4\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS,\n+ // enum[] | ndk_public | HIDL v3.4\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS,\n+ // int64[] | ndk_public | HIDL v3.4\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS,\n+ // int64[] | ndk_public | HIDL v3.4\n+ ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,\n+ // enum[] | ndk_public | HIDL v3.6\n+ ANDROID_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n+ ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,\n+ // enum[] | ndk_public | HIDL v3.6\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n ANDROID_DEPTH_END,\n \n- ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS = // byte[] | hidden | HIDL v3.3\n+ ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS = // byte[] | ndk_public | HIDL v3.3\n ANDROID_LOGICAL_MULTI_CAMERA_START,\n ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE, // enum | public | HIDL v3.3\n+ ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID, // byte | public | HIDL v3.4\n+ ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_SENSOR_CROP_REGION,\n+ // int32[] | public | HIDL v3.10\n+ ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS, // enum | public | HIDL v3.12\n ANDROID_LOGICAL_MULTI_CAMERA_END,\n \n ANDROID_DISTORTION_CORRECTION_MODE = // enum | public | HIDL v3.3\n@@ -445,6 +572,78 @@ typedef enum camera_metadata_tag {\n ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES, // byte[] | public | HIDL v3.3\n ANDROID_DISTORTION_CORRECTION_END,\n \n+ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS =\n+ // enum[] | ndk_public | HIDL v3.4\n+ ANDROID_HEIC_START,\n+ ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS, // int64[] | ndk_public | HIDL v3.4\n+ ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS, // int64[] | ndk_public | HIDL v3.4\n+ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,\n+ // enum[] | ndk_public | HIDL v3.6\n+ ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n+ ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.6\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS,\n+ // enum[] | ndk_public | HIDL v3.11\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS,\n+ // int64[] | ndk_public | HIDL v3.11\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS,\n+ // int64[] | ndk_public | HIDL v3.11\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,\n+ // enum[] | ndk_public | HIDL v3.11\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.11\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.11\n+ ANDROID_HEIC_END,\n+\n+ ANDROID_HEIC_INFO_SUPPORTED = // enum | system | HIDL v3.4\n+ ANDROID_HEIC_INFO_START,\n+ ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT, // byte | system | HIDL v3.4\n+ ANDROID_HEIC_INFO_END,\n+\n+ ANDROID_AUTOMOTIVE_LOCATION = // enum | public | HIDL v3.8\n+ ANDROID_AUTOMOTIVE_START,\n+ ANDROID_AUTOMOTIVE_END,\n+\n+ ANDROID_AUTOMOTIVE_LENS_FACING = // enum[] | public | HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_START,\n+ ANDROID_AUTOMOTIVE_LENS_END,\n+\n+ ANDROID_EXTENSION_STRENGTH = // int32 | extension_passthrough | HIDL v3.9\n+ ANDROID_EXTENSION_START,\n+ ANDROID_EXTENSION_CURRENT_TYPE, // int32 | fwk_java_public\n+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR, // enum | public | HIDL v3.11\n+ ANDROID_EXTENSION_END,\n+\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS =\n+ // enum[] | ndk_public | HIDL v3.9\n+ ANDROID_JPEGR_START,\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS,\n+ // int64[] | ndk_public | HIDL v3.9\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS, // int64[] | ndk_public | HIDL v3.9\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,\n+ // enum[] | ndk_public | HIDL v3.9\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.9\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS_MAXIMUM_RESOLUTION,\n+ // int64[] | ndk_public | HIDL v3.9\n+ ANDROID_JPEGR_END,\n+\n+ ANDROID_SHARED_SESSION_COLOR_SPACE = // enum | fwk_only\n+ ANDROID_SHARED_SESSION_START,\n+ ANDROID_SHARED_SESSION_OUTPUT_CONFIGURATIONS, // int64[] | fwk_only\n+ ANDROID_SHARED_SESSION_END,\n+\n+ ANDROID_DESKTOP_EFFECTS_CAPABILITIES = // enum[] | system | HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_START,\n+ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODES, // byte[] | system | HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE, // enum | system | HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE, // enum | system | HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_STRENGTH, // byte | system | HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE, // enum | system | HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_END,\n+\n } camera_metadata_tag_t;\n \n /**\n@@ -456,6 +655,7 @@ typedef enum camera_metadata_enum_android_color_correction_mode {\n ANDROID_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX , // HIDL v3.2\n ANDROID_COLOR_CORRECTION_MODE_FAST , // HIDL v3.2\n ANDROID_COLOR_CORRECTION_MODE_HIGH_QUALITY , // HIDL v3.2\n+ ANDROID_COLOR_CORRECTION_MODE_CCT , // HIDL v3.11\n } camera_metadata_enum_android_color_correction_mode_t;\n \n // ANDROID_COLOR_CORRECTION_ABERRATION_MODE\n@@ -488,6 +688,7 @@ typedef enum camera_metadata_enum_android_control_ae_mode {\n ANDROID_CONTROL_AE_MODE_ON_ALWAYS_FLASH , // HIDL v3.2\n ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE , // HIDL v3.2\n ANDROID_CONTROL_AE_MODE_ON_EXTERNAL_FLASH , // HIDL v3.3\n+ ANDROID_CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY , // HIDL v3.10\n } camera_metadata_enum_android_control_ae_mode_t;\n \n // ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER\n@@ -564,6 +765,7 @@ typedef enum camera_metadata_enum_android_control_mode {\n ANDROID_CONTROL_MODE_AUTO , // HIDL v3.2\n ANDROID_CONTROL_MODE_USE_SCENE_MODE , // HIDL v3.2\n ANDROID_CONTROL_MODE_OFF_KEEP_STATE , // HIDL v3.2\n+ ANDROID_CONTROL_MODE_USE_EXTENDED_SCENE_MODE , // HIDL v3.5\n } camera_metadata_enum_android_control_mode_t;\n \n // ANDROID_CONTROL_SCENE_MODE\n@@ -596,6 +798,7 @@ typedef enum camera_metadata_enum_android_control_scene_mode {\n typedef enum camera_metadata_enum_android_control_video_stabilization_mode {\n ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF , // HIDL v3.2\n ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON , // HIDL v3.2\n+ ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION , // HIDL v3.8\n } camera_metadata_enum_android_control_video_stabilization_mode_t;\n \n // ANDROID_CONTROL_AE_STATE\n@@ -651,6 +854,78 @@ typedef enum camera_metadata_enum_android_control_af_scene_change {\n ANDROID_CONTROL_AF_SCENE_CHANGE_DETECTED , // HIDL v3.3\n } camera_metadata_enum_android_control_af_scene_change_t;\n \n+// ANDROID_CONTROL_EXTENDED_SCENE_MODE\n+typedef enum camera_metadata_enum_android_control_extended_scene_mode {\n+ ANDROID_CONTROL_EXTENDED_SCENE_MODE_DISABLED = 0, // HIDL v3.5\n+ ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE , // HIDL v3.5\n+ ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS , // HIDL v3.5\n+ ANDROID_CONTROL_EXTENDED_SCENE_MODE_VENDOR_START = 0x40, // HIDL v3.5\n+} camera_metadata_enum_android_control_extended_scene_mode_t;\n+\n+// ANDROID_CONTROL_AF_REGIONS_SET\n+typedef enum camera_metadata_enum_android_control_af_regions_set {\n+ ANDROID_CONTROL_AF_REGIONS_SET_FALSE ,\n+ ANDROID_CONTROL_AF_REGIONS_SET_TRUE ,\n+} camera_metadata_enum_android_control_af_regions_set_t;\n+\n+// ANDROID_CONTROL_AE_REGIONS_SET\n+typedef enum camera_metadata_enum_android_control_ae_regions_set {\n+ ANDROID_CONTROL_AE_REGIONS_SET_FALSE ,\n+ ANDROID_CONTROL_AE_REGIONS_SET_TRUE ,\n+} camera_metadata_enum_android_control_ae_regions_set_t;\n+\n+// ANDROID_CONTROL_AWB_REGIONS_SET\n+typedef enum camera_metadata_enum_android_control_awb_regions_set {\n+ ANDROID_CONTROL_AWB_REGIONS_SET_FALSE ,\n+ ANDROID_CONTROL_AWB_REGIONS_SET_TRUE ,\n+} camera_metadata_enum_android_control_awb_regions_set_t;\n+\n+// ANDROID_CONTROL_SETTINGS_OVERRIDE\n+typedef enum camera_metadata_enum_android_control_settings_override {\n+ ANDROID_CONTROL_SETTINGS_OVERRIDE_OFF , // HIDL v3.9\n+ ANDROID_CONTROL_SETTINGS_OVERRIDE_ZOOM , // HIDL v3.9\n+ ANDROID_CONTROL_SETTINGS_OVERRIDE_VENDOR_START = 0x4000, // HIDL v3.9\n+} camera_metadata_enum_android_control_settings_override_t;\n+\n+// ANDROID_CONTROL_AUTOFRAMING\n+typedef enum camera_metadata_enum_android_control_autoframing {\n+ ANDROID_CONTROL_AUTOFRAMING_OFF , // HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING_ON , // HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING_AUTO , // HIDL v3.9\n+} camera_metadata_enum_android_control_autoframing_t;\n+\n+// ANDROID_CONTROL_AUTOFRAMING_AVAILABLE\n+typedef enum camera_metadata_enum_android_control_autoframing_available {\n+ ANDROID_CONTROL_AUTOFRAMING_AVAILABLE_FALSE , // HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING_AVAILABLE_TRUE , // HIDL v3.9\n+} camera_metadata_enum_android_control_autoframing_available_t;\n+\n+// ANDROID_CONTROL_AUTOFRAMING_STATE\n+typedef enum camera_metadata_enum_android_control_autoframing_state {\n+ ANDROID_CONTROL_AUTOFRAMING_STATE_INACTIVE , // HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING_STATE_FRAMING , // HIDL v3.9\n+ ANDROID_CONTROL_AUTOFRAMING_STATE_CONVERGED , // HIDL v3.9\n+} camera_metadata_enum_android_control_autoframing_state_t;\n+\n+// ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE\n+typedef enum camera_metadata_enum_android_control_low_light_boost_state {\n+ ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE_INACTIVE , // HIDL v3.10\n+ ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE , // HIDL v3.10\n+} camera_metadata_enum_android_control_low_light_boost_state_t;\n+\n+// ANDROID_CONTROL_ZOOM_METHOD\n+typedef enum camera_metadata_enum_android_control_zoom_method {\n+ ANDROID_CONTROL_ZOOM_METHOD_AUTO = 0,\n+ ANDROID_CONTROL_ZOOM_METHOD_ZOOM_RATIO = 1,\n+} camera_metadata_enum_android_control_zoom_method_t;\n+\n+// ANDROID_CONTROL_AE_PRIORITY_MODE\n+typedef enum camera_metadata_enum_android_control_ae_priority_mode {\n+ ANDROID_CONTROL_AE_PRIORITY_MODE_OFF , // HIDL v3.11\n+ ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY , // HIDL v3.11\n+ ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY , // HIDL v3.11\n+} camera_metadata_enum_android_control_ae_priority_mode_t;\n+\n \n // ANDROID_DEMOSAIC_MODE\n typedef enum camera_metadata_enum_android_demosaic_mode {\n@@ -724,6 +999,8 @@ typedef enum camera_metadata_enum_android_lens_state {\n typedef enum camera_metadata_enum_android_lens_pose_reference {\n ANDROID_LENS_POSE_REFERENCE_PRIMARY_CAMERA , // HIDL v3.3\n ANDROID_LENS_POSE_REFERENCE_GYROSCOPE , // HIDL v3.3\n+ ANDROID_LENS_POSE_REFERENCE_UNDEFINED , // HIDL v3.5\n+ ANDROID_LENS_POSE_REFERENCE_AUTOMOTIVE , // HIDL v3.8\n } camera_metadata_enum_android_lens_pose_reference_t;\n \n \n@@ -780,8 +1057,75 @@ typedef enum camera_metadata_enum_android_request_available_capabilities {\n ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING , // HIDL v3.3\n ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA , // HIDL v3.3\n ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME , // HIDL v3.3\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA , // HIDL v3.4\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA , // HIDL v3.5\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING , // HIDL v3.5\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR\n+ , // HIDL v3.6\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING , // HIDL v3.6\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT , // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE , // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES , // HIDL v3.9\n } camera_metadata_enum_android_request_available_capabilities_t;\n \n+// ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP\n+typedef enum camera_metadata_enum_android_request_available_dynamic_range_profiles_map {\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD = 0x1, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HLG10 = 0x2, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10 = 0x4, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_PLUS = 0x8, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF\n+ = 0x10, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_PO\n+ = 0x20, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM\n+ = 0x40, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_PO\n+ = 0x80, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF\n+ = 0x100, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_PO\n+ = 0x200, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM\n+ = 0x400, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_PO\n+ = 0x800, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX = 0x1000, // HIDL v3.8\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD_SMPTE_2094_50\n+ = 0x2000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HLG10_SMPTE_2094_50\n+ = 0x4000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_SMPTE_2094_50\n+ = 0x8000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_PLUS_SMPTE_2094_50\n+ = 0x10000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_SMPTE_2094_50\n+ = 0x20000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_PO_SMPTE_2094_50\n+ = 0x40000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_SMPTE_2094_50\n+ = 0x80000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_PO_SMPTE_2094_50\n+ = 0x100000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_SMPTE_2094_50\n+ = 0x200000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_PO_SMPTE_2094_50\n+ = 0x400000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_SMPTE_2094_50\n+ = 0x800000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_PO_SMPTE_2094_50\n+ = 0x1000000, // HIDL v3.12\n+ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX_312 = 0x2000000, // HIDL v3.12\n+} camera_metadata_enum_android_request_available_dynamic_range_profiles_map_t;\n+\n+// ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP\n+typedef enum camera_metadata_enum_android_request_available_color_space_profiles_map {\n+ ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED = -1, // HIDL v3.9\n+ ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB = 0, // HIDL v3.9\n+ ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3 = 7, // HIDL v3.9\n+ ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020_HLG = 16, // HIDL v3.9\n+} camera_metadata_enum_android_request_available_color_space_profiles_map_t;\n+\n \n // ANDROID_SCALER_AVAILABLE_FORMATS\n typedef enum camera_metadata_enum_android_scaler_available_formats {\n@@ -792,6 +1136,10 @@ typedef enum camera_metadata_enum_android_scaler_available_formats {\n ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED = 0x22, // HIDL v3.2\n ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888 = 0x23, // HIDL v3.2\n ANDROID_SCALER_AVAILABLE_FORMATS_BLOB = 0x21, // HIDL v3.2\n+ ANDROID_SCALER_AVAILABLE_FORMATS_RAW10 = 0x25, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_FORMATS_RAW12 = 0x26, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_FORMATS_RAW14 = 0x2C, // HIDL v3.12\n+ ANDROID_SCALER_AVAILABLE_FORMATS_Y8 = 0x20203859, // HIDL v3.4\n } camera_metadata_enum_android_scaler_available_formats_t;\n \n // ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS\n@@ -806,6 +1154,79 @@ typedef enum camera_metadata_enum_android_scaler_cropping_type {\n ANDROID_SCALER_CROPPING_TYPE_FREEFORM , // HIDL v3.2\n } camera_metadata_enum_android_scaler_cropping_type_t;\n \n+// ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS\n+typedef enum camera_metadata_enum_android_scaler_available_recommended_stream_configurations {\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW\n+ = 0x0, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD\n+ = 0x1, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT\n+ = 0x2, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT\n+ = 0x3, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_ZSL = 0x4, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RAW = 0x5, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_LOW_LATENCY_SNAPSHOT\n+ = 0x6, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PUBLIC_END\n+ = 0x7, // HIDL v3.4\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_10BIT_OUTPUT\n+ = 0x8, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PUBLIC_END_3_8\n+ = 0x9, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VENDOR_START\n+ = 0x18, // HIDL v3.4\n+} camera_metadata_enum_android_scaler_available_recommended_stream_configurations_t;\n+\n+// ANDROID_SCALER_ROTATE_AND_CROP\n+typedef enum camera_metadata_enum_android_scaler_rotate_and_crop {\n+ ANDROID_SCALER_ROTATE_AND_CROP_NONE , // HIDL v3.5\n+ ANDROID_SCALER_ROTATE_AND_CROP_90 , // HIDL v3.5\n+ ANDROID_SCALER_ROTATE_AND_CROP_180 , // HIDL v3.5\n+ ANDROID_SCALER_ROTATE_AND_CROP_270 , // HIDL v3.5\n+ ANDROID_SCALER_ROTATE_AND_CROP_AUTO , // HIDL v3.5\n+} camera_metadata_enum_android_scaler_rotate_and_crop_t;\n+\n+// ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS\n+typedef enum camera_metadata_enum_android_scaler_physical_camera_multi_resolution_stream_configurations {\n+ ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_OUTPUT\n+ , // HIDL v3.6\n+ ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_INPUT\n+ , // HIDL v3.6\n+} camera_metadata_enum_android_scaler_physical_camera_multi_resolution_stream_configurations_t;\n+\n+// ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION\n+typedef enum camera_metadata_enum_android_scaler_available_stream_configurations_maximum_resolution {\n+ ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT\n+ , // HIDL v3.6\n+ ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT\n+ , // HIDL v3.6\n+} camera_metadata_enum_android_scaler_available_stream_configurations_maximum_resolution_t;\n+\n+// ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED\n+typedef enum camera_metadata_enum_android_scaler_multi_resolution_stream_supported {\n+ ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED_FALSE , // HIDL v3.6\n+ ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED_TRUE , // HIDL v3.6\n+} camera_metadata_enum_android_scaler_multi_resolution_stream_supported_t;\n+\n+// ANDROID_SCALER_CROP_REGION_SET\n+typedef enum camera_metadata_enum_android_scaler_crop_region_set {\n+ ANDROID_SCALER_CROP_REGION_SET_FALSE ,\n+ ANDROID_SCALER_CROP_REGION_SET_TRUE ,\n+} camera_metadata_enum_android_scaler_crop_region_set_t;\n+\n+// ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES\n+typedef enum camera_metadata_enum_android_scaler_available_stream_use_cases {\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT = 0x0, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW = 0x1, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_STILL_CAPTURE = 0x2, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_RECORD = 0x3, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW_VIDEO_STILL = 0x4, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_CALL = 0x5, // HIDL v3.8\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW = 0x6, // HIDL v3.9\n+ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VENDOR_START = 0x10000, // HIDL v3.8\n+} camera_metadata_enum_android_scaler_available_stream_use_cases_t;\n+\n \n // ANDROID_SENSOR_REFERENCE_ILLUMINANT1\n typedef enum camera_metadata_enum_android_sensor_reference_illuminant1 {\n@@ -837,9 +1258,28 @@ typedef enum camera_metadata_enum_android_sensor_test_pattern_mode {\n ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS , // HIDL v3.2\n ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY , // HIDL v3.2\n ANDROID_SENSOR_TEST_PATTERN_MODE_PN9 , // HIDL v3.2\n+ ANDROID_SENSOR_TEST_PATTERN_MODE_BLACK , // HIDL v3.6\n ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 256, // HIDL v3.2\n } camera_metadata_enum_android_sensor_test_pattern_mode_t;\n \n+// ANDROID_SENSOR_PIXEL_MODE\n+typedef enum camera_metadata_enum_android_sensor_pixel_mode {\n+ ANDROID_SENSOR_PIXEL_MODE_DEFAULT , // HIDL v3.6\n+ ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION , // HIDL v3.6\n+} camera_metadata_enum_android_sensor_pixel_mode_t;\n+\n+// ANDROID_SENSOR_RAW_BINNING_FACTOR_USED\n+typedef enum camera_metadata_enum_android_sensor_raw_binning_factor_used {\n+ ANDROID_SENSOR_RAW_BINNING_FACTOR_USED_TRUE , // HIDL v3.6\n+ ANDROID_SENSOR_RAW_BINNING_FACTOR_USED_FALSE , // HIDL v3.6\n+} camera_metadata_enum_android_sensor_raw_binning_factor_used_t;\n+\n+// ANDROID_SENSOR_READOUT_TIMESTAMP\n+typedef enum camera_metadata_enum_android_sensor_readout_timestamp {\n+ ANDROID_SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED , // HIDL v3.8\n+ ANDROID_SENSOR_READOUT_TIMESTAMP_HARDWARE , // HIDL v3.8\n+} camera_metadata_enum_android_sensor_readout_timestamp_t;\n+\n \n // ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT\n typedef enum camera_metadata_enum_android_sensor_info_color_filter_arrangement {\n@@ -848,6 +1288,8 @@ typedef enum camera_metadata_enum_android_sensor_info_color_filter_arrangement {\n ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG , // HIDL v3.2\n ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR , // HIDL v3.2\n ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB , // HIDL v3.2\n+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO , // HIDL v3.4\n+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR , // HIDL v3.4\n } camera_metadata_enum_android_sensor_info_color_filter_arrangement_t;\n \n // ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE\n@@ -954,6 +1396,30 @@ typedef enum camera_metadata_enum_android_info_supported_hardware_level {\n ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL , // HIDL v3.3\n } camera_metadata_enum_android_info_supported_hardware_level_t;\n \n+// ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION\n+typedef enum camera_metadata_enum_android_info_supported_buffer_management_version {\n+ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5, // HIDL v3.4\n+ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE\n+ , // HIDL v3.10\n+} camera_metadata_enum_android_info_supported_buffer_management_version_t;\n+\n+// ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION\n+typedef enum camera_metadata_enum_android_info_session_configuration_query_version {\n+ ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_UPSIDE_DOWN_CAKE\n+ = 34,\n+ ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_VANILLA_ICE_CREAM\n+ = 35,\n+ ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_BAKLAVA = 36,\n+} camera_metadata_enum_android_info_session_configuration_query_version_t;\n+\n+// ANDROID_INFO_DEVICE_TYPE\n+typedef enum camera_metadata_enum_android_info_device_type {\n+ ANDROID_INFO_DEVICE_TYPE_BUILT_IN , // HIDL v3.12\n+ ANDROID_INFO_DEVICE_TYPE_EXTERNAL , // HIDL v3.12\n+ ANDROID_INFO_DEVICE_TYPE_VIRTUAL , // HIDL v3.12\n+ ANDROID_INFO_DEVICE_TYPE_UNKNOWN , // HIDL v3.12\n+} camera_metadata_enum_android_info_device_type_t;\n+\n \n // ANDROID_BLACK_LEVEL_LOCK\n typedef enum camera_metadata_enum_android_black_level_lock {\n@@ -988,6 +1454,30 @@ typedef enum camera_metadata_enum_android_depth_depth_is_exclusive {\n ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE_TRUE , // HIDL v3.2\n } camera_metadata_enum_android_depth_depth_is_exclusive_t;\n \n+// ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS\n+typedef enum camera_metadata_enum_android_depth_available_dynamic_depth_stream_configurations {\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT\n+ , // HIDL v3.4\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT\n+ , // HIDL v3.4\n+} camera_metadata_enum_android_depth_available_dynamic_depth_stream_configurations_t;\n+\n+// ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION\n+typedef enum camera_metadata_enum_android_depth_available_depth_stream_configurations_maximum_resolution {\n+ ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT\n+ , // HIDL v3.6\n+ ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT\n+ , // HIDL v3.6\n+} camera_metadata_enum_android_depth_available_depth_stream_configurations_maximum_resolution_t;\n+\n+// ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION\n+typedef enum camera_metadata_enum_android_depth_available_dynamic_depth_stream_configurations_maximum_resolution {\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT\n+ , // HIDL v3.6\n+ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT\n+ , // HIDL v3.6\n+} camera_metadata_enum_android_depth_available_dynamic_depth_stream_configurations_maximum_resolution_t;\n+\n \n // ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE\n typedef enum camera_metadata_enum_android_logical_multi_camera_sensor_sync_type {\n@@ -995,6 +1485,12 @@ typedef enum camera_metadata_enum_android_logical_multi_camera_sensor_sync_type\n ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED , // HIDL v3.3\n } camera_metadata_enum_android_logical_multi_camera_sensor_sync_type_t;\n \n+// ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS\n+typedef enum camera_metadata_enum_android_logical_multi_camera_additional_results {\n+ ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS_OFF , // HIDL v3.12\n+ ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS_ON , // HIDL v3.12\n+} camera_metadata_enum_android_logical_multi_camera_additional_results_t;\n+\n \n // ANDROID_DISTORTION_CORRECTION_MODE\n typedef enum camera_metadata_enum_android_distortion_correction_mode {\n@@ -1004,3 +1500,134 @@ typedef enum camera_metadata_enum_android_distortion_correction_mode {\n } camera_metadata_enum_android_distortion_correction_mode_t;\n \n \n+// ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS\n+typedef enum camera_metadata_enum_android_heic_available_heic_stream_configurations {\n+ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT , // HIDL v3.4\n+ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT , // HIDL v3.4\n+} camera_metadata_enum_android_heic_available_heic_stream_configurations_t;\n+\n+// ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION\n+typedef enum camera_metadata_enum_android_heic_available_heic_stream_configurations_maximum_resolution {\n+ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT\n+ , // HIDL v3.6\n+ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT\n+ , // HIDL v3.6\n+} camera_metadata_enum_android_heic_available_heic_stream_configurations_maximum_resolution_t;\n+\n+// ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS\n+typedef enum camera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations {\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_OUTPUT\n+ , // HIDL v3.11\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_INPUT\n+ , // HIDL v3.11\n+} camera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_t;\n+\n+// ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION\n+typedef enum camera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution {\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT\n+ , // HIDL v3.11\n+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT\n+ , // HIDL v3.11\n+} camera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution_t;\n+\n+\n+// ANDROID_HEIC_INFO_SUPPORTED\n+typedef enum camera_metadata_enum_android_heic_info_supported {\n+ ANDROID_HEIC_INFO_SUPPORTED_FALSE , // HIDL v3.4\n+ ANDROID_HEIC_INFO_SUPPORTED_TRUE , // HIDL v3.4\n+} camera_metadata_enum_android_heic_info_supported_t;\n+\n+\n+// ANDROID_AUTOMOTIVE_LOCATION\n+typedef enum camera_metadata_enum_android_automotive_location {\n+ ANDROID_AUTOMOTIVE_LOCATION_INTERIOR , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_OTHER , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_FRONT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_REAR , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_LEFT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_RIGHT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTRA_OTHER , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTRA_FRONT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTRA_REAR , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTRA_LEFT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LOCATION_EXTRA_RIGHT , // HIDL v3.8\n+} camera_metadata_enum_android_automotive_location_t;\n+\n+\n+// ANDROID_AUTOMOTIVE_LENS_FACING\n+typedef enum camera_metadata_enum_android_automotive_lens_facing {\n+ ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_OTHER , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_FRONT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_REAR , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_LEFT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_RIGHT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_OTHER , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_LEFT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_CENTER , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_RIGHT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_LEFT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_CENTER , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_RIGHT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_LEFT , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_CENTER , // HIDL v3.8\n+ ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_RIGHT , // HIDL v3.8\n+} camera_metadata_enum_android_automotive_lens_facing_t;\n+\n+\n+// ANDROID_EXTENSION_NIGHT_MODE_INDICATOR\n+typedef enum camera_metadata_enum_android_extension_night_mode_indicator {\n+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_UNKNOWN , // HIDL v3.11\n+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_OFF , // HIDL v3.11\n+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_ON , // HIDL v3.11\n+} camera_metadata_enum_android_extension_night_mode_indicator_t;\n+\n+\n+// ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS\n+typedef enum camera_metadata_enum_android_jpegr_available_jpeg_r_stream_configurations {\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_OUTPUT , // HIDL v3.9\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_INPUT , // HIDL v3.9\n+} camera_metadata_enum_android_jpegr_available_jpeg_r_stream_configurations_t;\n+\n+// ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION\n+typedef enum camera_metadata_enum_android_jpegr_available_jpeg_r_stream_configurations_maximum_resolution {\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT\n+ , // HIDL v3.9\n+ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT\n+ , // HIDL v3.9\n+} camera_metadata_enum_android_jpegr_available_jpeg_r_stream_configurations_maximum_resolution_t;\n+\n+\n+// ANDROID_SHARED_SESSION_COLOR_SPACE\n+typedef enum camera_metadata_enum_android_shared_session_color_space {\n+ ANDROID_SHARED_SESSION_COLOR_SPACE_UNSPECIFIED = -1,\n+ ANDROID_SHARED_SESSION_COLOR_SPACE_SRGB = 0,\n+ ANDROID_SHARED_SESSION_COLOR_SPACE_DISPLAY_P3 = 7,\n+ ANDROID_SHARED_SESSION_COLOR_SPACE_BT2020_HLG = 16,\n+} camera_metadata_enum_android_shared_session_color_space_t;\n+\n+\n+// ANDROID_DESKTOP_EFFECTS_CAPABILITIES\n+typedef enum camera_metadata_enum_android_desktop_effects_capabilities {\n+ ANDROID_DESKTOP_EFFECTS_CAPABILITIES_BACKGROUND_BLUR , // HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_CAPABILITIES_FACE_RETOUCH , // HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_CAPABILITIES_PORTRAIT_RELIGHT , // HIDL v3.2\n+} camera_metadata_enum_android_desktop_effects_capabilities_t;\n+\n+// ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE\n+typedef enum camera_metadata_enum_android_desktop_effects_background_blur_mode {\n+ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_OFF , // HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_LIGHT , // HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_FULL , // HIDL v3.2\n+} camera_metadata_enum_android_desktop_effects_background_blur_mode_t;\n+\n+// ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE\n+typedef enum camera_metadata_enum_android_desktop_effects_face_retouch_mode {\n+ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE_OFF , // HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE_ON , // HIDL v3.2\n+} camera_metadata_enum_android_desktop_effects_face_retouch_mode_t;\n+\n+// ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE\n+typedef enum camera_metadata_enum_android_desktop_effects_portrait_relight_mode {\n+ ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE_OFF , // HIDL v3.2\n+ ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE_ON , // HIDL v3.2\n+} camera_metadata_enum_android_desktop_effects_portrait_relight_mode_t;\ndiff --git a/include/android/metadata/system/camera_vendor_tags.h b/include/android/metadata/system/camera_vendor_tags.h\nindex 167ff7393a..52d0e9bbc0 100644\n--- a/include/android/metadata/system/camera_vendor_tags.h\n+++ b/include/android/metadata/system/camera_vendor_tags.h\n@@ -18,9 +18,9 @@\n #ifndef SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H\n #define SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H\n \n-#ifdef __cplusplus\n-extern \"C\" {\n-#endif\n+#include <sys/cdefs.h>\n+\n+__BEGIN_DECLS\n \n #define CAMERA_METADATA_VENDOR_TAG_BOUNDARY 0x80000000u\n #define CAMERA_METADATA_INVALID_VENDOR_ID UINT64_MAX\n@@ -151,9 +151,7 @@ struct vendor_tag_cache_ops {\n void* reserved[8];\n };\n \n-#ifdef __cplusplus\n-} /* extern \"C\" */\n-#endif\n+__END_DECLS\n \n #endif /* SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H */\n \ndiff --git a/include/android/system/core/include/android/log.h b/include/android/system/core/include/android/log.h\nindex dbad9dd18a..b5d725c7db 100644\n--- a/include/android/system/core/include/android/log.h\n+++ b/include/android/system/core/include/android/log.h\n@@ -15,29 +15,18 @@\n * limitations under the License.\n */\n \n-#ifndef _ANDROID_LOG_H\n-#define _ANDROID_LOG_H\n+#pragma once\n \n-/******************************************************************\n- *\n- * IMPORTANT NOTICE:\n- *\n- * This file is part of Android's set of stable system headers\n- * exposed by the Android NDK (Native Development Kit) since\n- * platform release 1.5\n- *\n- * Third-party source AND binary code relies on the definitions\n- * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES.\n- *\n- * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES)\n- * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS\n- * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY\n- * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES\n+/**\n+ * @addtogroup Logging\n+ * @{\n */\n \n-/*\n- * Support routines to send messages to the Android in-kernel log buffer,\n- * which can later be accessed through the 'logcat' utility.\n+/**\n+ * \\file\n+ *\n+ * Support routines to send messages to the Android log buffer,\n+ * which can later be accessed through the `logcat` utility.\n *\n * Each log message must have\n * - a priority\n@@ -48,98 +37,393 @@\n * and should be reasonably small.\n *\n * Log message text may be truncated to less than an implementation-specific\n- * limit (e.g. 1023 characters max).\n+ * limit (1023 bytes).\n *\n * Note that a newline character (\"\\n\") will be appended automatically to your\n- * log message, if not already there. It is not possible to send several messages\n- * and have them appear on a single line in logcat.\n+ * log message, if not already there. It is not possible to send several\n+ * messages and have them appear on a single line in logcat.\n *\n- * PLEASE USE LOGS WITH MODERATION:\n+ * Please use logging in moderation:\n *\n * - Sending log messages eats CPU and slow down your application and the\n * system.\n *\n- * - The circular log buffer is pretty small (<64KB), sending many messages\n- * might push off other important log messages from the rest of the system.\n+ * - The circular log buffer is pretty small, so sending many messages\n+ * will hide other important log messages.\n *\n * - In release builds, only send log messages to account for exceptional\n * conditions.\n- *\n- * NOTE: These functions MUST be implemented by /system/lib/liblog.so\n */\n \n #include <stdarg.h>\n+#include <stdbool.h>\n+#include <stddef.h>\n+#include <stdint.h>\n+#include <sys/cdefs.h>\n+#include <sys/time.h>\n+\n+#if !defined(__BIONIC__) && !defined(__INTRODUCED_IN)\n+#define __INTRODUCED_IN(x)\n+#endif\n \n #ifdef __cplusplus\n extern \"C\" {\n #endif\n \n-/*\n- * Android log priority values, in ascending priority order.\n+/**\n+ * Android log priority values, in increasing order of priority.\n */\n typedef enum android_LogPriority {\n- ANDROID_LOG_UNKNOWN = 0,\n- ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */\n- ANDROID_LOG_VERBOSE,\n- ANDROID_LOG_DEBUG,\n- ANDROID_LOG_INFO,\n- ANDROID_LOG_WARN,\n- ANDROID_LOG_ERROR,\n- ANDROID_LOG_FATAL,\n- ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */\n+ /** For internal use only. */\n+ ANDROID_LOG_UNKNOWN = 0,\n+ /** The default priority, for internal use only. */\n+ ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */\n+ /** Verbose logging. Should typically be disabled for a release apk. */\n+ ANDROID_LOG_VERBOSE,\n+ /** Debug logging. Should typically be disabled for a release apk. */\n+ ANDROID_LOG_DEBUG,\n+ /** Informational logging. Should typically be disabled for a release apk. */\n+ ANDROID_LOG_INFO,\n+ /** Warning logging. For use with recoverable failures. */\n+ ANDROID_LOG_WARN,\n+ /** Error logging. For use with unrecoverable failures. */\n+ ANDROID_LOG_ERROR,\n+ /** Fatal logging. For use when aborting. */\n+ ANDROID_LOG_FATAL,\n+ /** For internal use only. */\n+ ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */\n } android_LogPriority;\n \n-/*\n- * Send a simple string to the log.\n+/**\n+ * Identifies a specific log buffer for __android_log_buf_write()\n+ * and __android_log_buf_print().\n */\n-int __android_log_write(int prio, const char *tag, const char *text);\n+typedef enum log_id {\n+ /** For internal use only. */\n+ LOG_ID_MIN = 0,\n \n-/*\n- * Send a formatted string to the log, used like printf(fmt,...)\n- */\n-int __android_log_print(int prio, const char *tag, const char *fmt, ...)\n-#if defined(__GNUC__)\n-#ifdef __USE_MINGW_ANSI_STDIO\n-#if __USE_MINGW_ANSI_STDIO\n- __attribute__ ((format(gnu_printf, 3, 4)))\n-#else\n- __attribute__ ((format(printf, 3, 4)))\n-#endif\n-#else\n- __attribute__ ((format(printf, 3, 4)))\n-#endif\n-#endif\n- ;\n+ /** The main log buffer. This is the only log buffer available to apps. */\n+ LOG_ID_MAIN = 0,\n+ /** The radio log buffer. */\n+ LOG_ID_RADIO = 1,\n+ /** The event log buffer. */\n+ LOG_ID_EVENTS = 2,\n+ /** The system log buffer. */\n+ LOG_ID_SYSTEM = 3,\n+ /** The crash log buffer. */\n+ LOG_ID_CRASH = 4,\n+ /** The statistics log buffer. */\n+ LOG_ID_STATS = 5,\n+ /** The security log buffer. */\n+ LOG_ID_SECURITY = 6,\n+ /** The kernel log buffer. */\n+ LOG_ID_KERNEL = 7,\n \n-/*\n- * A variant of __android_log_print() that takes a va_list to list\n- * additional parameters.\n+ /** For internal use only. */\n+ LOG_ID_MAX,\n+\n+ /**\n+ * Let the logging library choose the best log target in cases where it's\n+ * unclear. This is useful if you're generic library code that can't know\n+ * which log your caller should use.\n+ */\n+ LOG_ID_DEFAULT = 0x7FFFFFFF\n+} log_id_t;\n+\n+static inline bool __android_log_id_is_valid(log_id_t log_id) {\n+ return log_id >= LOG_ID_MIN && log_id < LOG_ID_MAX;\n+}\n+\n+/**\n+ * Writes the constant string `text` to the main log buffer,\n+ * with priority `prio` (one of the `android_LogPriority` values) and tag `tag`.\n+ *\n+ * See __android_log_buf_write() to write to a different log buffer.\n+ *\n+ * @return 1 if the message was written to the log, or -EPERM if it was not; see\n+ * __android_log_is_loggable().\n */\n-int __android_log_vprint(int prio, const char *tag,\n- const char *fmt, va_list ap);\n+int __android_log_write(int prio, const char* tag, const char* text);\n \n-/*\n- * Log an assertion failure and abort the process to have a chance\n- * to inspect it if a debugger is attached. This uses the FATAL priority.\n- */\n-void __android_log_assert(const char *cond, const char *tag,\n- const char *fmt, ...)\n-#if defined(__GNUC__)\n- __attribute__ ((noreturn))\n-#ifdef __USE_MINGW_ANSI_STDIO\n-#if __USE_MINGW_ANSI_STDIO\n- __attribute__ ((format(gnu_printf, 3, 4)))\n-#else\n- __attribute__ ((format(printf, 3, 4)))\n-#endif\n-#else\n- __attribute__ ((format(printf, 3, 4)))\n-#endif\n-#endif\n- ;\n+/**\n+ * Writes the string `text` to the log buffer `log_id` (one of the `log_id_t` values),\n+ * with priority `prio` (one of the `android_LogPriority` values) and tag `tag`.\n+ *\n+ * Apps should use __android_log_write() instead because LOG_ID_MAIN is the\n+ * only log buffer available to them.\n+ *\n+ * @return 1 if the message was written to the log, or -EPERM if it was not; see\n+ * __android_log_is_loggable().\n+ */\n+int __android_log_buf_write(int log_id, int prio, const char* tag, const char* text);\n+\n+/**\n+ * Writes a formatted string to the main log buffer,\n+ * with priority `prio` (one of the `android_LogPriority` values) and tag `tag`.\n+ *\n+ * The details of formatting are the same as for\n+ * [printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html).\n+ *\n+ * See __android_log_buf_print() to write to a different log buffer.\n+ *\n+ * @return 1 if the message was written to the log, or -EPERM if it was not; see\n+ * __android_log_is_loggable().\n+ */\n+int __android_log_print(int prio, const char* tag, const char* fmt, ...)\n+ __attribute__((__format__(printf, 3, 4)));\n+\n+/**\n+ * Writes a formatted string to the log buffer `log_id` (one of the `log_id_t` values),\n+ * with priority `prio` (one of the `android_LogPriority` values) and tag `tag`.\n+ *\n+ * The details of formatting are the same as for\n+ * [printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html).\n+ *\n+ * Apps should use __android_log_print() instead because LOG_ID_MAIN is the\n+ * only log buffer available to them.\n+ *\n+ * @return 1 if the message was written to the log, or -EPERM if it was not; see\n+ * __android_log_is_loggable().\n+ */\n+int __android_log_buf_print(int log_id, int prio, const char* tag, const char* fmt, ...)\n+ __attribute__((__format__(printf, 4, 5)));\n+\n+/**\n+ * Equivalent to __android_log_print(), but taking a `va_list`.\n+ * (If __android_log_print() is like printf(), this is like vprintf().)\n+ *\n+ * @return 1 if the message was written to the log, or -EPERM if it was not; see\n+ * __android_log_is_loggable().\n+ */\n+int __android_log_vprint(int prio, const char* tag, const char* fmt, va_list ap)\n+ __attribute__((__format__(printf, 3, 0)));\n+\n+/**\n+ * Writes an assertion failure to the main log buffer\n+ * with priority `ANDROID_LOG_FATAL` -- and also to stderr -- before calling\n+ * [abort(3)](http://man7.org/linux/man-pages/man3/abort.3.html).\n+ *\n+ * If `fmt` is non-null, `cond` is unused. If `fmt` is null, the string\n+ * `Assertion failed: %s` is used with `cond` as the string argument.\n+ * If both `fmt` and `cond` are null, a default string is provided.\n+ *\n+ * Most callers should use\n+ * [assert(3)](http://man7.org/linux/man-pages/man3/assert.3.html) from\n+ * `<assert.h>` instead, or the `__assert` and `__assert2` functions\n+ * provided by bionic if more control is needed. They support automatically\n+ * including the source filename and line number more conveniently than this\n+ * function.\n+ */\n+void __android_log_assert(const char* cond, const char* tag, const char* fmt, ...)\n+ __attribute__((__noreturn__)) __attribute__((__format__(printf, 3, 4)));\n+\n+/**\n+ * Logger data struct used for writing log messages to liblog via __android_log_write_logger_data()\n+ * and sending log messages to user defined loggers specified in __android_log_set_logger().\n+ */\n+struct __android_log_message {\n+ /** Must be set to `sizeof(__android_log_message)` and is used for versioning. */\n+ size_t struct_size;\n+\n+ /** {@link log_id_t} values. */\n+ int32_t buffer_id;\n+\n+ /** {@link android_LogPriority} values. */\n+ int32_t priority;\n+\n+ /** The tag for the log message. */\n+ const char* tag;\n+\n+ /** Optional file name, may be set to nullptr. */\n+ const char* file;\n+\n+ /** Optional line number, ignore if file is nullptr. */\n+ uint32_t line;\n+\n+ /** The log message itself. */\n+ const char* message;\n+};\n+\n+/**\n+ * Prototype for the 'logger' function that is called for every log message.\n+ */\n+typedef void (*__android_logger_function)(const struct __android_log_message* log_message);\n+\n+/**\n+ * Prototype for the 'abort' function that is called when liblog will abort due to\n+ * __android_log_assert() failures.\n+ */\n+typedef void (*__android_aborter_function)(const char* abort_message);\n+\n+/**\n+ * Writes the log message specified by log_message. log_message includes additional file name and\n+ * line number information that a logger may use. log_message is versioned for backwards\n+ * compatibility.\n+ * This assumes that loggability has already been checked through __android_log_is_loggable().\n+ * Higher level logging libraries, such as libbase, first check loggability, then format their\n+ * buffers, then pass the message to liblog via this function, and therefore we do not want to\n+ * duplicate the loggability check here.\n+ *\n+ * @param log_message the log message itself, see {@link __android_log_message}.\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_write_log_message(struct __android_log_message* log_message) __INTRODUCED_IN(30);\n+\n+/**\n+ * Sets a user defined logger function. All log messages sent to liblog will be set to the\n+ * function pointer specified by logger for processing. It is not expected that log messages are\n+ * already terminated with a new line. This function should add new lines if required for line\n+ * separation.\n+ *\n+ * @param logger the new function that will handle log messages.\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_set_logger(__android_logger_function logger) __INTRODUCED_IN(30);\n+\n+/**\n+ * Writes the log message to logd. This is an {@link __android_logger_function} and can be provided to\n+ * __android_log_set_logger(). It is the default logger when running liblog on a device.\n+ *\n+ * @param log_message the log message to write, see {@link __android_log_message}.\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_logd_logger(const struct __android_log_message* log_message) __INTRODUCED_IN(30);\n+\n+/**\n+ * Writes the log message to logd using the passed in timestamp. The messages are stored\n+ * in logd in the order received not in order by timestamp. When displaying the log, there is no\n+ * guarantee that messages are in timestamp order and might cause messages with different times to\n+ * be interleaved. Filtering the log using a timestamp will work properly even if out of time\n+ * order messages are present.\n+ *\n+ * @param log_message the log message to write, see {@link __android_log_message}.\n+ * @param timestamp the time to use for this log message. The value is interpreted as a\n+ * CLOCK_REALTIME value.\n+ *\n+ * Available since API level 37.\n+ */\n+void __android_log_logd_logger_with_timestamp(const struct __android_log_message* log_message,\n+ const struct timespec* timestamp) __INTRODUCED_IN(37);\n+\n+/**\n+ * Writes the log message to stderr. This is an {@link __android_logger_function} and can be provided to\n+ * __android_log_set_logger(). It is the default logger when running liblog on host.\n+ *\n+ * @param log_message the log message to write, see {@link __android_log_message}.\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_stderr_logger(const struct __android_log_message* log_message)\n+ __INTRODUCED_IN(30);\n+\n+/**\n+ * Sets a user defined aborter function that is called for __android_log_assert() failures. This\n+ * user defined aborter function is highly recommended to abort and be noreturn, but is not strictly\n+ * required to.\n+ *\n+ * @param aborter the new aborter function, see {@link __android_aborter_function}.\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_set_aborter(__android_aborter_function aborter) __INTRODUCED_IN(30);\n+\n+/**\n+ * Calls the stored aborter function. This allows for other logging libraries to use the same\n+ * aborter function by calling this function in liblog.\n+ *\n+ * @param abort_message an additional message supplied when aborting, for example this is used to\n+ * call android_set_abort_message() in __android_log_default_aborter().\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_call_aborter(const char* abort_message) __INTRODUCED_IN(30);\n+\n+/**\n+ * Sets android_set_abort_message() on device then aborts(). This is the default aborter.\n+ *\n+ * @param abort_message an additional message supplied when aborting. This functions calls\n+ * android_set_abort_message() with its contents.\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_default_aborter(const char* abort_message) __attribute__((noreturn))\n+__INTRODUCED_IN(30);\n+\n+/**\n+ * Use the per-tag properties \"log.tag.<tagname>\" along with the minimum priority from\n+ * __android_log_set_minimum_priority() to determine if a log message with a given prio and tag will\n+ * be printed. A non-zero result indicates yes, zero indicates false.\n+ *\n+ * If both a priority for a tag and a minimum priority are set by\n+ * __android_log_set_minimum_priority(), then the lowest of the two values are to determine the\n+ * minimum priority needed to log. If only one is set, then that value is used to determine the\n+ * minimum priority needed. If none are set, then default_priority is used.\n+ *\n+ * @param prio the priority to test, takes {@link android_LogPriority} values.\n+ * @param tag the tag to test.\n+ * @param default_prio the default priority to use if no properties or minimum priority are set.\n+ * @return an integer where 1 indicates that the message is loggable and 0 indicates that it is not.\n+ *\n+ * Available since API level 30.\n+ */\n+int __android_log_is_loggable(int prio, const char* tag, int default_prio) __INTRODUCED_IN(30);\n+\n+/**\n+ * Use the per-tag properties \"log.tag.<tagname>\" along with the minimum priority from\n+ * __android_log_set_minimum_priority() to determine if a log message with a given prio and tag will\n+ * be printed. A non-zero result indicates yes, zero indicates false.\n+ *\n+ * If both a priority for a tag and a minimum priority are set by\n+ * __android_log_set_minimum_priority(), then the lowest of the two values are to determine the\n+ * minimum priority needed to log. If only one is set, then that value is used to determine the\n+ * minimum priority needed. If none are set, then default_priority is used.\n+ *\n+ * @param prio the priority to test, takes {@link android_LogPriority} values.\n+ * @param tag the tag to test.\n+ * @param len the length of the tag.\n+ * @param default_prio the default priority to use if no properties or minimum priority are set.\n+ * @return an integer where 1 indicates that the message is loggable and 0 indicates that it is not.\n+ *\n+ * Available since API level 30.\n+ */\n+int __android_log_is_loggable_len(int prio, const char* tag, size_t len, int default_prio)\n+ __INTRODUCED_IN(30);\n+\n+/**\n+ * Sets the minimum priority that will be logged for this process.\n+ *\n+ * @param priority the new minimum priority to set, takes {@link android_LogPriority} values.\n+ * @return the previous set minimum priority, or `ANDROID_LOG_DEFAULT` if none was set.\n+ *\n+ * Available since API level 30.\n+ */\n+int32_t __android_log_set_minimum_priority(int32_t priority) __INTRODUCED_IN(30);\n+\n+/**\n+ * Gets the minimum priority that will be logged for this process.\n+ *\n+ * @return the current minimum priority, or `ANDROID_LOG_DEFAULT` if none is set.\n+ *\n+ * Available since API level 30.\n+ */\n+int32_t __android_log_get_minimum_priority(void) __INTRODUCED_IN(30);\n+\n+/**\n+ * Sets the default tag if no tag is provided when writing a log message. Defaults to\n+ * getprogname(). This truncates tag to the maximum log message size, though appropriate tags\n+ * should be much smaller.\n+ *\n+ * @param tag the new log tag.\n+ *\n+ * Available since API level 30.\n+ */\n+void __android_log_set_default_tag(const char* tag) __INTRODUCED_IN(30);\n \n #ifdef __cplusplus\n }\n #endif\n \n-#endif /* _ANDROID_LOG_H */\n+/** @} */\ndiff --git a/include/android/system/core/include/cutils/native_handle.h b/include/android/system/core/include/cutils/native_handle.h\nindex dbd37672f0..d6014efd92 100644\n--- a/include/android/system/core/include/cutils/native_handle.h\n+++ b/include/android/system/core/include/cutils/native_handle.h\n@@ -50,18 +50,28 @@ typedef struct native_handle\n typedef const native_handle_t* buffer_handle_t;\n \n /*\n- * native_handle_close\n- * \n- * closes the file descriptors contained in this native_handle_t\n- * \n+ * Closes the file descriptors contained in this native_handle_t, which may\n+ * either be untagged or tagged for ownership by this native_handle_t via\n+ * native_handle_set_tag(). Mixing untagged and tagged fds in the same\n+ * native_handle_t is not permitted and triggers an fdsan exception, but\n+ * native_handle_set_fdsan_tag() can be used to bring consistency if this is\n+ * intentional.\n+ *\n+ * If it's known that fds are tagged, prefer native_handle_close_with_tag() for\n+ * better safety.\n+ *\n * return 0 on success, or a negative error code on failure\n- * \n */\n int native_handle_close(const native_handle_t* h);\n \n /*\n- * native_handle_init\n- *\n+ * Equivalent to native_handle_close(), but throws an fdsan exception if the fds\n+ * are untagged. Use if it's known that the fds in this native_handle_t were\n+ * previously tagged via native_handle_set_tag().\n+ */\n+int native_handle_close_with_tag(const native_handle_t* h);\n+\n+/*\n * Initializes a native_handle_t from storage. storage must be declared with\n * NATIVE_HANDLE_DECLARE_STORAGE. numFds and numInts must not respectively\n * exceed maxFds and maxInts used to declare the storage.\n@@ -69,32 +79,42 @@ int native_handle_close(const native_handle_t* h);\n native_handle_t* native_handle_init(char* storage, int numFds, int numInts);\n \n /*\n- * native_handle_create\n- * \n- * creates a native_handle_t and initializes it. must be destroyed with\n- * native_handle_delete().\n- * \n+ * Creates a native_handle_t and initializes it. Must be destroyed with\n+ * native_handle_delete(). Note that numFds must be <= NATIVE_HANDLE_MAX_FDS,\n+ * numInts must be <= NATIVE_HANDLE_MAX_INTS, and both must be >= 0.\n */\n native_handle_t* native_handle_create(int numFds, int numInts);\n \n /*\n- * native_handle_clone\n- *\n- * creates a native_handle_t and initializes it from another native_handle_t.\n+ * Updates the fdsan tag for any file descriptors contained in the supplied\n+ * handle to indicate that they are owned by this handle and should only be\n+ * closed via native_handle_close()/native_handle_close_with_tag(). Each fd in\n+ * the handle must have a tag of either 0 (unset) or the tag associated with\n+ * this handle, otherwise an fdsan exception will be triggered.\n+ */\n+void native_handle_set_fdsan_tag(const native_handle_t* handle);\n+\n+/*\n+ * Clears the fdsan tag for any file descriptors contained in the supplied\n+ * native_handle_t. Use if this native_handle_t is giving up ownership of its\n+ * fds, but the fdsan tags were previously set. Each fd in the handle must have\n+ * a tag of either 0 (unset) or the tag associated with this handle, otherwise\n+ * an fdsan exception will be triggered.\n+ */\n+void native_handle_unset_fdsan_tag(const native_handle_t* handle);\n+\n+/*\n+ * Creates a native_handle_t and initializes it from another native_handle_t.\n * Must be destroyed with native_handle_delete().\n- *\n */\n native_handle_t* native_handle_clone(const native_handle_t* handle);\n \n /*\n- * native_handle_delete\n- * \n- * frees a native_handle_t allocated with native_handle_create().\n+ * Frees a native_handle_t allocated with native_handle_create().\n * This ONLY frees the memory allocated for the native_handle_t, but doesn't\n * close the file descriptors; which can be achieved with native_handle_close().\n- * \n+ *\n * return 0 on success, or a negative error code on failure\n- * \n */\n int native_handle_delete(native_handle_t* h);\n \ndiff --git a/include/android/system/core/include/system/camera.h b/include/android/system/core/include/system/camera.h\nindex 9d69588f98..b625aada70 100644\n--- a/include/android/system/core/include/system/camera.h\n+++ b/include/android/system/core/include/system/camera.h\n@@ -159,8 +159,8 @@ enum {\n *\n * When any camera method returns error, the client can use ping command\n * to see if the camera has been taken away by other clients. If the result\n- * is NO_ERROR, it means the camera hardware is not released. If the result\n- * is not NO_ERROR, the camera has been released and the existing client\n+ * is OK, it means the camera hardware is not released. If the result\n+ * is not OK, the camera has been released and the existing client\n * can silently finish itself or show a dialog.\n */\n CAMERA_CMD_PING = 9,\ndiff --git a/include/android/system/core/include/system/graphics-base-v1.2.h b/include/android/system/core/include/system/graphics-base-v1.2.h\nnew file mode 100644\nindex 0000000000..372284ad73\n--- /dev/null\n+++ b/include/android/system/core/include/system/graphics-base-v1.2.h\n@@ -0,0 +1,36 @@\n+/* SPDX-License-Identifier: Apache-2.0 */\n+// This file is autogenerated by hidl-gen. Do not edit manually.\n+// Source: android.hardware.graphics.common@1.2\n+// Location: hardware/interfaces/graphics/common/1.2/\n+\n+#ifndef HIDL_GENERATED_ANDROID_HARDWARE_GRAPHICS_COMMON_V1_2_EXPORTED_CONSTANTS_H_\n+#define HIDL_GENERATED_ANDROID_HARDWARE_GRAPHICS_COMMON_V1_2_EXPORTED_CONSTANTS_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+typedef enum {\n+ HAL_HDR_HDR10_PLUS = 4,\n+} android_hdr_v1_2_t;\n+\n+typedef enum {\n+ HAL_DATASPACE_DISPLAY_BT2020 = 142999552 /* STANDARD_BT2020 | TRANSFER_SRGB | RANGE_FULL */,\n+ HAL_DATASPACE_DYNAMIC_DEPTH = 4098 /* 0x1002 */,\n+ HAL_DATASPACE_JPEG_APP_SEGMENTS = 4099 /* 0x1003 */,\n+ HAL_DATASPACE_HEIF = 4100 /* 0x1004 */,\n+} android_dataspace_v1_2_t;\n+\n+typedef enum {\n+ HAL_COLOR_MODE_DISPLAY_BT2020 = 13,\n+} android_color_mode_v1_2_t;\n+\n+typedef enum {\n+ HAL_PIXEL_FORMAT_HSV_888 = 55 /* 0x37 */,\n+} android_pixel_format_v1_2_t;\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif // HIDL_GENERATED_ANDROID_HARDWARE_GRAPHICS_COMMON_V1_2_EXPORTED_CONSTANTS_H_\ndiff --git a/include/android/system/core/include/system/graphics-base.h b/include/android/system/core/include/system/graphics-base.h\nindex d01e9874f9..3db0bbc526 100644\n--- a/include/android/system/core/include/system/graphics-base.h\n+++ b/include/android/system/core/include/system/graphics-base.h\n@@ -4,5 +4,6 @@\n \n #include \"graphics-base-v1.0.h\"\n #include \"graphics-base-v1.1.h\"\n+#include \"graphics-base-v1.2.h\"\n \n #endif // SYSTEM_CORE_GRAPHICS_BASE_H_\ndiff --git a/include/android/system/core/include/system/graphics.h b/include/android/system/core/include/system/graphics.h\nindex 6341e642d5..34159e127a 100644\n--- a/include/android/system/core/include/system/graphics.h\n+++ b/include/android/system/core/include/system/graphics.h\n@@ -60,12 +60,14 @@ typedef android_hdr_t android_hdr;\n \n /*\n * Structure for describing YCbCr formats for consumption by applications.\n- * This is used with HAL_PIXEL_FORMAT_YCbCr_*_888.\n+ * This is used with HAL_PIXEL_FORMAT_YCbCr_*.\n *\n * Buffer chroma subsampling is defined in the format.\n * e.g. HAL_PIXEL_FORMAT_YCbCr_420_888 has subsampling 4:2:0.\n *\n- * Buffers must have a 8 bit depth.\n+ * Buffers must have a byte aligned channel depth or a byte aligned packed\n+ * channel depth (e.g. 10 bits packed into 16 bits for\n+ * HAL_PIXEL_FORMAT_YCbCr_P010).\n *\n * y, cb, and cr point to the first byte of their respective planes.\n *\n@@ -76,8 +78,8 @@ typedef android_hdr_t android_hdr;\n * cstride is the stride of the chroma planes.\n *\n * chroma_step is the distance in bytes from one chroma pixel value to the\n- * next. This is 2 bytes for semiplanar (because chroma values are interleaved\n- * and each chroma value is one byte) and 1 for planar.\n+ * next. This is `2 * channel depth` bytes for semiplanar (because chroma\n+ * values are interleaved) and `1 * channel depth` bytes for planar.\n */\n \n struct android_ycbcr {\ndiff --git a/src/android/camera3_hal.cpp b/src/android/camera3_hal.cpp\nindex a5ad2374a9..ce313ebace 100644\n--- a/src/android/camera3_hal.cpp\n+++ b/src/android/camera3_hal.cpp\n@@ -112,5 +112,8 @@ camera_module_t HAL_MODULE_INFO_SYM = {\n \t.open_legacy = hal_open_legacy,\n \t.set_torch_mode = hal_set_torch_mode,\n \t.init = hal_init,\n+\t.get_physical_camera_info = nullptr,\n+\t.is_stream_combination_supported = nullptr,\n+\t.notify_device_state_change = nullptr,\n \t.reserved = {},\n };\ndiff --git a/src/android/camera_ops.cpp b/src/android/camera_ops.cpp\nindex ecaac5a31c..1656fac7ab 100644\n--- a/src/android/camera_ops.cpp\n+++ b/src/android/camera_ops.cpp\n@@ -99,5 +99,7 @@ camera3_device_ops hal_dev_ops = {\n \t.get_metadata_vendor_tag_ops = nullptr,\n \t.dump = hal_dev_dump,\n \t.flush = hal_dev_flush,\n-\t.reserved = { nullptr },\n+\t.signal_stream_flush = nullptr,\n+\t.is_reconfiguration_required = nullptr,\n+\t.reserved = {},\n };\ndiff --git a/src/android/metadata/camera_metadata.c b/src/android/metadata/camera_metadata.c\nindex b86586a7e6..fc695bcadd 100644\n--- a/src/android/metadata/camera_metadata.c\n+++ b/src/android/metadata/camera_metadata.c\n@@ -103,10 +103,10 @@ struct camera_metadata {\n uint32_t version;\n uint32_t flags;\n metadata_size_t entry_count;\n- metadata_size_t entry_capacity;\n+ metadata_size_t entry_capacity; // Number of entries that can be stored\n metadata_uptrdiff_t entries_start; // Offset from camera_metadata\n metadata_size_t data_count;\n- metadata_size_t data_capacity;\n+ metadata_size_t data_capacity; // Number of data bytes that can be stored\n metadata_uptrdiff_t data_start; // Offset from camera_metadata\n uint32_t padding; // padding to 8 bytes boundary\n metadata_vendor_id_t vendor_id;\n@@ -241,7 +241,7 @@ camera_metadata_t *allocate_copy_camera_metadata_checked(\n return NULL;\n }\n \n- void *buffer = malloc(src_size);\n+ void *buffer = calloc(1, src_size);\n memcpy(buffer, src, src_size);\n \n camera_metadata_t *metadata = (camera_metadata_t*) buffer;\n@@ -258,7 +258,7 @@ camera_metadata_t *allocate_camera_metadata(size_t entry_capacity,\n \n size_t memory_needed = calculate_camera_metadata_size(entry_capacity,\n data_capacity);\n- void *buffer = malloc(memory_needed);\n+ void *buffer = calloc(1, memory_needed);\n camera_metadata_t *metadata = place_camera_metadata(\n buffer, memory_needed, entry_capacity, data_capacity);\n if (!metadata) {\n@@ -278,7 +278,11 @@ camera_metadata_t *place_camera_metadata(void *dst,\n \n size_t memory_needed = calculate_camera_metadata_size(entry_capacity,\n data_capacity);\n- if (memory_needed > dst_size) return NULL;\n+ if (memory_needed > dst_size) {\n+ ALOGE(\"%s: Memory needed to place camera metadata (%zu) > dst size (%zu)\", __FUNCTION__,\n+ memory_needed, dst_size);\n+ return NULL;\n+ }\n \n camera_metadata_t *metadata = (camera_metadata_t*)dst;\n metadata->version = CURRENT_METADATA_VERSION;\n@@ -350,7 +354,11 @@ camera_metadata_t* copy_camera_metadata(void *dst, size_t dst_size,\n size_t memory_needed = get_camera_metadata_compact_size(src);\n \n if (dst == NULL) return NULL;\n- if (dst_size < memory_needed) return NULL;\n+ if (dst_size < memory_needed) {\n+ ALOGE(\"%s: Memory needed to place camera metadata (%zu) > dst size (%zu)\", __FUNCTION__,\n+ memory_needed, dst_size);\n+ return NULL;\n+ }\n \n camera_metadata_t *metadata =\n place_camera_metadata(dst, dst_size, src->entry_count, src->data_count);\n@@ -433,14 +441,14 @@ int validate_camera_metadata_structure(const camera_metadata_t *metadata,\n };\n \n for (size_t i = 0; i < sizeof(alignments)/sizeof(alignments[0]); ++i) {\n- uintptr_t aligned_ptr = ALIGN_TO((uintptr_t) metadata + alignmentOffset,\n+ uintptr_t aligned_ptr_section = ALIGN_TO((uintptr_t) metadata + alignmentOffset,\n alignments[i].alignment);\n \n- if ((uintptr_t)metadata + alignmentOffset != aligned_ptr) {\n+ if ((uintptr_t)metadata + alignmentOffset != aligned_ptr_section) {\n ALOGE(\"%s: Metadata pointer is not aligned (actual %p, \"\n \"expected %p, offset %\" PRIuPTR \") to type %s\",\n __FUNCTION__, metadata,\n- (void*)aligned_ptr, alignmentOffset, alignments[i].name);\n+ (void*)aligned_ptr_section, alignmentOffset, alignments[i].name);\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n }\n@@ -449,56 +457,86 @@ int validate_camera_metadata_structure(const camera_metadata_t *metadata,\n /**\n * Check that the metadata contents are correct\n */\n+ if (expected_size != NULL && sizeof(camera_metadata_t) > *expected_size) {\n+ ALOGE(\"%s: Metadata size (%zu) should be <= expected size (%zu)\",\n+ __FUNCTION__, sizeof(camera_metadata_t), *expected_size);\n+ return CAMERA_METADATA_VALIDATION_ERROR;\n+ }\n+\n+ // Create an aligned header\n+ camera_metadata_t headerCopy;\n+ const camera_metadata_t *header;\n+ if (alignmentOffset != 0) {\n+ memcpy(&headerCopy, metadata, sizeof(camera_metadata_t));\n+ header = &headerCopy;\n+ } else {\n+ header = metadata;\n+ }\n \n- if (expected_size != NULL && metadata->size > *expected_size) {\n+ if (expected_size != NULL && header->size > *expected_size) {\n ALOGE(\"%s: Metadata size (%\" PRIu32 \") should be <= expected size (%zu)\",\n- __FUNCTION__, metadata->size, *expected_size);\n+ __FUNCTION__, header->size, *expected_size);\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n \n- if (metadata->entry_count > metadata->entry_capacity) {\n+ if (header->entry_count > header->entry_capacity) {\n ALOGE(\"%s: Entry count (%\" PRIu32 \") should be <= entry capacity \"\n \"(%\" PRIu32 \")\",\n- __FUNCTION__, metadata->entry_count, metadata->entry_capacity);\n+ __FUNCTION__, header->entry_count, header->entry_capacity);\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n \n- if (metadata->data_count > metadata->data_capacity) {\n+ if (header->data_count > header->data_capacity) {\n ALOGE(\"%s: Data count (%\" PRIu32 \") should be <= data capacity \"\n \"(%\" PRIu32 \")\",\n- __FUNCTION__, metadata->data_count, metadata->data_capacity);\n+ __FUNCTION__, header->data_count, header->data_capacity);\n // android_errorWriteLog(SN_EVENT_LOG_ID, \"30591838\");\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n \n+ // Check for overflow when calculating entry capacity bytes.\n+ // (metadata_size_t)~0 represents the maximum representable value of metadata_size_t.\n+ if (header->entry_capacity > (metadata_size_t)~0 / sizeof(camera_metadata_buffer_entry_t)) {\n+ ALOGE(\"%s: Entry capacity (%\" PRIu32 \") is too large\",\n+ __FUNCTION__, header->entry_capacity);\n+ return CAMERA_METADATA_VALIDATION_ERROR;\n+ }\n+\n+ metadata_size_t entries_capacity_bytes =\n+ sizeof(camera_metadata_buffer_entry_t) * header->entry_capacity;\n const metadata_uptrdiff_t entries_end =\n- metadata->entries_start + metadata->entry_capacity;\n- if (entries_end < metadata->entries_start || // overflow check\n- entries_end > metadata->data_start) {\n+ header->entries_start + entries_capacity_bytes;\n+\n+ if (entries_end < header->entries_start) {\n+ ALOGE(\"%s: Entry start (%\" PRIu32 \") + capacity bytes (%\" PRIu32 \") \"\n+ \"overflows\", __FUNCTION__, header->entries_start, entries_capacity_bytes);\n+ return CAMERA_METADATA_VALIDATION_ERROR;\n+ }\n \n+ if (entries_end > header->data_start) {\n ALOGE(\"%s: Entry start + capacity (%\" PRIu32 \") should be <= data start \"\n \"(%\" PRIu32 \")\",\n __FUNCTION__,\n- (metadata->entries_start + metadata->entry_capacity),\n- metadata->data_start);\n+ entries_end,\n+ header->data_start);\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n \n const metadata_uptrdiff_t data_end =\n- metadata->data_start + metadata->data_capacity;\n- if (data_end < metadata->data_start || // overflow check\n- data_end > metadata->size) {\n+ header->data_start + header->data_capacity;\n+ if (data_end < header->data_start || // overflow check\n+ data_end > header->size) {\n \n ALOGE(\"%s: Data start + capacity (%\" PRIu32 \") should be <= total size \"\n \"(%\" PRIu32 \")\",\n __FUNCTION__,\n- (metadata->data_start + metadata->data_capacity),\n- metadata->size);\n+ (header->data_start + header->data_capacity),\n+ header->size);\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n \n // Validate each entry\n- const metadata_size_t entry_count = metadata->entry_count;\n+ const metadata_size_t entry_count = header->entry_count;\n camera_metadata_buffer_entry_t *entries = get_entries(metadata);\n \n for (size_t i = 0; i < entry_count; ++i) {\n@@ -511,7 +549,12 @@ int validate_camera_metadata_structure(const camera_metadata_t *metadata,\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n \n- camera_metadata_buffer_entry_t entry = entries[i];\n+ camera_metadata_buffer_entry_t entry;\n+ if (alignmentOffset != 0) {\n+ memcpy(&entry, entries + i, sizeof(camera_metadata_buffer_entry_t));\n+ } else {\n+ entry = entries[i];\n+ }\n \n if (entry.type >= NUM_TYPES) {\n ALOGE(\"%s: Entry index %zu had a bad type %d\",\n@@ -522,10 +565,10 @@ int validate_camera_metadata_structure(const camera_metadata_t *metadata,\n // TODO: fix vendor_tag_ops across processes so we don't need to special\n // case vendor-specific tags\n uint32_t tag_section = entry.tag >> 16;\n- int tag_type = get_local_camera_metadata_tag_type(entry.tag, metadata);\n+ int tag_type = get_local_camera_metadata_tag_type(entry.tag, header);\n if (tag_type != (int)entry.type && tag_section < VENDOR_SECTION) {\n- ALOGE(\"%s: Entry index %zu had tag type %d, but the type was %d\",\n- __FUNCTION__, i, tag_type, entry.type);\n+ ALOGE(\"%s: Entry index %zu (0x%x) had tag type %d, but the type was %d\",\n+ __FUNCTION__, i, entry.tag, tag_type, entry.type);\n return CAMERA_METADATA_VALIDATION_ERROR;\n }\n \n@@ -1005,6 +1048,15 @@ int get_local_camera_metadata_tag_type(uint32_t tag,\n return get_local_camera_metadata_tag_type_vendor_id(tag, id);\n }\n \n+const int32_t *get_camera_metadata_permission_needed(uint32_t *tag_count) {\n+ if (NULL == tag_count) {\n+ return NULL;\n+ }\n+\n+ *tag_count = sizeof(tag_permission_needed) / sizeof(tag_permission_needed[0]);\n+ return tag_permission_needed;\n+}\n+\n int set_camera_metadata_vendor_tag_ops(const vendor_tag_query_ops_t* ops) {\n // **DEPRECATED**\n (void) ops;\n@@ -1046,8 +1098,7 @@ metadata_vendor_id_t get_camera_metadata_vendor_id(\n }\n \n static void print_data(int fd, const uint8_t *data_ptr, uint32_t tag, int type,\n- int count,\n- int indentation);\n+ metadata_vendor_id_t vendor_id, int count, int indentation);\n \n void dump_camera_metadata(const camera_metadata_t *metadata,\n int fd,\n@@ -1120,12 +1171,13 @@ void dump_indented_camera_metadata(const camera_metadata_t *metadata,\n int count = entry->count;\n if (verbosity < 2 && count > 16) count = 16;\n \n- print_data(fd, data_ptr, entry->tag, entry->type, count, indentation);\n+ print_data(fd, data_ptr, entry->tag, entry->type, get_camera_metadata_vendor_id(metadata),\n+ count, indentation);\n }\n }\n \n-static void print_data(int fd, const uint8_t *data_ptr, uint32_t tag,\n- int type, int count, int indentation) {\n+static void print_data(int fd, const uint8_t *data_ptr, uint32_t tag, int type,\n+ metadata_vendor_id_t vendor_id, int count, int indentation) {\n static int values_per_line[NUM_TYPES] = {\n [TYPE_BYTE] = 16,\n [TYPE_INT32] = 4,\n@@ -1137,6 +1189,33 @@ static void print_data(int fd, const uint8_t *data_ptr, uint32_t tag,\n size_t type_size = camera_metadata_type_size[type];\n char value_string_tmp[CAMERA_METADATA_ENUM_STRING_MAX_SIZE];\n uint32_t value;\n+ size_t value_offset;\n+ size_t entry_size;\n+ // It is possible that the tag value is only found at specific\n+ // offset. The rest of the data must not be enumerated.\n+ switch (tag) {\n+ case ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS:\n+ case ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION:\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS:\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION:\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS:\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION:\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS:\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION:\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS:\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION:\n+ case ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS:\n+ value_offset = 3 * type_size;\n+ entry_size = 4 * type_size;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS:\n+ value_offset = 4 * type_size;\n+ entry_size = 5 * type_size;\n+ break;\n+ default:\n+ value_offset = 0;\n+ entry_size = 0;\n+ }\n \n int lines = count / values_per_line[type];\n if (count % values_per_line[type] != 0) lines++;\n@@ -1158,14 +1237,24 @@ static void print_data(int fd, const uint8_t *data_ptr, uint32_t tag,\n sizeof(value_string_tmp))\n == OK) {\n dprintf(fd, \"%s \", value_string_tmp);\n+ } else if (tag == ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS) {\n+ if (value != 0) {\n+ dprintf(fd, \"%c \",\n+ *(data_ptr + index));\n+ }\n } else {\n dprintf(fd, \"%hhu \",\n *(data_ptr + index));\n }\n break;\n case TYPE_INT32:\n- value =\n- *(int32_t*)(data_ptr + index);\n+ value = *(int32_t*)(data_ptr + index);\n+\n+ if ((entry_size > 0) && ((index % entry_size ) != value_offset)) {\n+ dprintf(fd, \"%\" PRId32 \" \", value);\n+ break;\n+ }\n+\n if (camera_metadata_enum_snprint(tag,\n value,\n value_string_tmp,\n@@ -1173,8 +1262,24 @@ static void print_data(int fd, const uint8_t *data_ptr, uint32_t tag,\n == OK) {\n dprintf(fd, \"%s \", value_string_tmp);\n } else {\n- dprintf(fd, \"%\" PRId32 \" \",\n- *(int32_t*)(data_ptr + index));\n+ dprintf(fd, \"%\" PRId32 \" \", value);\n+ if (tag == ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS ||\n+ tag == ANDROID_REQUEST_AVAILABLE_RESULT_KEYS ||\n+ tag == ANDROID_REQUEST_AVAILABLE_SESSION_KEYS ||\n+ tag == ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS ||\n+ tag == ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS) {\n+ const char *camera_metadata_tag_name =\n+ get_camera_metadata_tag_name(value);\n+ if (camera_metadata_tag_name != NULL) {\n+ dprintf(fd, \"(%s) \", camera_metadata_tag_name);\n+ } else {\n+ const char *camera_metadata_tag_vendor_id =\n+ get_local_camera_metadata_tag_name_vendor_id(value, vendor_id);\n+ if (camera_metadata_tag_vendor_id != NULL) {\n+ dprintf(fd, \"(%s) \", camera_metadata_tag_vendor_id);\n+ }\n+ }\n+ }\n }\n break;\n case TYPE_FLOAT:\ndiff --git a/src/android/metadata/camera_metadata_tag_info.c b/src/android/metadata/camera_metadata_tag_info.c\nindex e1b81f6d15..3db3bb7f55 100644\n--- a/src/android/metadata/camera_metadata_tag_info.c\n+++ b/src/android/metadata/camera_metadata_tag_info.c\n@@ -61,6 +61,14 @@ const char *camera_metadata_section_names[ANDROID_SECTION_COUNT] = {\n [ANDROID_LOGICAL_MULTI_CAMERA] = \"android.logicalMultiCamera\",\n [ANDROID_DISTORTION_CORRECTION]\n = \"android.distortionCorrection\",\n+ [ANDROID_HEIC] = \"android.heic\",\n+ [ANDROID_HEIC_INFO] = \"android.heic.info\",\n+ [ANDROID_AUTOMOTIVE] = \"android.automotive\",\n+ [ANDROID_AUTOMOTIVE_LENS] = \"android.automotive.lens\",\n+ [ANDROID_EXTENSION] = \"android.extension\",\n+ [ANDROID_JPEGR] = \"android.jpegr\",\n+ [ANDROID_SHARED_SESSION] = \"android.sharedSession\",\n+ [ANDROID_DESKTOP_EFFECTS] = \"android.desktopEffects\",\n };\n \n unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {\n@@ -121,6 +129,22 @@ unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {\n [ANDROID_DISTORTION_CORRECTION]\n = { ANDROID_DISTORTION_CORRECTION_START,\n ANDROID_DISTORTION_CORRECTION_END },\n+ [ANDROID_HEIC] = { ANDROID_HEIC_START,\n+ ANDROID_HEIC_END },\n+ [ANDROID_HEIC_INFO] = { ANDROID_HEIC_INFO_START,\n+ ANDROID_HEIC_INFO_END },\n+ [ANDROID_AUTOMOTIVE] = { ANDROID_AUTOMOTIVE_START,\n+ ANDROID_AUTOMOTIVE_END },\n+ [ANDROID_AUTOMOTIVE_LENS] = { ANDROID_AUTOMOTIVE_LENS_START,\n+ ANDROID_AUTOMOTIVE_LENS_END },\n+ [ANDROID_EXTENSION] = { ANDROID_EXTENSION_START,\n+ ANDROID_EXTENSION_END },\n+ [ANDROID_JPEGR] = { ANDROID_JPEGR_START,\n+ ANDROID_JPEGR_END },\n+ [ANDROID_SHARED_SESSION] = { ANDROID_SHARED_SESSION_START,\n+ ANDROID_SHARED_SESSION_END },\n+ [ANDROID_DESKTOP_EFFECTS] = { ANDROID_DESKTOP_EFFECTS_START,\n+ ANDROID_DESKTOP_EFFECTS_END },\n };\n \n static tag_info_t android_color_correction[ANDROID_COLOR_CORRECTION_END -\n@@ -136,6 +160,14 @@ static tag_info_t android_color_correction[ANDROID_COLOR_CORRECTION_END -\n { \"aberrationMode\", TYPE_BYTE },\n [ ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES - ANDROID_COLOR_CORRECTION_START ] =\n { \"availableAberrationModes\", TYPE_BYTE },\n+ [ ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE - ANDROID_COLOR_CORRECTION_START ] =\n+ { \"colorTemperature\", TYPE_INT32 },\n+ [ ANDROID_COLOR_CORRECTION_COLOR_TINT - ANDROID_COLOR_CORRECTION_START ] =\n+ { \"colorTint\", TYPE_INT32 },\n+ [ ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE - ANDROID_COLOR_CORRECTION_START ] =\n+ { \"colorTemperatureRange\", TYPE_INT32 },\n+ [ ANDROID_COLOR_CORRECTION_AVAILABLE_MODES - ANDROID_COLOR_CORRECTION_START ] =\n+ { \"availableModes\", TYPE_BYTE },\n };\n \n static tag_info_t android_control[ANDROID_CONTROL_END -\n@@ -229,6 +261,50 @@ static tag_info_t android_control[ANDROID_CONTROL_END -\n { \"enableZsl\", TYPE_BYTE },\n [ ANDROID_CONTROL_AF_SCENE_CHANGE - ANDROID_CONTROL_START ] =\n { \"afSceneChange\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES - ANDROID_CONTROL_START ] =\n+ { \"availableExtendedSceneModeMaxSizes\",\n+ TYPE_INT32 },\n+ [ ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES - ANDROID_CONTROL_START ] =\n+ { \"availableExtendedSceneModeZoomRatioRanges\",\n+ TYPE_FLOAT },\n+ [ ANDROID_CONTROL_EXTENDED_SCENE_MODE - ANDROID_CONTROL_START ] =\n+ { \"extendedSceneMode\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_ZOOM_RATIO_RANGE - ANDROID_CONTROL_START ] =\n+ { \"zoomRatioRange\", TYPE_FLOAT },\n+ [ ANDROID_CONTROL_ZOOM_RATIO - ANDROID_CONTROL_START ] =\n+ { \"zoomRatio\", TYPE_FLOAT },\n+ [ ANDROID_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS_MAXIMUM_RESOLUTION - ANDROID_CONTROL_START ] =\n+ { \"availableHighSpeedVideoConfigurationsMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_CONTROL_AF_REGIONS_SET - ANDROID_CONTROL_START ] =\n+ { \"afRegionsSet\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_AE_REGIONS_SET - ANDROID_CONTROL_START ] =\n+ { \"aeRegionsSet\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_AWB_REGIONS_SET - ANDROID_CONTROL_START ] =\n+ { \"awbRegionsSet\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_SETTINGS_OVERRIDE - ANDROID_CONTROL_START ] =\n+ { \"settingsOverride\", TYPE_INT32 },\n+ [ ANDROID_CONTROL_AVAILABLE_SETTINGS_OVERRIDES - ANDROID_CONTROL_START ] =\n+ { \"availableSettingsOverrides\", TYPE_INT32 },\n+ [ ANDROID_CONTROL_SETTINGS_OVERRIDING_FRAME_NUMBER - ANDROID_CONTROL_START ] =\n+ { \"settingsOverridingFrameNumber\", TYPE_INT32 },\n+ [ ANDROID_CONTROL_AUTOFRAMING - ANDROID_CONTROL_START ] =\n+ { \"autoframing\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_AUTOFRAMING_AVAILABLE - ANDROID_CONTROL_START ] =\n+ { \"autoframingAvailable\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_AUTOFRAMING_STATE - ANDROID_CONTROL_START ] =\n+ { \"autoframingState\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_LOW_LIGHT_BOOST_INFO_LUMINANCE_RANGE - ANDROID_CONTROL_START ] =\n+ { \"lowLightBoostInfoLuminanceRange\",\n+ TYPE_FLOAT },\n+ [ ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE - ANDROID_CONTROL_START ] =\n+ { \"lowLightBoostState\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_ZOOM_METHOD - ANDROID_CONTROL_START ] =\n+ { \"zoomMethod\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_AE_PRIORITY_MODE - ANDROID_CONTROL_START ] =\n+ { \"aePriorityMode\", TYPE_BYTE },\n+ [ ANDROID_CONTROL_AE_AVAILABLE_PRIORITY_MODES - ANDROID_CONTROL_START ] =\n+ { \"aeAvailablePriorityModes\", TYPE_BYTE },\n };\n \n static tag_info_t android_demosaic[ANDROID_DEMOSAIC_END -\n@@ -261,6 +337,16 @@ static tag_info_t android_flash[ANDROID_FLASH_END -\n { \"maxEnergy\", TYPE_BYTE },\n [ ANDROID_FLASH_STATE - ANDROID_FLASH_START ] =\n { \"state\", TYPE_BYTE },\n+ [ ANDROID_FLASH_STRENGTH_LEVEL - ANDROID_FLASH_START ] =\n+ { \"strengthLevel\", TYPE_INT32 },\n+ [ ANDROID_FLASH_SINGLE_STRENGTH_MAX_LEVEL - ANDROID_FLASH_START ] =\n+ { \"singleStrengthMaxLevel\", TYPE_INT32 },\n+ [ ANDROID_FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL - ANDROID_FLASH_START ] =\n+ { \"singleStrengthDefaultLevel\", TYPE_INT32 },\n+ [ ANDROID_FLASH_TORCH_STRENGTH_MAX_LEVEL - ANDROID_FLASH_START ] =\n+ { \"torchStrengthMaxLevel\", TYPE_INT32 },\n+ [ ANDROID_FLASH_TORCH_STRENGTH_DEFAULT_LEVEL - ANDROID_FLASH_START ] =\n+ { \"torchStrengthDefaultLevel\", TYPE_INT32 },\n };\n \n static tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -\n@@ -269,6 +355,10 @@ static tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -\n { \"available\", TYPE_BYTE },\n [ ANDROID_FLASH_INFO_CHARGE_DURATION - ANDROID_FLASH_INFO_START ] =\n { \"chargeDuration\", TYPE_INT64 },\n+ [ ANDROID_FLASH_INFO_STRENGTH_MAXIMUM_LEVEL - ANDROID_FLASH_INFO_START ] =\n+ { \"strengthMaximumLevel\", TYPE_INT32 },\n+ [ ANDROID_FLASH_INFO_STRENGTH_DEFAULT_LEVEL - ANDROID_FLASH_INFO_START ] =\n+ { \"strengthDefaultLevel\", TYPE_INT32 },\n };\n \n static tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END -\n@@ -333,6 +423,11 @@ static tag_info_t android_lens[ANDROID_LENS_END -\n { \"poseReference\", TYPE_BYTE },\n [ ANDROID_LENS_DISTORTION - ANDROID_LENS_START ] =\n { \"distortion\", TYPE_FLOAT },\n+ [ ANDROID_LENS_DISTORTION_MAXIMUM_RESOLUTION - ANDROID_LENS_START ] =\n+ { \"distortionMaximumResolution\", TYPE_FLOAT },\n+ [ ANDROID_LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION - ANDROID_LENS_START ] =\n+ { \"intrinsicCalibrationMaximumResolution\",\n+ TYPE_FLOAT },\n };\n \n static tag_info_t android_lens_info[ANDROID_LENS_INFO_END -\n@@ -418,6 +513,18 @@ static tag_info_t android_request[ANDROID_REQUEST_END -\n [ ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS - ANDROID_REQUEST_START ] =\n { \"availablePhysicalCameraRequestKeys\",\n TYPE_INT32 },\n+ [ ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION - ANDROID_REQUEST_START ] =\n+ { \"characteristicKeysNeedingPermission\",\n+ TYPE_INT32 },\n+ [ ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP - ANDROID_REQUEST_START ] =\n+ { \"availableDynamicRangeProfilesMap\",\n+ TYPE_INT64 },\n+ [ ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE - ANDROID_REQUEST_START ] =\n+ { \"recommendedTenBitDynamicRangeProfile\",\n+ TYPE_INT64 },\n+ [ ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP - ANDROID_REQUEST_START ] =\n+ { \"availableColorSpaceProfilesMap\",\n+ TYPE_INT64 },\n };\n \n static tag_info_t android_scaler[ANDROID_SCALER_END -\n@@ -452,6 +559,45 @@ static tag_info_t android_scaler[ANDROID_SCALER_END -\n { \"availableStallDurations\", TYPE_INT64 },\n [ ANDROID_SCALER_CROPPING_TYPE - ANDROID_SCALER_START ] =\n { \"croppingType\", TYPE_BYTE },\n+ [ ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS - ANDROID_SCALER_START ] =\n+ { \"availableRecommendedStreamConfigurations\",\n+ TYPE_INT32 },\n+ [ ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP - ANDROID_SCALER_START ] =\n+ { \"availableRecommendedInputOutputFormatsMap\",\n+ TYPE_INT32 },\n+ [ ANDROID_SCALER_AVAILABLE_ROTATE_AND_CROP_MODES - ANDROID_SCALER_START ] =\n+ { \"availableRotateAndCropModes\", TYPE_BYTE },\n+ [ ANDROID_SCALER_ROTATE_AND_CROP - ANDROID_SCALER_START ] =\n+ { \"rotateAndCrop\", TYPE_BYTE },\n+ [ ANDROID_SCALER_DEFAULT_SECURE_IMAGE_SIZE - ANDROID_SCALER_START ] =\n+ { \"defaultSecureImageSize\", TYPE_INT32 },\n+ [ ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS - ANDROID_SCALER_START ] =\n+ { \"physicalCameraMultiResolutionStreamConfigurations\",\n+ TYPE_INT32 },\n+ [ ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION - ANDROID_SCALER_START ] =\n+ { \"availableStreamConfigurationsMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_SCALER_START ] =\n+ { \"availableMinFrameDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_SCALER_AVAILABLE_STALL_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_SCALER_START ] =\n+ { \"availableStallDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP_MAXIMUM_RESOLUTION - ANDROID_SCALER_START ] =\n+ { \"availableInputOutputFormatsMapMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED - ANDROID_SCALER_START ] =\n+ { \"multiResolutionStreamSupported\",\n+ TYPE_BYTE },\n+ [ ANDROID_SCALER_CROP_REGION_SET - ANDROID_SCALER_START ] =\n+ { \"cropRegionSet\", TYPE_BYTE },\n+ [ ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES - ANDROID_SCALER_START ] =\n+ { \"availableStreamUseCases\", TYPE_INT64 },\n+ [ ANDROID_SCALER_RAW_CROP_REGION - ANDROID_SCALER_START ] =\n+ { \"rawCropRegion\", TYPE_INT32 },\n+ [ ANDROID_SCALER_CONCURRENT_MULTI_RESOLUTION_FORMATS - ANDROID_SCALER_START ] =\n+ { \"concurrentMultiResolutionFormats\",\n+ TYPE_INT32 },\n };\n \n static tag_info_t android_sensor[ANDROID_SENSOR_END -\n@@ -526,6 +672,15 @@ static tag_info_t android_sensor[ANDROID_SENSOR_END -\n { \"dynamicWhiteLevel\", TYPE_INT32 },\n [ ANDROID_SENSOR_OPAQUE_RAW_SIZE - ANDROID_SENSOR_START ] =\n { \"opaqueRawSize\", TYPE_INT32 },\n+ [ ANDROID_SENSOR_OPAQUE_RAW_SIZE_MAXIMUM_RESOLUTION - ANDROID_SENSOR_START ] =\n+ { \"opaqueRawSizeMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_SENSOR_PIXEL_MODE - ANDROID_SENSOR_START ] =\n+ { \"pixelMode\", TYPE_BYTE },\n+ [ ANDROID_SENSOR_RAW_BINNING_FACTOR_USED - ANDROID_SENSOR_START ] =\n+ { \"rawBinningFactorUsed\", TYPE_BYTE },\n+ [ ANDROID_SENSOR_READOUT_TIMESTAMP - ANDROID_SENSOR_START ] =\n+ { \"readoutTimestamp\", TYPE_BYTE },\n };\n \n static tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -\n@@ -552,6 +707,17 @@ static tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -\n { \"lensShadingApplied\", TYPE_BYTE },\n [ ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE - ANDROID_SENSOR_INFO_START ] =\n { \"preCorrectionActiveArraySize\", TYPE_INT32 },\n+ [ ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION - ANDROID_SENSOR_INFO_START ] =\n+ { \"activeArraySizeMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION - ANDROID_SENSOR_INFO_START ] =\n+ { \"pixelArraySizeMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION - ANDROID_SENSOR_INFO_START ] =\n+ { \"preCorrectionActiveArraySizeMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_SENSOR_INFO_BINNING_FACTOR - ANDROID_SENSOR_INFO_START ] =\n+ { \"binningFactor\", TYPE_INT32 },\n };\n \n static tag_info_t android_shading[ANDROID_SHADING_END -\n@@ -609,6 +775,10 @@ static tag_info_t android_statistics[ANDROID_STATISTICS_END -\n { \"oisXShifts\", TYPE_FLOAT },\n [ ANDROID_STATISTICS_OIS_Y_SHIFTS - ANDROID_STATISTICS_START ] =\n { \"oisYShifts\", TYPE_FLOAT },\n+ [ ANDROID_STATISTICS_LENS_INTRINSIC_TIMESTAMPS - ANDROID_STATISTICS_START ] =\n+ { \"lensIntrinsicTimestamps\", TYPE_INT64 },\n+ [ ANDROID_STATISTICS_LENS_INTRINSIC_SAMPLES - ANDROID_STATISTICS_START ] =\n+ { \"lensIntrinsicSamples\", TYPE_FLOAT },\n };\n \n static tag_info_t android_statistics_info[ANDROID_STATISTICS_INFO_END -\n@@ -667,6 +837,18 @@ static tag_info_t android_info[ANDROID_INFO_END -\n { \"supportedHardwareLevel\", TYPE_BYTE },\n [ ANDROID_INFO_VERSION - ANDROID_INFO_START ] =\n { \"version\", TYPE_BYTE },\n+ [ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION - ANDROID_INFO_START ] =\n+ { \"supportedBufferManagementVersion\",\n+ TYPE_BYTE },\n+ [ ANDROID_INFO_DEVICE_STATE_ORIENTATIONS - ANDROID_INFO_START ] =\n+ { \"deviceStateOrientations\", TYPE_INT64 },\n+ [ ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION - ANDROID_INFO_START ] =\n+ { \"sessionConfigurationQueryVersion\",\n+ TYPE_INT32 },\n+ [ ANDROID_INFO_DEVICE_ID - ANDROID_INFO_START ] =\n+ { \"deviceId\", TYPE_INT32 },\n+ [ ANDROID_INFO_DEVICE_TYPE - ANDROID_INFO_START ] =\n+ { \"deviceType\", TYPE_BYTE },\n };\n \n static tag_info_t android_black_level[ANDROID_BLACK_LEVEL_END -\n@@ -705,6 +887,36 @@ static tag_info_t android_depth[ANDROID_DEPTH_END -\n { \"availableDepthStallDurations\", TYPE_INT64 },\n [ ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE - ANDROID_DEPTH_START ] =\n { \"depthIsExclusive\", TYPE_BYTE },\n+ [ ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS - ANDROID_DEPTH_START ] =\n+ { \"availableRecommendedDepthStreamConfigurations\",\n+ TYPE_INT32 },\n+ [ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS - ANDROID_DEPTH_START ] =\n+ { \"availableDynamicDepthStreamConfigurations\",\n+ TYPE_INT32 },\n+ [ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS - ANDROID_DEPTH_START ] =\n+ { \"availableDynamicDepthMinFrameDurations\",\n+ TYPE_INT64 },\n+ [ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS - ANDROID_DEPTH_START ] =\n+ { \"availableDynamicDepthStallDurations\",\n+ TYPE_INT64 },\n+ [ ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION - ANDROID_DEPTH_START ] =\n+ { \"availableDepthStreamConfigurationsMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_DEPTH_START ] =\n+ { \"availableDepthMinFrameDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_DEPTH_START ] =\n+ { \"availableDepthStallDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION - ANDROID_DEPTH_START ] =\n+ { \"availableDynamicDepthStreamConfigurationsMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_DEPTH_START ] =\n+ { \"availableDynamicDepthMinFrameDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_DEPTH_START ] =\n+ { \"availableDynamicDepthStallDurationsMaximumResolution\",\n+ TYPE_INT64 },\n };\n \n static tag_info_t android_logical_multi_camera[ANDROID_LOGICAL_MULTI_CAMERA_END -\n@@ -713,6 +925,13 @@ static tag_info_t android_logical_multi_camera[ANDROID_LOGICAL_MULTI_CAMERA_END\n { \"physicalIds\", TYPE_BYTE },\n [ ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE - ANDROID_LOGICAL_MULTI_CAMERA_START ] =\n { \"sensorSyncType\", TYPE_BYTE },\n+ [ ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID - ANDROID_LOGICAL_MULTI_CAMERA_START ] =\n+ { \"activePhysicalId\", TYPE_BYTE },\n+ [ ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_SENSOR_CROP_REGION - ANDROID_LOGICAL_MULTI_CAMERA_START ] =\n+ { \"activePhysicalSensorCropRegion\",\n+ TYPE_INT32 },\n+ [ ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS - ANDROID_LOGICAL_MULTI_CAMERA_START ] =\n+ { \"additionalResults\", TYPE_BYTE },\n };\n \n static tag_info_t android_distortion_correction[ANDROID_DISTORTION_CORRECTION_END -\n@@ -723,6 +942,120 @@ static tag_info_t android_distortion_correction[ANDROID_DISTORTION_CORRECTION_EN\n { \"availableModes\", TYPE_BYTE },\n };\n \n+static tag_info_t android_heic[ANDROID_HEIC_END -\n+ ANDROID_HEIC_START] = {\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS - ANDROID_HEIC_START ] =\n+ { \"availableHeicStreamConfigurations\",\n+ TYPE_INT32 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS - ANDROID_HEIC_START ] =\n+ { \"availableHeicMinFrameDurations\",\n+ TYPE_INT64 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS - ANDROID_HEIC_START ] =\n+ { \"availableHeicStallDurations\", TYPE_INT64 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION - ANDROID_HEIC_START ] =\n+ { \"availableHeicStreamConfigurationsMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_HEIC_START ] =\n+ { \"availableHeicMinFrameDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_HEIC_START ] =\n+ { \"availableHeicStallDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS - ANDROID_HEIC_START ] =\n+ { \"availableHeicUltraHdrStreamConfigurations\",\n+ TYPE_INT32 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS - ANDROID_HEIC_START ] =\n+ { \"availableHeicUltraHdrMinFrameDurations\",\n+ TYPE_INT64 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS - ANDROID_HEIC_START ] =\n+ { \"availableHeicUltraHdrStallDurations\",\n+ TYPE_INT64 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION - ANDROID_HEIC_START ] =\n+ { \"availableHeicUltraHdrStreamConfigurationsMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_HEIC_START ] =\n+ { \"availableHeicUltraHdrMinFrameDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_HEIC_START ] =\n+ { \"availableHeicUltraHdrStallDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+};\n+\n+static tag_info_t android_heic_info[ANDROID_HEIC_INFO_END -\n+ ANDROID_HEIC_INFO_START] = {\n+ [ ANDROID_HEIC_INFO_SUPPORTED - ANDROID_HEIC_INFO_START ] =\n+ { \"supported\", TYPE_BYTE },\n+ [ ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT - ANDROID_HEIC_INFO_START ] =\n+ { \"maxJpegAppSegmentsCount\", TYPE_BYTE },\n+};\n+\n+static tag_info_t android_automotive[ANDROID_AUTOMOTIVE_END -\n+ ANDROID_AUTOMOTIVE_START] = {\n+ [ ANDROID_AUTOMOTIVE_LOCATION - ANDROID_AUTOMOTIVE_START ] =\n+ { \"location\", TYPE_BYTE },\n+};\n+\n+static tag_info_t android_automotive_lens[ANDROID_AUTOMOTIVE_LENS_END -\n+ ANDROID_AUTOMOTIVE_LENS_START] = {\n+ [ ANDROID_AUTOMOTIVE_LENS_FACING - ANDROID_AUTOMOTIVE_LENS_START ] =\n+ { \"facing\", TYPE_BYTE },\n+};\n+\n+static tag_info_t android_extension[ANDROID_EXTENSION_END -\n+ ANDROID_EXTENSION_START] = {\n+ [ ANDROID_EXTENSION_STRENGTH - ANDROID_EXTENSION_START ] =\n+ { \"strength\", TYPE_INT32 },\n+ [ ANDROID_EXTENSION_CURRENT_TYPE - ANDROID_EXTENSION_START ] =\n+ { \"currentType\", TYPE_INT32 },\n+ [ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR - ANDROID_EXTENSION_START ] =\n+ { \"nightModeIndicator\", TYPE_INT32 },\n+};\n+\n+static tag_info_t android_jpegr[ANDROID_JPEGR_END -\n+ ANDROID_JPEGR_START] = {\n+ [ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS - ANDROID_JPEGR_START ] =\n+ { \"availableJpegRStreamConfigurations\",\n+ TYPE_INT32 },\n+ [ ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS - ANDROID_JPEGR_START ] =\n+ { \"availableJpegRMinFrameDurations\",\n+ TYPE_INT64 },\n+ [ ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS - ANDROID_JPEGR_START ] =\n+ { \"availableJpegRStallDurations\", TYPE_INT64 },\n+ [ ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION - ANDROID_JPEGR_START ] =\n+ { \"availableJpegRStreamConfigurationsMaximumResolution\",\n+ TYPE_INT32 },\n+ [ ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_JPEGR_START ] =\n+ { \"availableJpegRMinFrameDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+ [ ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS_MAXIMUM_RESOLUTION - ANDROID_JPEGR_START ] =\n+ { \"availableJpegRStallDurationsMaximumResolution\",\n+ TYPE_INT64 },\n+};\n+\n+static tag_info_t android_shared_session[ANDROID_SHARED_SESSION_END -\n+ ANDROID_SHARED_SESSION_START] = {\n+ [ ANDROID_SHARED_SESSION_COLOR_SPACE - ANDROID_SHARED_SESSION_START ] =\n+ { \"colorSpace\", TYPE_INT32 },\n+ [ ANDROID_SHARED_SESSION_OUTPUT_CONFIGURATIONS - ANDROID_SHARED_SESSION_START ] =\n+ { \"outputConfigurations\", TYPE_INT64 },\n+};\n+\n+static tag_info_t android_desktop_effects[ANDROID_DESKTOP_EFFECTS_END -\n+ ANDROID_DESKTOP_EFFECTS_START] = {\n+ [ ANDROID_DESKTOP_EFFECTS_CAPABILITIES - ANDROID_DESKTOP_EFFECTS_START ] =\n+ { \"capabilities\", TYPE_BYTE },\n+ [ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODES - ANDROID_DESKTOP_EFFECTS_START ] =\n+ { \"backgroundBlurModes\", TYPE_BYTE },\n+ [ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE - ANDROID_DESKTOP_EFFECTS_START ] =\n+ { \"backgroundBlurMode\", TYPE_BYTE },\n+ [ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE - ANDROID_DESKTOP_EFFECTS_START ] =\n+ { \"faceRetouchMode\", TYPE_BYTE },\n+ [ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_STRENGTH - ANDROID_DESKTOP_EFFECTS_START ] =\n+ { \"faceRetouchStrength\", TYPE_BYTE },\n+ [ ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE - ANDROID_DESKTOP_EFFECTS_START ] =\n+ { \"portraitRelightMode\", TYPE_BYTE },\n+};\n+\n \n tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {\n android_color_correction,\n@@ -753,6 +1086,35 @@ tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {\n android_depth,\n android_logical_multi_camera,\n android_distortion_correction,\n+ android_heic,\n+ android_heic_info,\n+ android_automotive,\n+ android_automotive_lens,\n+ android_extension,\n+ android_jpegr,\n+ android_shared_session,\n+ android_desktop_effects,\n+};\n+\n+static int32_t tag_permission_needed[18] = {\n+ ANDROID_LENS_POSE_ROTATION,\n+ ANDROID_LENS_POSE_TRANSLATION,\n+ ANDROID_LENS_INTRINSIC_CALIBRATION,\n+ ANDROID_LENS_RADIAL_DISTORTION,\n+ ANDROID_LENS_POSE_REFERENCE,\n+ ANDROID_LENS_DISTORTION,\n+ ANDROID_LENS_DISTORTION_MAXIMUM_RESOLUTION,\n+ ANDROID_LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION,\n+ ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,\n+ ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,\n+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1,\n+ ANDROID_SENSOR_REFERENCE_ILLUMINANT2,\n+ ANDROID_SENSOR_CALIBRATION_TRANSFORM1,\n+ ANDROID_SENSOR_CALIBRATION_TRANSFORM2,\n+ ANDROID_SENSOR_COLOR_TRANSFORM1,\n+ ANDROID_SENSOR_COLOR_TRANSFORM2,\n+ ANDROID_SENSOR_FORWARD_MATRIX1,\n+ ANDROID_SENSOR_FORWARD_MATRIX2,\n };\n \n int camera_metadata_enum_snprint(uint32_t tag,\n@@ -777,6 +1139,10 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"HIGH_QUALITY\";\n ret = 0;\n break;\n+ case ANDROID_COLOR_CORRECTION_MODE_CCT:\n+ msg = \"CCT\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -810,6 +1176,18 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES: {\n break;\n }\n+ case ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_COLOR_TINT: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_AVAILABLE_MODES: {\n+ break;\n+ }\n \n case ANDROID_CONTROL_AE_ANTIBANDING_MODE: {\n switch (value) {\n@@ -878,6 +1256,10 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"ON_EXTERNAL_FLASH\";\n ret = 0;\n break;\n+ case ANDROID_CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY:\n+ msg = \"ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -1122,6 +1504,10 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"OFF_KEEP_STATE\";\n ret = 0;\n break;\n+ case ANDROID_CONTROL_MODE_USE_EXTENDED_SCENE_MODE:\n+ msg = \"USE_EXTENDED_SCENE_MODE\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -1232,6 +1618,10 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"ON\";\n ret = 0;\n break;\n+ case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION:\n+ msg = \"PREVIEW_STABILIZATION\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -1440,6 +1830,222 @@ int camera_metadata_enum_snprint(uint32_t tag,\n }\n break;\n }\n+ case ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_EXTENDED_SCENE_MODE: {\n+ switch (value) {\n+ case ANDROID_CONTROL_EXTENDED_SCENE_MODE_DISABLED:\n+ msg = \"DISABLED\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE:\n+ msg = \"BOKEH_STILL_CAPTURE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS:\n+ msg = \"BOKEH_CONTINUOUS\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_EXTENDED_SCENE_MODE_VENDOR_START:\n+ msg = \"VENDOR_START\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_ZOOM_RATIO_RANGE: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_ZOOM_RATIO: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_REGIONS_SET: {\n+ switch (value) {\n+ case ANDROID_CONTROL_AF_REGIONS_SET_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AF_REGIONS_SET_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_REGIONS_SET: {\n+ switch (value) {\n+ case ANDROID_CONTROL_AE_REGIONS_SET_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AE_REGIONS_SET_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_REGIONS_SET: {\n+ switch (value) {\n+ case ANDROID_CONTROL_AWB_REGIONS_SET_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AWB_REGIONS_SET_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_SETTINGS_OVERRIDE: {\n+ switch (value) {\n+ case ANDROID_CONTROL_SETTINGS_OVERRIDE_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_SETTINGS_OVERRIDE_ZOOM:\n+ msg = \"ZOOM\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_SETTINGS_OVERRIDE_VENDOR_START:\n+ msg = \"VENDOR_START\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_SETTINGS_OVERRIDES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_SETTINGS_OVERRIDING_FRAME_NUMBER: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AUTOFRAMING: {\n+ switch (value) {\n+ case ANDROID_CONTROL_AUTOFRAMING_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AUTOFRAMING_ON:\n+ msg = \"ON\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AUTOFRAMING_AUTO:\n+ msg = \"AUTO\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AUTOFRAMING_AVAILABLE: {\n+ switch (value) {\n+ case ANDROID_CONTROL_AUTOFRAMING_AVAILABLE_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AUTOFRAMING_AVAILABLE_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AUTOFRAMING_STATE: {\n+ switch (value) {\n+ case ANDROID_CONTROL_AUTOFRAMING_STATE_INACTIVE:\n+ msg = \"INACTIVE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AUTOFRAMING_STATE_FRAMING:\n+ msg = \"FRAMING\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AUTOFRAMING_STATE_CONVERGED:\n+ msg = \"CONVERGED\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_LOW_LIGHT_BOOST_INFO_LUMINANCE_RANGE: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE: {\n+ switch (value) {\n+ case ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE_INACTIVE:\n+ msg = \"INACTIVE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE:\n+ msg = \"ACTIVE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_ZOOM_METHOD: {\n+ switch (value) {\n+ case ANDROID_CONTROL_ZOOM_METHOD_AUTO:\n+ msg = \"AUTO\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_ZOOM_METHOD_ZOOM_RATIO:\n+ msg = \"ZOOM_RATIO\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_PRIORITY_MODE: {\n+ switch (value) {\n+ case ANDROID_CONTROL_AE_PRIORITY_MODE_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY:\n+ msg = \"SENSOR_SENSITIVITY_PRIORITY\";\n+ ret = 0;\n+ break;\n+ case ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY:\n+ msg = \"SENSOR_EXPOSURE_TIME_PRIORITY\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_AVAILABLE_PRIORITY_MODES: {\n+ break;\n+ }\n \n case ANDROID_DEMOSAIC_MODE: {\n switch (value) {\n@@ -1545,6 +2151,21 @@ int camera_metadata_enum_snprint(uint32_t tag,\n }\n break;\n }\n+ case ANDROID_FLASH_STRENGTH_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_SINGLE_STRENGTH_MAX_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_TORCH_STRENGTH_MAX_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_TORCH_STRENGTH_DEFAULT_LEVEL: {\n+ break;\n+ }\n \n case ANDROID_FLASH_INFO_AVAILABLE: {\n switch (value) {\n@@ -1564,6 +2185,12 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_FLASH_INFO_CHARGE_DURATION: {\n break;\n }\n+ case ANDROID_FLASH_INFO_STRENGTH_MAXIMUM_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_INFO_STRENGTH_DEFAULT_LEVEL: {\n+ break;\n+ }\n \n case ANDROID_HOT_PIXEL_MODE: {\n switch (value) {\n@@ -1705,6 +2332,14 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"GYROSCOPE\";\n ret = 0;\n break;\n+ case ANDROID_LENS_POSE_REFERENCE_UNDEFINED:\n+ msg = \"UNDEFINED\";\n+ ret = 0;\n+ break;\n+ case ANDROID_LENS_POSE_REFERENCE_AUTOMOTIVE:\n+ msg = \"AUTOMOTIVE\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -1713,6 +2348,12 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_LENS_DISTORTION: {\n break;\n }\n+ case ANDROID_LENS_DISTORTION_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n \n case ANDROID_LENS_INFO_AVAILABLE_APERTURES: {\n break;\n@@ -1931,6 +2572,38 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"MONOCHROME\";\n ret = 0;\n break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA:\n+ msg = \"SECURE_IMAGE_DATA\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA:\n+ msg = \"SYSTEM_CAMERA\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING:\n+ msg = \"OFFLINE_PROCESSING\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR:\n+ msg = \"ULTRA_HIGH_RESOLUTION_SENSOR\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING:\n+ msg = \"REMOSAIC_REPROCESSING\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT:\n+ msg = \"DYNAMIC_RANGE_TEN_BIT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE:\n+ msg = \"STREAM_USE_CASE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES:\n+ msg = \"COLOR_SPACE_PROFILES\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -1951,6 +2624,146 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS: {\n break;\n }\n+ case ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP: {\n+ switch (value) {\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD:\n+ msg = \"STANDARD\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HLG10:\n+ msg = \"HLG10\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10:\n+ msg = \"HDR10\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_PLUS:\n+ msg = \"HDR10_PLUS\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF:\n+ msg = \"DOLBY_VISION_10B_HDR_REF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_PO:\n+ msg = \"DOLBY_VISION_10B_HDR_REF_PO\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM:\n+ msg = \"DOLBY_VISION_10B_HDR_OEM\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_PO:\n+ msg = \"DOLBY_VISION_10B_HDR_OEM_PO\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF:\n+ msg = \"DOLBY_VISION_8B_HDR_REF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_PO:\n+ msg = \"DOLBY_VISION_8B_HDR_REF_PO\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM:\n+ msg = \"DOLBY_VISION_8B_HDR_OEM\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_PO:\n+ msg = \"DOLBY_VISION_8B_HDR_OEM_PO\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX:\n+ msg = \"MAX\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD_SMPTE_2094_50:\n+ msg = \"STANDARD_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HLG10_SMPTE_2094_50:\n+ msg = \"HLG10_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_SMPTE_2094_50:\n+ msg = \"HDR10_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_PLUS_SMPTE_2094_50:\n+ msg = \"HDR10_PLUS_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_10B_HDR_REF_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_PO_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_10B_HDR_REF_PO_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_10B_HDR_OEM_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_PO_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_10B_HDR_OEM_PO_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_8B_HDR_REF_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_PO_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_8B_HDR_REF_PO_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_8B_HDR_OEM_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_PO_SMPTE_2094_50:\n+ msg = \"DOLBY_VISION_8B_HDR_OEM_PO_SMPTE_2094_50\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX_312:\n+ msg = \"MAX_312\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP: {\n+ switch (value) {\n+ case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED:\n+ msg = \"UNSPECIFIED\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB:\n+ msg = \"SRGB\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3:\n+ msg = \"DISPLAY_P3\";\n+ ret = 0;\n+ break;\n+ case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020_HLG:\n+ msg = \"BT2020_HLG\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n \n case ANDROID_SCALER_CROP_REGION: {\n break;\n@@ -1985,6 +2798,22 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"BLOB\";\n ret = 0;\n break;\n+ case ANDROID_SCALER_AVAILABLE_FORMATS_RAW10:\n+ msg = \"RAW10\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_FORMATS_RAW12:\n+ msg = \"RAW12\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_FORMATS_RAW14:\n+ msg = \"RAW14\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_FORMATS_Y8:\n+ msg = \"Y8\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -2050,6 +2879,207 @@ int camera_metadata_enum_snprint(uint32_t tag,\n }\n break;\n }\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS: {\n+ switch (value) {\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW:\n+ msg = \"PREVIEW\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD:\n+ msg = \"RECORD\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT:\n+ msg = \"VIDEO_SNAPSHOT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT:\n+ msg = \"SNAPSHOT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_ZSL:\n+ msg = \"ZSL\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RAW:\n+ msg = \"RAW\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_LOW_LATENCY_SNAPSHOT:\n+ msg = \"LOW_LATENCY_SNAPSHOT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PUBLIC_END:\n+ msg = \"PUBLIC_END\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_10BIT_OUTPUT:\n+ msg = \"10BIT_OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PUBLIC_END_3_8:\n+ msg = \"PUBLIC_END_3_8\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VENDOR_START:\n+ msg = \"VENDOR_START\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_ROTATE_AND_CROP_MODES: {\n+ break;\n+ }\n+ case ANDROID_SCALER_ROTATE_AND_CROP: {\n+ switch (value) {\n+ case ANDROID_SCALER_ROTATE_AND_CROP_NONE:\n+ msg = \"NONE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_ROTATE_AND_CROP_90:\n+ msg = \"90\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_ROTATE_AND_CROP_180:\n+ msg = \"180\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_ROTATE_AND_CROP_270:\n+ msg = \"270\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_ROTATE_AND_CROP_AUTO:\n+ msg = \"AUTO\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_DEFAULT_SECURE_IMAGE_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS: {\n+ switch (value) {\n+ case ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ switch (value) {\n+ case ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED: {\n+ switch (value) {\n+ case ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_CROP_REGION_SET: {\n+ switch (value) {\n+ case ANDROID_SCALER_CROP_REGION_SET_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_CROP_REGION_SET_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES: {\n+ switch (value) {\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT:\n+ msg = \"DEFAULT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW:\n+ msg = \"PREVIEW\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_STILL_CAPTURE:\n+ msg = \"STILL_CAPTURE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_RECORD:\n+ msg = \"VIDEO_RECORD\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW_VIDEO_STILL:\n+ msg = \"PREVIEW_VIDEO_STILL\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_CALL:\n+ msg = \"VIDEO_CALL\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW:\n+ msg = \"CROPPED_RAW\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VENDOR_START:\n+ msg = \"VENDOR_START\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_RAW_CROP_REGION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_CONCURRENT_MULTI_RESOLUTION_FORMATS: {\n+ break;\n+ }\n \n case ANDROID_SENSOR_EXPOSURE_TIME: {\n break;\n@@ -2225,6 +3255,10 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"PN9\";\n ret = 0;\n break;\n+ case ANDROID_SENSOR_TEST_PATTERN_MODE_BLACK:\n+ msg = \"BLACK\";\n+ ret = 0;\n+ break;\n case ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1:\n msg = \"CUSTOM1\";\n ret = 0;\n@@ -2252,16 +3286,64 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_SENSOR_OPAQUE_RAW_SIZE: {\n break;\n }\n-\n- case ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE: {\n- break;\n- }\n- case ANDROID_SENSOR_INFO_SENSITIVITY_RANGE: {\n+ case ANDROID_SENSOR_OPAQUE_RAW_SIZE_MAXIMUM_RESOLUTION: {\n break;\n }\n- case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT: {\n+ case ANDROID_SENSOR_PIXEL_MODE: {\n switch (value) {\n- case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB:\n+ case ANDROID_SENSOR_PIXEL_MODE_DEFAULT:\n+ msg = \"DEFAULT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION:\n+ msg = \"MAXIMUM_RESOLUTION\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_RAW_BINNING_FACTOR_USED: {\n+ switch (value) {\n+ case ANDROID_SENSOR_RAW_BINNING_FACTOR_USED_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SENSOR_RAW_BINNING_FACTOR_USED_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_READOUT_TIMESTAMP: {\n+ switch (value) {\n+ case ANDROID_SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED:\n+ msg = \"NOT_SUPPORTED\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SENSOR_READOUT_TIMESTAMP_HARDWARE:\n+ msg = \"HARDWARE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_SENSITIVITY_RANGE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT: {\n+ switch (value) {\n+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB:\n msg = \"RGGB\";\n ret = 0;\n break;\n@@ -2281,6 +3363,14 @@ int camera_metadata_enum_snprint(uint32_t tag,\n msg = \"RGB\";\n ret = 0;\n break;\n+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO:\n+ msg = \"MONO\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR:\n+ msg = \"NIR\";\n+ ret = 0;\n+ break;\n default:\n msg = \"error: enum value out of range\";\n }\n@@ -2334,6 +3424,18 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE: {\n break;\n }\n+ case ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_BINNING_FACTOR: {\n+ break;\n+ }\n \n case ANDROID_SHADING_MODE: {\n switch (value) {\n@@ -2516,6 +3618,12 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_STATISTICS_OIS_Y_SHIFTS: {\n break;\n }\n+ case ANDROID_STATISTICS_LENS_INTRINSIC_TIMESTAMPS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_LENS_INTRINSIC_SAMPLES: {\n+ break;\n+ }\n \n case ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES: {\n break;\n@@ -2663,6 +3771,69 @@ int camera_metadata_enum_snprint(uint32_t tag,\n case ANDROID_INFO_VERSION: {\n break;\n }\n+ case ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION: {\n+ switch (value) {\n+ case ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5:\n+ msg = \"HIDL_DEVICE_3_5\";\n+ ret = 0;\n+ break;\n+ case ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE:\n+ msg = \"SESSION_CONFIGURABLE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_INFO_DEVICE_STATE_ORIENTATIONS: {\n+ break;\n+ }\n+ case ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION: {\n+ switch (value) {\n+ case ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_UPSIDE_DOWN_CAKE:\n+ msg = \"UPSIDE_DOWN_CAKE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_VANILLA_ICE_CREAM:\n+ msg = \"VANILLA_ICE_CREAM\";\n+ ret = 0;\n+ break;\n+ case ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_BAKLAVA:\n+ msg = \"BAKLAVA\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_INFO_DEVICE_ID: {\n+ break;\n+ }\n+ case ANDROID_INFO_DEVICE_TYPE: {\n+ switch (value) {\n+ case ANDROID_INFO_DEVICE_TYPE_BUILT_IN:\n+ msg = \"BUILT_IN\";\n+ ret = 0;\n+ break;\n+ case ANDROID_INFO_DEVICE_TYPE_EXTERNAL:\n+ msg = \"EXTERNAL\";\n+ ret = 0;\n+ break;\n+ case ANDROID_INFO_DEVICE_TYPE_VIRTUAL:\n+ msg = \"VIRTUAL\";\n+ ret = 0;\n+ break;\n+ case ANDROID_INFO_DEVICE_TYPE_UNKNOWN:\n+ msg = \"UNKNOWN\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n \n case ANDROID_BLACK_LEVEL_LOCK: {\n switch (value) {\n@@ -2757,6 +3928,72 @@ int camera_metadata_enum_snprint(uint32_t tag,\n }\n break;\n }\n+ case ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS: {\n+ switch (value) {\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ switch (value) {\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ switch (value) {\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n \n case ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS: {\n break;\n@@ -2776,6 +4013,27 @@ int camera_metadata_enum_snprint(uint32_t tag,\n }\n break;\n }\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID: {\n+ break;\n+ }\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_SENSOR_CROP_REGION: {\n+ break;\n+ }\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS: {\n+ switch (value) {\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS_ON:\n+ msg = \"ON\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n \n case ANDROID_DISTORTION_CORRECTION_MODE: {\n switch (value) {\n@@ -2800,13 +4058,4211 @@ int camera_metadata_enum_snprint(uint32_t tag,\n break;\n }\n \n- }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS: {\n+ switch (value) {\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ switch (value) {\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS: {\n+ switch (value) {\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ switch (value) {\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n \n- strncpy(dst, msg, size - 1);\n- dst[size - 1] = '\\0';\n+ case ANDROID_HEIC_INFO_SUPPORTED: {\n+ switch (value) {\n+ case ANDROID_HEIC_INFO_SUPPORTED_FALSE:\n+ msg = \"FALSE\";\n+ ret = 0;\n+ break;\n+ case ANDROID_HEIC_INFO_SUPPORTED_TRUE:\n+ msg = \"TRUE\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT: {\n+ break;\n+ }\n+\n+ case ANDROID_AUTOMOTIVE_LOCATION: {\n+ switch (value) {\n+ case ANDROID_AUTOMOTIVE_LOCATION_INTERIOR:\n+ msg = \"INTERIOR\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_OTHER:\n+ msg = \"EXTERIOR_OTHER\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_FRONT:\n+ msg = \"EXTERIOR_FRONT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_REAR:\n+ msg = \"EXTERIOR_REAR\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_LEFT:\n+ msg = \"EXTERIOR_LEFT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_RIGHT:\n+ msg = \"EXTERIOR_RIGHT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTRA_OTHER:\n+ msg = \"EXTRA_OTHER\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTRA_FRONT:\n+ msg = \"EXTRA_FRONT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTRA_REAR:\n+ msg = \"EXTRA_REAR\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTRA_LEFT:\n+ msg = \"EXTRA_LEFT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LOCATION_EXTRA_RIGHT:\n+ msg = \"EXTRA_RIGHT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_AUTOMOTIVE_LENS_FACING: {\n+ switch (value) {\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_OTHER:\n+ msg = \"EXTERIOR_OTHER\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_FRONT:\n+ msg = \"EXTERIOR_FRONT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_REAR:\n+ msg = \"EXTERIOR_REAR\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_LEFT:\n+ msg = \"EXTERIOR_LEFT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_RIGHT:\n+ msg = \"EXTERIOR_RIGHT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_OTHER:\n+ msg = \"INTERIOR_OTHER\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_LEFT:\n+ msg = \"INTERIOR_SEAT_ROW_1_LEFT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_CENTER:\n+ msg = \"INTERIOR_SEAT_ROW_1_CENTER\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_RIGHT:\n+ msg = \"INTERIOR_SEAT_ROW_1_RIGHT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_LEFT:\n+ msg = \"INTERIOR_SEAT_ROW_2_LEFT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_CENTER:\n+ msg = \"INTERIOR_SEAT_ROW_2_CENTER\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_RIGHT:\n+ msg = \"INTERIOR_SEAT_ROW_2_RIGHT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_LEFT:\n+ msg = \"INTERIOR_SEAT_ROW_3_LEFT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_CENTER:\n+ msg = \"INTERIOR_SEAT_ROW_3_CENTER\";\n+ ret = 0;\n+ break;\n+ case ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_RIGHT:\n+ msg = \"INTERIOR_SEAT_ROW_3_RIGHT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_EXTENSION_STRENGTH: {\n+ break;\n+ }\n+ case ANDROID_EXTENSION_CURRENT_TYPE: {\n+ break;\n+ }\n+ case ANDROID_EXTENSION_NIGHT_MODE_INDICATOR: {\n+ switch (value) {\n+ case ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_UNKNOWN:\n+ msg = \"UNKNOWN\";\n+ ret = 0;\n+ break;\n+ case ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_ON:\n+ msg = \"ON\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS: {\n+ switch (value) {\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ switch (value) {\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT:\n+ msg = \"OUTPUT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT:\n+ msg = \"INPUT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+\n+ case ANDROID_SHARED_SESSION_COLOR_SPACE: {\n+ switch (value) {\n+ case ANDROID_SHARED_SESSION_COLOR_SPACE_UNSPECIFIED:\n+ msg = \"UNSPECIFIED\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SHARED_SESSION_COLOR_SPACE_SRGB:\n+ msg = \"SRGB\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SHARED_SESSION_COLOR_SPACE_DISPLAY_P3:\n+ msg = \"DISPLAY_P3\";\n+ ret = 0;\n+ break;\n+ case ANDROID_SHARED_SESSION_COLOR_SPACE_BT2020_HLG:\n+ msg = \"BT2020_HLG\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_SHARED_SESSION_OUTPUT_CONFIGURATIONS: {\n+ break;\n+ }\n+\n+ case ANDROID_DESKTOP_EFFECTS_CAPABILITIES: {\n+ switch (value) {\n+ case ANDROID_DESKTOP_EFFECTS_CAPABILITIES_BACKGROUND_BLUR:\n+ msg = \"BACKGROUND_BLUR\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DESKTOP_EFFECTS_CAPABILITIES_FACE_RETOUCH:\n+ msg = \"FACE_RETOUCH\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DESKTOP_EFFECTS_CAPABILITIES_PORTRAIT_RELIGHT:\n+ msg = \"PORTRAIT_RELIGHT\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODES: {\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE: {\n+ switch (value) {\n+ case ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_LIGHT:\n+ msg = \"LIGHT\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_FULL:\n+ msg = \"FULL\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE: {\n+ switch (value) {\n+ case ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE_ON:\n+ msg = \"ON\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_STRENGTH: {\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE: {\n+ switch (value) {\n+ case ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE_OFF:\n+ msg = \"OFF\";\n+ ret = 0;\n+ break;\n+ case ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE_ON:\n+ msg = \"ON\";\n+ ret = 0;\n+ break;\n+ default:\n+ msg = \"error: enum value out of range\";\n+ }\n+ break;\n+ }\n+\n+ }\n+\n+ strncpy(dst, msg, size - 1);\n+ dst[size - 1] = '\\0';\n+\n+ return ret;\n+}\n+\n+int camera_metadata_enum_value(uint32_t tag,\n+ const char *name,\n+ size_t size,\n+ uint32_t *value) {\n+ if ((name == NULL) || (value == NULL)) {\n+ return -1;\n+ }\n+\n+ const char *enumName = NULL;\n+ int ret = -1;\n+\n+ switch(tag) {\n+ case ANDROID_COLOR_CORRECTION_MODE: {\n+ enumName = \"TRANSFORM_MATRIX\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_COLOR_CORRECTION_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_COLOR_CORRECTION_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CCT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_COLOR_CORRECTION_MODE_CCT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_TRANSFORM: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_GAINS: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_ABERRATION_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_COLOR_TINT: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE: {\n+ break;\n+ }\n+ case ANDROID_COLOR_CORRECTION_AVAILABLE_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_CONTROL_AE_ANTIBANDING_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"50HZ\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"60HZ\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AUTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_LOCK: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_LOCK_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_LOCK_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON_AUTO_FLASH\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON_ALWAYS_FLASH\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_MODE_ON_ALWAYS_FLASH;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON_AUTO_FLASH_REDEYE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON_EXTERNAL_FLASH\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_MODE_ON_EXTERNAL_FLASH;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_REGIONS: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_TARGET_FPS_RANGE: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER: {\n+ enumName = \"IDLE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"START\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_START;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CANCEL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AUTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_MODE_AUTO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MACRO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_MODE_MACRO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CONTINUOUS_VIDEO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CONTINUOUS_PICTURE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EDOF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_MODE_EDOF;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_REGIONS: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_TRIGGER: {\n+ enumName = \"IDLE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_TRIGGER_IDLE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"START\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_TRIGGER_START;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CANCEL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_TRIGGER_CANCEL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_LOCK: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_LOCK_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_LOCK_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AUTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_AUTO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INCANDESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_INCANDESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FLUORESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_FLUORESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"WARM_FLUORESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_WARM_FLUORESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DAYLIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_DAYLIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CLOUDY_DAYLIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_CLOUDY_DAYLIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TWILIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_TWILIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SHADE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_MODE_SHADE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_REGIONS: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_CAPTURE_INTENT: {\n+ enumName = \"CUSTOM\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_CUSTOM;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PREVIEW\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STILL_CAPTURE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VIDEO_RECORD\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VIDEO_SNAPSHOT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ZERO_SHUTTER_LAG\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MANUAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_MANUAL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MOTION_TRACKING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_CAPTURE_INTENT_MOTION_TRACKING;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_EFFECT_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MONO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_MONO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"NEGATIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_NEGATIVE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SOLARIZE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_SOLARIZE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SEPIA\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_SEPIA;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"POSTERIZE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_POSTERIZE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"WHITEBOARD\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_WHITEBOARD;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BLACKBOARD\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_BLACKBOARD;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AQUA\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EFFECT_MODE_AQUA;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AUTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_MODE_AUTO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"USE_SCENE_MODE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_MODE_USE_SCENE_MODE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"OFF_KEEP_STATE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_MODE_OFF_KEEP_STATE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"USE_EXTENDED_SCENE_MODE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_MODE_USE_EXTENDED_SCENE_MODE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_SCENE_MODE: {\n+ enumName = \"DISABLED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_DISABLED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FACE_PRIORITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ACTION\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_ACTION;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PORTRAIT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_PORTRAIT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"LANDSCAPE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_LANDSCAPE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"NIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_NIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"NIGHT_PORTRAIT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"THEATRE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_THEATRE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BEACH\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_BEACH;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SNOW\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_SNOW;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SUNSET\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_SUNSET;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STEADYPHOTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FIREWORKS\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_FIREWORKS;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SPORTS\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_SPORTS;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PARTY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_PARTY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CANDLELIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BARCODE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_BARCODE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_SPEED_VIDEO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HDR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_HDR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FACE_PRIORITY_LOW_LIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY_LOW_LIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DEVICE_CUSTOM_START\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_DEVICE_CUSTOM_START;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DEVICE_CUSTOM_END\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SCENE_MODE_DEVICE_CUSTOM_END;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PREVIEW_STABILIZATION\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_AVAILABLE_MODES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_COMPENSATION_RANGE: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_COMPENSATION_STEP: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_AVAILABLE_MODES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_EFFECTS: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_SCENE_MODES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_AVAILABLE_MODES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_MAX_REGIONS: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_SCENE_MODE_OVERRIDES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_PRECAPTURE_ID: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_STATE: {\n+ enumName = \"INACTIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_STATE_INACTIVE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SEARCHING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_STATE_SEARCHING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CONVERGED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_STATE_CONVERGED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"LOCKED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_STATE_LOCKED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FLASH_REQUIRED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_STATE_FLASH_REQUIRED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PRECAPTURE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_STATE_PRECAPTURE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_STATE: {\n+ enumName = \"INACTIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_STATE_INACTIVE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PASSIVE_SCAN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_STATE_PASSIVE_SCAN;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PASSIVE_FOCUSED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_STATE_PASSIVE_FOCUSED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ACTIVE_SCAN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_STATE_ACTIVE_SCAN;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FOCUSED_LOCKED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_STATE_FOCUSED_LOCKED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"NOT_FOCUSED_LOCKED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PASSIVE_UNFOCUSED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_STATE_PASSIVE_UNFOCUSED;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_TRIGGER_ID: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_STATE: {\n+ enumName = \"INACTIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_STATE_INACTIVE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SEARCHING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_STATE_SEARCHING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CONVERGED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_STATE_CONVERGED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"LOCKED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_STATE_LOCKED;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_LOCK_AVAILABLE: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_LOCK_AVAILABLE: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_MODES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_ENABLE_ZSL: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_ENABLE_ZSL_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_ENABLE_ZSL_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_SCENE_CHANGE: {\n+ enumName = \"NOT_DETECTED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_SCENE_CHANGE_NOT_DETECTED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DETECTED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_SCENE_CHANGE_DETECTED;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_EXTENDED_SCENE_MODE: {\n+ enumName = \"DISABLED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EXTENDED_SCENE_MODE_DISABLED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BOKEH_STILL_CAPTURE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BOKEH_CONTINUOUS\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VENDOR_START\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_EXTENDED_SCENE_MODE_VENDOR_START;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_ZOOM_RATIO_RANGE: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_ZOOM_RATIO: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AF_REGIONS_SET: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_REGIONS_SET_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AF_REGIONS_SET_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_REGIONS_SET: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_REGIONS_SET_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_REGIONS_SET_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AWB_REGIONS_SET: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_REGIONS_SET_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AWB_REGIONS_SET_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_SETTINGS_OVERRIDE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SETTINGS_OVERRIDE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ZOOM\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SETTINGS_OVERRIDE_ZOOM;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VENDOR_START\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_SETTINGS_OVERRIDE_VENDOR_START;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AVAILABLE_SETTINGS_OVERRIDES: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_SETTINGS_OVERRIDING_FRAME_NUMBER: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_AUTOFRAMING: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_ON;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AUTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_AUTO;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AUTOFRAMING_AVAILABLE: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_AVAILABLE_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_AVAILABLE_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AUTOFRAMING_STATE: {\n+ enumName = \"INACTIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_STATE_INACTIVE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FRAMING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_STATE_FRAMING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CONVERGED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AUTOFRAMING_STATE_CONVERGED;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_LOW_LIGHT_BOOST_INFO_LUMINANCE_RANGE: {\n+ break;\n+ }\n+ case ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE: {\n+ enumName = \"INACTIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE_INACTIVE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ACTIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_ZOOM_METHOD: {\n+ enumName = \"AUTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_ZOOM_METHOD_AUTO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ZOOM_RATIO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_ZOOM_METHOD_ZOOM_RATIO;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_PRIORITY_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_PRIORITY_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SENSOR_SENSITIVITY_PRIORITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SENSOR_EXPOSURE_TIME_PRIORITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_CONTROL_AE_AVAILABLE_PRIORITY_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_DEMOSAIC_MODE: {\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEMOSAIC_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEMOSAIC_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_EDGE_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_EDGE_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_EDGE_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_EDGE_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ZERO_SHUTTER_LAG\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_EDGE_MODE_ZERO_SHUTTER_LAG;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_EDGE_STRENGTH: {\n+ break;\n+ }\n+ case ANDROID_EDGE_AVAILABLE_EDGE_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_FLASH_FIRING_POWER: {\n+ break;\n+ }\n+ case ANDROID_FLASH_FIRING_TIME: {\n+ break;\n+ }\n+ case ANDROID_FLASH_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SINGLE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_MODE_SINGLE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TORCH\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_MODE_TORCH;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_FLASH_COLOR_TEMPERATURE: {\n+ break;\n+ }\n+ case ANDROID_FLASH_MAX_ENERGY: {\n+ break;\n+ }\n+ case ANDROID_FLASH_STATE: {\n+ enumName = \"UNAVAILABLE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_STATE_UNAVAILABLE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CHARGING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_STATE_CHARGING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"READY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_STATE_READY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FIRED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_STATE_FIRED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PARTIAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_STATE_PARTIAL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_FLASH_STRENGTH_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_SINGLE_STRENGTH_MAX_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_TORCH_STRENGTH_MAX_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_TORCH_STRENGTH_DEFAULT_LEVEL: {\n+ break;\n+ }\n+\n+ case ANDROID_FLASH_INFO_AVAILABLE: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_INFO_AVAILABLE_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_FLASH_INFO_AVAILABLE_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_FLASH_INFO_CHARGE_DURATION: {\n+ break;\n+ }\n+ case ANDROID_FLASH_INFO_STRENGTH_MAXIMUM_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_FLASH_INFO_STRENGTH_DEFAULT_LEVEL: {\n+ break;\n+ }\n+\n+ case ANDROID_HOT_PIXEL_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HOT_PIXEL_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HOT_PIXEL_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HOT_PIXEL_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_JPEG_GPS_COORDINATES: {\n+ break;\n+ }\n+ case ANDROID_JPEG_GPS_PROCESSING_METHOD: {\n+ break;\n+ }\n+ case ANDROID_JPEG_GPS_TIMESTAMP: {\n+ break;\n+ }\n+ case ANDROID_JPEG_ORIENTATION: {\n+ break;\n+ }\n+ case ANDROID_JPEG_QUALITY: {\n+ break;\n+ }\n+ case ANDROID_JPEG_THUMBNAIL_QUALITY: {\n+ break;\n+ }\n+ case ANDROID_JPEG_THUMBNAIL_SIZE: {\n+ break;\n+ }\n+ case ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES: {\n+ break;\n+ }\n+ case ANDROID_JPEG_MAX_SIZE: {\n+ break;\n+ }\n+ case ANDROID_JPEG_SIZE: {\n+ break;\n+ }\n+\n+ case ANDROID_LENS_APERTURE: {\n+ break;\n+ }\n+ case ANDROID_LENS_FILTER_DENSITY: {\n+ break;\n+ }\n+ case ANDROID_LENS_FOCAL_LENGTH: {\n+ break;\n+ }\n+ case ANDROID_LENS_FOCUS_DISTANCE: {\n+ break;\n+ }\n+ case ANDROID_LENS_OPTICAL_STABILIZATION_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_LENS_FACING: {\n+ enumName = \"FRONT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_FACING_FRONT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BACK\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_FACING_BACK;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERNAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_FACING_EXTERNAL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_LENS_POSE_ROTATION: {\n+ break;\n+ }\n+ case ANDROID_LENS_POSE_TRANSLATION: {\n+ break;\n+ }\n+ case ANDROID_LENS_FOCUS_RANGE: {\n+ break;\n+ }\n+ case ANDROID_LENS_STATE: {\n+ enumName = \"STATIONARY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_STATE_STATIONARY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MOVING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_STATE_MOVING;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_LENS_INTRINSIC_CALIBRATION: {\n+ break;\n+ }\n+ case ANDROID_LENS_RADIAL_DISTORTION: {\n+ break;\n+ }\n+ case ANDROID_LENS_POSE_REFERENCE: {\n+ enumName = \"PRIMARY_CAMERA\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_POSE_REFERENCE_PRIMARY_CAMERA;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"GYROSCOPE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_POSE_REFERENCE_GYROSCOPE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"UNDEFINED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_POSE_REFERENCE_UNDEFINED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AUTOMOTIVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_POSE_REFERENCE_AUTOMOTIVE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_LENS_DISTORTION: {\n+ break;\n+ }\n+ case ANDROID_LENS_DISTORTION_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+\n+ case ANDROID_LENS_INFO_AVAILABLE_APERTURES: {\n+ break;\n+ }\n+ case ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES: {\n+ break;\n+ }\n+ case ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS: {\n+ break;\n+ }\n+ case ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION: {\n+ break;\n+ }\n+ case ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE: {\n+ break;\n+ }\n+ case ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE: {\n+ break;\n+ }\n+ case ANDROID_LENS_INFO_SHADING_MAP_SIZE: {\n+ break;\n+ }\n+ case ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION: {\n+ enumName = \"UNCALIBRATED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"APPROXIMATE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CALIBRATED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_NOISE_REDUCTION_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_NOISE_REDUCTION_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_NOISE_REDUCTION_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MINIMAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_NOISE_REDUCTION_MODE_MINIMAL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ZERO_SHUTTER_LAG\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_NOISE_REDUCTION_STRENGTH: {\n+ break;\n+ }\n+ case ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_QUIRKS_METERING_CROP_REGION: {\n+ break;\n+ }\n+ case ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO: {\n+ break;\n+ }\n+ case ANDROID_QUIRKS_USE_ZSL_FORMAT: {\n+ break;\n+ }\n+ case ANDROID_QUIRKS_USE_PARTIAL_RESULT: {\n+ break;\n+ }\n+ case ANDROID_QUIRKS_PARTIAL_RESULT: {\n+ enumName = \"FINAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_QUIRKS_PARTIAL_RESULT_FINAL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PARTIAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_QUIRKS_PARTIAL_RESULT_PARTIAL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_REQUEST_FRAME_COUNT: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_ID: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_INPUT_STREAMS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_METADATA_MODE: {\n+ enumName = \"NONE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_METADATA_MODE_NONE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FULL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_METADATA_MODE_FULL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_REQUEST_OUTPUT_STREAMS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_TYPE: {\n+ enumName = \"CAPTURE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_TYPE_CAPTURE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"REPROCESS\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_TYPE_REPROCESS;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_MAX_NUM_REPROCESS_STREAMS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_PIPELINE_DEPTH: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_PIPELINE_MAX_DEPTH: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_PARTIAL_RESULT_COUNT: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_CAPABILITIES: {\n+ enumName = \"BACKWARD_COMPATIBLE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MANUAL_SENSOR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MANUAL_POST_PROCESSING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RAW\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PRIVATE_REPROCESSING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"READ_SENSOR_SETTINGS\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BURST_CAPTURE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"YUV_REPROCESSING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DEPTH_OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CONSTRAINED_HIGH_SPEED_VIDEO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MOTION_TRACKING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"LOGICAL_MULTI_CAMERA\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MONOCHROME\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SECURE_IMAGE_DATA\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SYSTEM_CAMERA\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"OFFLINE_PROCESSING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ULTRA_HIGH_RESOLUTION_SENSOR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"REMOSAIC_REPROCESSING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DYNAMIC_RANGE_TEN_BIT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STREAM_USE_CASE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"COLOR_SPACE_PROFILES\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_RESULT_KEYS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_SESSION_KEYS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP: {\n+ enumName = \"STANDARD\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HLG10\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HLG10;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HDR10\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HDR10_PLUS\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_PLUS;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_REF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_REF_PO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_PO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_OEM\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_OEM_PO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_PO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_REF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_REF_PO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_PO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_OEM\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_OEM_PO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_PO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MAX\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STANDARD_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HLG10_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HLG10_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HDR10_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HDR10_PLUS_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10_PLUS_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_REF_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_REF_PO_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_REF_PO_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_OEM_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_10B_HDR_OEM_PO_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_10B_HDR_OEM_PO_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_REF_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_REF_PO_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_REF_PO_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_OEM_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DOLBY_VISION_8B_HDR_OEM_PO_SMPTE_2094_50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_DOLBY_VISION_8B_HDR_OEM_PO_SMPTE_2094_50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MAX_312\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX_312;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE: {\n+ break;\n+ }\n+ case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP: {\n+ enumName = \"UNSPECIFIED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SRGB\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DISPLAY_P3\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BT2020_HLG\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020_HLG;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_SCALER_CROP_REGION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_FORMATS: {\n+ enumName = \"RAW16\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_RAW16;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RAW_OPAQUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_RAW_OPAQUE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"YV12\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_YV12;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"YCrCb_420_SP\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_YCrCb_420_SP;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"IMPLEMENTATION_DEFINED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"YCbCr_420_888\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BLOB\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_BLOB;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RAW10\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_RAW10;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RAW12\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_RAW12;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RAW14\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_RAW14;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"Y8\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_FORMATS_Y8;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_JPEG_SIZES: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_RAW_SIZES: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_SCALER_CROPPING_TYPE: {\n+ enumName = \"CENTER_ONLY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FREEFORM\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_CROPPING_TYPE_FREEFORM;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS: {\n+ enumName = \"PREVIEW\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RECORD\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VIDEO_SNAPSHOT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SNAPSHOT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ZSL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_ZSL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RAW\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RAW;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"LOW_LATENCY_SNAPSHOT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_LOW_LATENCY_SNAPSHOT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PUBLIC_END\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PUBLIC_END;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"10BIT_OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_10BIT_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PUBLIC_END_3_8\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PUBLIC_END_3_8;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VENDOR_START\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VENDOR_START;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_ROTATE_AND_CROP_MODES: {\n+ break;\n+ }\n+ case ANDROID_SCALER_ROTATE_AND_CROP: {\n+ enumName = \"NONE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_ROTATE_AND_CROP_NONE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"90\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_ROTATE_AND_CROP_90;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"180\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_ROTATE_AND_CROP_180;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"270\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_ROTATE_AND_CROP_270;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"AUTO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_ROTATE_AND_CROP_AUTO;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_DEFAULT_SECURE_IMAGE_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_CROP_REGION_SET: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_CROP_REGION_SET_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_CROP_REGION_SET_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES: {\n+ enumName = \"DEFAULT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PREVIEW\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STILL_CAPTURE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_STILL_CAPTURE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VIDEO_RECORD\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_RECORD;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PREVIEW_VIDEO_STILL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW_VIDEO_STILL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VIDEO_CALL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_CALL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CROPPED_RAW\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VENDOR_START\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VENDOR_START;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SCALER_RAW_CROP_REGION: {\n+ break;\n+ }\n+ case ANDROID_SCALER_CONCURRENT_MULTI_RESOLUTION_FORMATS: {\n+ break;\n+ }\n+\n+ case ANDROID_SENSOR_EXPOSURE_TIME: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_FRAME_DURATION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_SENSITIVITY: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1: {\n+ enumName = \"DAYLIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FLUORESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TUNGSTEN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FLASH\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLASH;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FINE_WEATHER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CLOUDY_WEATHER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SHADE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_SHADE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DAYLIGHT_FLUORESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DAY_WHITE_FLUORESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"COOL_WHITE_FLUORESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"WHITE_FLUORESCENT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STANDARD_A\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STANDARD_B\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"STANDARD_C\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"D55\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D55;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"D65\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D65;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"D75\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D75;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"D50\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D50;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ISO_STUDIO_TUNGSTEN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT2: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_CALIBRATION_TRANSFORM1: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_CALIBRATION_TRANSFORM2: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_COLOR_TRANSFORM1: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_COLOR_TRANSFORM2: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_FORWARD_MATRIX1: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_FORWARD_MATRIX2: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_BASE_GAIN_FACTOR: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_BLACK_LEVEL_PATTERN: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_ORIENTATION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_PROFILE_HUE_SAT_MAP_DIMENSIONS: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_TIMESTAMP: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_TEMPERATURE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_NEUTRAL_COLOR_POINT: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_NOISE_PROFILE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_PROFILE_HUE_SAT_MAP: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_PROFILE_TONE_CURVE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_GREEN_SPLIT: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_TEST_PATTERN_DATA: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_TEST_PATTERN_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SOLID_COLOR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"COLOR_BARS\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"COLOR_BARS_FADE_TO_GRAY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PN9\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_TEST_PATTERN_MODE_PN9;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BLACK\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_TEST_PATTERN_MODE_BLACK;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CUSTOM1\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_ROLLING_SHUTTER_SKEW: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_OPTICAL_BLACK_REGIONS: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_OPAQUE_RAW_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_OPAQUE_RAW_SIZE_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_PIXEL_MODE: {\n+ enumName = \"DEFAULT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_PIXEL_MODE_DEFAULT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MAXIMUM_RESOLUTION\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_RAW_BINNING_FACTOR_USED: {\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_RAW_BINNING_FACTOR_USED_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_RAW_BINNING_FACTOR_USED_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_READOUT_TIMESTAMP: {\n+ enumName = \"NOT_SUPPORTED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HARDWARE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_READOUT_TIMESTAMP_HARDWARE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_SENSITIVITY_RANGE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT: {\n+ enumName = \"RGGB\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"GRBG\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"GBRG\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BGGR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"RGB\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"MONO\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"NIR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_MAX_FRAME_DURATION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_PHYSICAL_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_WHITE_LEVEL: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE: {\n+ enumName = \"UNKNOWN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"REALTIME\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_LENS_SHADING_APPLIED: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_LENS_SHADING_APPLIED_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SENSOR_INFO_LENS_SHADING_APPLIED_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_SENSOR_INFO_BINNING_FACTOR: {\n+ break;\n+ }\n+\n+ case ANDROID_SHADING_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SHADING_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SHADING_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SHADING_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SHADING_STRENGTH: {\n+ break;\n+ }\n+ case ANDROID_SHADING_AVAILABLE_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_STATISTICS_FACE_DETECT_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SIMPLE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_FACE_DETECT_MODE_SIMPLE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FULL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_FACE_DETECT_MODE_FULL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_STATISTICS_HISTOGRAM_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_HISTOGRAM_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_HISTOGRAM_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_STATISTICS_SHARPNESS_MAP_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_SHARPNESS_MAP_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_SHARPNESS_MAP_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_STATISTICS_FACE_IDS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_FACE_LANDMARKS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_FACE_RECTANGLES: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_FACE_SCORES: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_HISTOGRAM: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_SHARPNESS_MAP: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_LENS_SHADING_CORRECTION_MAP: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_LENS_SHADING_MAP: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_PREDICTED_COLOR_GAINS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_PREDICTED_COLOR_TRANSFORM: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_SCENE_FLICKER: {\n+ enumName = \"NONE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_SCENE_FLICKER_NONE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"50HZ\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_SCENE_FLICKER_50HZ;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"60HZ\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_SCENE_FLICKER_60HZ;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_STATISTICS_HOT_PIXEL_MAP: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_LENS_SHADING_MAP_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_STATISTICS_OIS_DATA_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_OIS_DATA_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_STATISTICS_OIS_DATA_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_STATISTICS_OIS_TIMESTAMPS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_OIS_X_SHIFTS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_OIS_Y_SHIFTS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_LENS_INTRINSIC_TIMESTAMPS: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_LENS_INTRINSIC_SAMPLES: {\n+ break;\n+ }\n+\n+ case ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_MAX_FACE_COUNT: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES: {\n+ break;\n+ }\n+ case ANDROID_STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_TONEMAP_CURVE_BLUE: {\n+ break;\n+ }\n+ case ANDROID_TONEMAP_CURVE_GREEN: {\n+ break;\n+ }\n+ case ANDROID_TONEMAP_CURVE_RED: {\n+ break;\n+ }\n+ case ANDROID_TONEMAP_MODE: {\n+ enumName = \"CONTRAST_CURVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_TONEMAP_MODE_CONTRAST_CURVE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_TONEMAP_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_TONEMAP_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"GAMMA_VALUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_TONEMAP_MODE_GAMMA_VALUE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PRESET_CURVE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_TONEMAP_MODE_PRESET_CURVE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_TONEMAP_MAX_CURVE_POINTS: {\n+ break;\n+ }\n+ case ANDROID_TONEMAP_AVAILABLE_TONE_MAP_MODES: {\n+ break;\n+ }\n+ case ANDROID_TONEMAP_GAMMA: {\n+ break;\n+ }\n+ case ANDROID_TONEMAP_PRESET_CURVE: {\n+ enumName = \"SRGB\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_TONEMAP_PRESET_CURVE_SRGB;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"REC709\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_TONEMAP_PRESET_CURVE_REC709;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_LED_TRANSMIT: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LED_TRANSMIT_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LED_TRANSMIT_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_LED_AVAILABLE_LEDS: {\n+ enumName = \"TRANSMIT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LED_AVAILABLE_LEDS_TRANSMIT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL: {\n+ enumName = \"LIMITED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FULL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_FULL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"LEGACY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"3\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERNAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_INFO_VERSION: {\n+ break;\n+ }\n+ case ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION: {\n+ enumName = \"HIDL_DEVICE_3_5\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SESSION_CONFIGURABLE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_INFO_DEVICE_STATE_ORIENTATIONS: {\n+ break;\n+ }\n+ case ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION: {\n+ enumName = \"UPSIDE_DOWN_CAKE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_UPSIDE_DOWN_CAKE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VANILLA_ICE_CREAM\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_VANILLA_ICE_CREAM;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BAKLAVA\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_SESSION_CONFIGURATION_QUERY_VERSION_BAKLAVA;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_INFO_DEVICE_ID: {\n+ break;\n+ }\n+ case ANDROID_INFO_DEVICE_TYPE: {\n+ enumName = \"BUILT_IN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_DEVICE_TYPE_BUILT_IN;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERNAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_DEVICE_TYPE_EXTERNAL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"VIRTUAL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_DEVICE_TYPE_VIRTUAL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"UNKNOWN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_INFO_DEVICE_TYPE_UNKNOWN;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_BLACK_LEVEL_LOCK: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_BLACK_LEVEL_LOCK_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_BLACK_LEVEL_LOCK_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_SYNC_FRAME_NUMBER: {\n+ enumName = \"CONVERGING\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SYNC_FRAME_NUMBER_CONVERGING;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"UNKNOWN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SYNC_FRAME_NUMBER_UNKNOWN;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SYNC_MAX_LATENCY: {\n+ enumName = \"PER_FRAME_CONTROL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SYNC_MAX_LATENCY_PER_FRAME_CONTROL;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"UNKNOWN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SYNC_MAX_LATENCY_UNKNOWN;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_REPROCESS_EFFECTIVE_EXPOSURE_FACTOR: {\n+ break;\n+ }\n+ case ANDROID_REPROCESS_MAX_CAPTURE_STALL: {\n+ break;\n+ }\n+\n+ case ANDROID_DEPTH_MAX_DEPTH_SAMPLES: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+\n+ case ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS: {\n+ break;\n+ }\n+ case ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE: {\n+ enumName = \"APPROXIMATE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"CALIBRATED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID: {\n+ break;\n+ }\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_SENSOR_CROP_REGION: {\n+ break;\n+ }\n+ case ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_DISTORTION_CORRECTION_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DISTORTION_CORRECTION_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FAST\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DISTORTION_CORRECTION_MODE_FAST;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"HIGH_QUALITY\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DISTORTION_CORRECTION_MODE_HIGH_QUALITY;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES: {\n+ break;\n+ }\n+\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+\n+ case ANDROID_HEIC_INFO_SUPPORTED: {\n+ enumName = \"FALSE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_INFO_SUPPORTED_FALSE;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"TRUE\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_HEIC_INFO_SUPPORTED_TRUE;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT: {\n+ break;\n+ }\n+\n+ case ANDROID_AUTOMOTIVE_LOCATION: {\n+ enumName = \"INTERIOR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_INTERIOR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_OTHER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_OTHER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_FRONT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_FRONT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_REAR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_REAR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_LEFT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_LEFT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_RIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTERIOR_RIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTRA_OTHER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTRA_OTHER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTRA_FRONT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTRA_FRONT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTRA_REAR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTRA_REAR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTRA_LEFT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTRA_LEFT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTRA_RIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LOCATION_EXTRA_RIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_AUTOMOTIVE_LENS_FACING: {\n+ enumName = \"EXTERIOR_OTHER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_OTHER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_FRONT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_FRONT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_REAR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_REAR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_LEFT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_LEFT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"EXTERIOR_RIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_EXTERIOR_RIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_OTHER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_OTHER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_1_LEFT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_LEFT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_1_CENTER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_CENTER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_1_RIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_RIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_2_LEFT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_LEFT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_2_CENTER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_CENTER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_2_RIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_RIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_3_LEFT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_LEFT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_3_CENTER\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_CENTER;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INTERIOR_SEAT_ROW_3_RIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_RIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_EXTENSION_STRENGTH: {\n+ break;\n+ }\n+ case ANDROID_EXTENSION_CURRENT_TYPE: {\n+ break;\n+ }\n+ case ANDROID_EXTENSION_NIGHT_MODE_INDICATOR: {\n+ enumName = \"UNKNOWN\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_UNKNOWN;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS: {\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION: {\n+ enumName = \"OUTPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"INPUT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+ case ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS_MAXIMUM_RESOLUTION: {\n+ break;\n+ }\n+\n+ case ANDROID_SHARED_SESSION_COLOR_SPACE: {\n+ enumName = \"UNSPECIFIED\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SHARED_SESSION_COLOR_SPACE_UNSPECIFIED;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"SRGB\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SHARED_SESSION_COLOR_SPACE_SRGB;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"DISPLAY_P3\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SHARED_SESSION_COLOR_SPACE_DISPLAY_P3;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"BT2020_HLG\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_SHARED_SESSION_COLOR_SPACE_BT2020_HLG;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_SHARED_SESSION_OUTPUT_CONFIGURATIONS: {\n+ break;\n+ }\n+\n+ case ANDROID_DESKTOP_EFFECTS_CAPABILITIES: {\n+ enumName = \"BACKGROUND_BLUR\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_CAPABILITIES_BACKGROUND_BLUR;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FACE_RETOUCH\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_CAPABILITIES_FACE_RETOUCH;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"PORTRAIT_RELIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_CAPABILITIES_PORTRAIT_RELIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODES: {\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"LIGHT\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_LIGHT;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"FULL\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE_FULL;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_STRENGTH: {\n+ break;\n+ }\n+ case ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE: {\n+ enumName = \"OFF\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE_OFF;\n+ ret = 0;\n+ break;\n+ }\n+ enumName = \"ON\";\n+ if (strncmp(name, enumName, size) == 0) {\n+ *value = ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE_ON;\n+ ret = 0;\n+ break;\n+ }\n+ break;\n+ }\n+\n+ }\n \n return ret;\n }\n \n \n-#define CAMERA_METADATA_ENUM_STRING_MAX_SIZE 29\n+#define CAMERA_METADATA_ENUM_STRING_MAX_SIZE 42\n", "prefixes": [ "RFC", "v1", "49/54" ] }