Patch Detail
Show a patch.
GET /api/1.1/patches/10826/?format=api
{ "id": 10826, "url": "https://patchwork.libcamera.org/api/1.1/patches/10826/?format=api", "web_url": "https://patchwork.libcamera.org/patch/10826/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/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": "<20210105190522.682324-13-jacopo@jmondi.org>", "date": "2021-01-05T19:05:22", "name": "[libcamera-devel,12/12] android: camera_device: Report the required dynamic metadata", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "d2a579b26ee6123750d315de45822dd690a952d5", "submitter": { "id": 3, "url": "https://patchwork.libcamera.org/api/1.1/people/3/?format=api", "name": "Jacopo Mondi", "email": "jacopo@jmondi.org" }, "delegate": { "id": 15, "url": "https://patchwork.libcamera.org/api/1.1/users/15/?format=api", "username": "jmondi", "first_name": "Jacopo", "last_name": "Mondi", "email": "jacopo@jmondi.org" }, "mbox": "https://patchwork.libcamera.org/patch/10826/mbox/", "series": [ { "id": 1568, "url": "https://patchwork.libcamera.org/api/1.1/series/1568/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1568", "date": "2021-01-05T19:05:10", "name": "android: Exposure times + scaler crop + android metadata", "version": 1, "mbox": "https://patchwork.libcamera.org/series/1568/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/10826/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/10826/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 3C9BCC0F1A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 5 Jan 2021 19:05:23 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 142B3635AE;\n\tTue, 5 Jan 2021 20:05:23 +0100 (CET)", "from relay11.mail.gandi.net (relay11.mail.gandi.net\n\t[217.70.178.231])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9807D632B0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 5 Jan 2021 20:05:18 +0100 (CET)", "from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay11.mail.gandi.net (Postfix) with ESMTPSA id 54B39100002\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 5 Jan 2021 19:05:18 +0000 (UTC)" ], "From": "Jacopo Mondi <jacopo@jmondi.org>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Tue, 5 Jan 2021 20:05:22 +0100", "Message-Id": "<20210105190522.682324-13-jacopo@jmondi.org>", "X-Mailer": "git-send-email 2.29.2", "In-Reply-To": "<20210105190522.682324-1-jacopo@jmondi.org>", "References": "<20210105190522.682324-1-jacopo@jmondi.org>", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [PATCH 12/12] android: camera_device: Report the\n\trequired dynamic metadata", "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>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "The list of dynamic metadata reported by the Camera HAL is currently\nvery limited.\n\nAugment the number of reported metadata in order to fix errors\nreported by the android.hardware.camera2.cts.CaptureRequestTest test\nmodule.\n\nThe test module still fails in 2 tests because of the missing\nandroid.sensor.info.maxFrameDuration static metadata.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/android/camera_device.cpp | 134 ++++++++++++++++++++++++++--------\n 1 file changed, 105 insertions(+), 29 deletions(-)", "diff": "diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 6eb3404739e8..d2a8e876eccc 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -675,10 +675,10 @@ std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()\n {\n \t/*\n \t * \\todo Keep this in sync with the actual number of entries.\n-\t * Currently: 53 entries, 714 bytes of static metadata\n+\t * Currently: 53 entries, 786 bytes of static metadata\n \t */\n \tuint32_t numEntries = 53;\n-\tuint32_t byteSize = 714;\n+\tuint32_t byteSize = 786;\n \n \t/*\n \t * Calculate space occupation in bytes for dynamically built metadata\n@@ -1200,19 +1200,37 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n \t\t\t\t availableRequestKeys.size());\n \n \tstd::vector<int32_t> availableResultKeys = {\n-\t\tANDROID_CONTROL_AE_STATE,\n+\t\tANDROID_CONTROL_AE_ANTIBANDING_MODE,\n \t\tANDROID_CONTROL_AE_LOCK,\n+\t\tANDROID_CONTROL_AE_MODE,\n+\t\tANDROID_CONTROL_AE_TARGET_FPS_RANGE,\n+\t\tANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,\n+\t\tANDROID_CONTROL_AE_STATE,\n+\t\tANDROID_CONTROL_AF_MODE,\n \t\tANDROID_CONTROL_AF_STATE,\n-\t\tANDROID_CONTROL_AWB_STATE,\n+\t\tANDROID_CONTROL_AF_TRIGGER,\n+\t\tANDROID_CONTROL_AWB_MODE,\n \t\tANDROID_CONTROL_AWB_LOCK,\n+\t\tANDROID_CONTROL_AWB_STATE,\n+\t\tANDROID_CONTROL_CAPTURE_INTENT,\n+\t\tANDROID_CONTROL_EFFECT_MODE,\n+\t\tANDROID_CONTROL_MODE,\n+\t\tANDROID_CONTROL_SCENE_MODE,\n+\t\tANDROID_CONTROL_VIDEO_STABILIZATION_MODE,\n+\t\tANDROID_FLASH_MODE,\n+\t\tANDROID_FLASH_STATE,\n \t\tANDROID_LENS_STATE,\n-\t\tANDROID_REQUEST_PIPELINE_DEPTH,\n-\t\tANDROID_SCALER_CROP_REGION,\n+\t\tANDROID_LENS_OPTICAL_STABILIZATION_MODE,\n \t\tANDROID_SENSOR_TIMESTAMP,\n \t\tANDROID_SENSOR_ROLLING_SHUTTER_SKEW,\n \t\tANDROID_SENSOR_EXPOSURE_TIME,\n+\t\tANDROID_STATISTICS_FACE_DETECT_MODE,\n+\t\tANDROID_NOISE_REDUCTION_MODE,\n \t\tANDROID_STATISTICS_LENS_SHADING_MAP_MODE,\n \t\tANDROID_STATISTICS_SCENE_FLICKER,\n+\t\tANDROID_NOISE_REDUCTION_MODE,\n+\t\tANDROID_REQUEST_PIPELINE_DEPTH,\n+\t\tANDROID_SCALER_CROP_REGION,\n \t\tANDROID_JPEG_SIZE,\n \t\tANDROID_JPEG_QUALITY,\n \t\tANDROID_JPEG_ORIENTATION,\n@@ -1885,48 +1903,106 @@ CameraDevice::getResultMetadata(Camera3RequestDescriptor *descriptor,\n \n \t/*\n \t * \\todo Keep this in sync with the actual number of entries.\n-\t * Currently: 18 entries, 62 bytes\n+\t * Currently: 33 entries, 75 bytes\n+\t *\n+\t * Reserve more space for the JPEG metadata set by the post-processor.\n+\t * Currently: ANDROID_JPEG_SIZE (int32_t), ANDROID_JPEG_QUALITY (byte),\n+\t * ANDROID_JPEG_ORIENTATION (int32_t) = 3 entries, 9 bytes.\n \t */\n \tstd::unique_ptr<CameraMetadata> resultMetadata =\n-\t\tstd::make_unique<CameraMetadata>(19, 63);\n+\t\tstd::make_unique<CameraMetadata>(33, 75);\n \tif (!resultMetadata->isValid()) {\n \t\tLOG(HAL, Error) << \"Failed to allocate static metadata\";\n \t\treturn nullptr;\n \t}\n \n-\tconst uint8_t ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED;\n-\tresultMetadata->addEntry(ANDROID_CONTROL_AE_STATE, &ae_state, 1);\n+\tuint8_t value = ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_AE_LOCK_OFF;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AE_LOCK, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_AE_MODE_ON;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AE_MODE, &value, 1);\n \n-\tconst uint8_t ae_lock = ANDROID_CONTROL_AE_LOCK_OFF;\n-\tresultMetadata->addEntry(ANDROID_CONTROL_AE_LOCK, &ae_lock, 1);\n+\tstd::vector<int32_t> aeFpsTarget = { 30, 30 };\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,\n+\t\t\t\t aeFpsTarget.data(), aeFpsTarget.size());\n \n-\tuint8_t af_state = ANDROID_CONTROL_AF_STATE_INACTIVE;\n-\tresultMetadata->addEntry(ANDROID_CONTROL_AF_STATE, &af_state, 1);\n+\tvalue = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,\n+\t\t\t\t &value, 1);\n \n-\tconst uint8_t awb_state = ANDROID_CONTROL_AWB_STATE_CONVERGED;\n-\tresultMetadata->addEntry(ANDROID_CONTROL_AWB_STATE, &awb_state, 1);\n+\tvalue = ANDROID_CONTROL_AE_STATE_CONVERGED;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AE_STATE, &value, 1);\n \n-\tconst uint8_t awb_lock = ANDROID_CONTROL_AWB_LOCK_OFF;\n-\tresultMetadata->addEntry(ANDROID_CONTROL_AWB_LOCK, &awb_lock, 1);\n+\tvalue = ANDROID_CONTROL_AF_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AF_MODE, &value, 1);\n \n-\tconst uint8_t lens_state = ANDROID_LENS_STATE_STATIONARY;\n-\tresultMetadata->addEntry(ANDROID_LENS_STATE, &lens_state, 1);\n+\tvalue = ANDROID_CONTROL_AF_STATE_INACTIVE;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AF_STATE, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_AF_TRIGGER_IDLE;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AF_TRIGGER, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_AWB_MODE_AUTO;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AWB_MODE, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_AWB_LOCK_OFF;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AWB_LOCK, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_AWB_STATE_CONVERGED;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_AWB_STATE, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_CAPTURE_INTENT, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_EFFECT_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_EFFECT_MODE, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_MODE_AUTO;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_MODE, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_SCENE_MODE_DISABLED;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_SCENE_MODE, &value, 1);\n+\n+\tvalue = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, &value, 1);\n+\n+\tvalue = ANDROID_FLASH_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_FLASH_MODE, &value, 1);\n+\n+\tvalue = ANDROID_FLASH_STATE_UNAVAILABLE;\n+\tresultMetadata->addEntry(ANDROID_FLASH_STATE, &value, 1);\n+\n+\tvalue = ANDROID_LENS_STATE_STATIONARY;\n+\tresultMetadata->addEntry(ANDROID_LENS_STATE, &value, 1);\n+\n+\tvalue = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_LENS_OPTICAL_STABILIZATION_MODE,\n+\t\t\t\t &value, 1);\n \n \tresultMetadata->addEntry(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1);\n \n-\t/* 33.3 msec */\n-\tconst int64_t rolling_shutter_skew = 33300000;\n-\tresultMetadata->addEntry(ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,\n-\t\t\t\t &rolling_shutter_skew, 1);\n+\tvalue = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,\n+\t\t\t\t &value, 1);\n \n-\tconst uint8_t lens_shading_map_mode =\n-\t\t\t\tANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF;\n+\tvalue = ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF;\n \tresultMetadata->addEntry(ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,\n-\t\t\t\t &lens_shading_map_mode, 1);\n+\t\t\t\t &value, 1);\n \n-\tconst uint8_t scene_flicker = ANDROID_STATISTICS_SCENE_FLICKER_NONE;\n+\tvalue = ANDROID_STATISTICS_SCENE_FLICKER_NONE;\n \tresultMetadata->addEntry(ANDROID_STATISTICS_SCENE_FLICKER,\n-\t\t\t\t &scene_flicker, 1);\n+\t\t\t\t &value, 1);\n+\n+\tvalue = ANDROID_NOISE_REDUCTION_MODE_OFF;\n+\tresultMetadata->addEntry(ANDROID_NOISE_REDUCTION_MODE, &value, 1);\n+\n+\t/* 33.3 msec */\n+\tconst int64_t rolling_shutter_skew = 33300000;\n+\tresultMetadata->addEntry(ANDROID_SENSOR_ROLLING_SHUTTER_SKEW,\n+\t\t\t\t &rolling_shutter_skew, 1);\n \n \t/* Add metadata tags reported by libcamera. */\n \tif (metadata.contains(controls::draft::PipelineDepth)) {\n", "prefixes": [ "libcamera-devel", "12/12" ] }