Show a patch.

GET /api/patches/1940/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 1940,
    "url": "https://patchwork.libcamera.org/api/patches/1940/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/1940/",
    "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": "<20190905074737.6955-9-jacopo@jmondi.org>",
    "date": "2019-09-05T07:47:35",
    "name": "[libcamera-devel,v6,8/9] android: camera_device: Fix handling of request template",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "d0dadb6f44d5ec65421dd55fc1a564d279966cef",
    "submitter": {
        "id": 3,
        "url": "https://patchwork.libcamera.org/api/people/3/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo@jmondi.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/1940/mbox/",
    "series": [
        {
            "id": 481,
            "url": "https://patchwork.libcamera.org/api/series/481/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=481",
            "date": "2019-09-05T07:47:27",
            "name": "android: Rework metadata tags",
            "version": 6,
            "mbox": "https://patchwork.libcamera.org/series/481/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/1940/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/1940/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<jacopo@jmondi.org>",
        "Received": [
            "from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[217.70.183.196])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 725926193D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  5 Sep 2019 09:46:18 +0200 (CEST)",
            "from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id B3A94E0015;\n\tThu,  5 Sep 2019 07:46:17 +0000 (UTC)"
        ],
        "X-Originating-IP": "2.224.242.101",
        "From": "Jacopo Mondi <jacopo@jmondi.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu,  5 Sep 2019 09:47:35 +0200",
        "Message-Id": "<20190905074737.6955-9-jacopo@jmondi.org>",
        "X-Mailer": "git-send-email 2.23.0",
        "In-Reply-To": "<20190905074737.6955-1-jacopo@jmondi.org>",
        "References": "<20190905074737.6955-1-jacopo@jmondi.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v6 8/9] android: camera_device: Fix\n\thandling of request template",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.23",
        "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>",
        "X-List-Received-Date": "Thu, 05 Sep 2019 07:46:18 -0000"
    },
    "content": "According to the Android camera HALv3 documentation, the request\ntemplate metadata pack should not be modified after it is returned to\nthe camera stack from the HAL.\n\nCurrently, the same metadata pack is used for all types of template\nrequest, without updating the capture intent there contained to match\nthe requested template type, as correctly reported by the\ncros_camera_test test application.\n\nIn order to avoid modifying the single request template already returned\nto the camera stack in order to update the capture intent it contains,\ncreate a map that associates a dedicated template to each supported\ncapture type.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/android/camera_device.cpp | 83 +++++++++++++++++------------------\n src/android/camera_device.h   |  2 +-\n 2 files changed, 41 insertions(+), 44 deletions(-)",
    "diff": "diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 475fa2404421..cc90a8b216e6 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -50,8 +50,7 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()\n  */\n \n CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)\n-\t: running_(false), camera_(camera), staticMetadata_(nullptr),\n-\t  requestTemplate_(nullptr)\n+\t: running_(false), camera_(camera), staticMetadata_(nullptr)\n {\n \tcamera_->requestCompleted.connect(this, &CameraDevice::requestComplete);\n }\n@@ -61,8 +60,8 @@ CameraDevice::~CameraDevice()\n \tif (staticMetadata_)\n \t\tdelete staticMetadata_;\n \n-\tif (requestTemplate_)\n-\t\tdelete requestTemplate_;\n+\tfor (auto &it : requestTemplates_)\n+\t\tdelete it.second;\n }\n \n /*\n@@ -440,10 +439,11 @@ camera_metadata_t *CameraDevice::getStaticMetadata()\n  */\n const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n {\n-\t/*\n-\t * \\todo Inspect type and pick the right metadata pack.\n-\t * As of now just use a single one for all templates.\n-\t */\n+\tauto it = requestTemplates_.find(type);\n+\tif (it != requestTemplates_.end())\n+\t\treturn it->second->get();\n+\n+\t/* Use the capture intent matching the requested template type. */\n \tuint8_t captureIntent;\n \tswitch (type) {\n \tcase CAMERA3_TEMPLATE_PREVIEW:\n@@ -469,74 +469,71 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n \t\treturn nullptr;\n \t}\n \n-\tif (requestTemplate_)\n-\t\treturn requestTemplate_->get();\n-\n \t/*\n \t * \\todo Keep this in sync with the actual number of entries.\n \t * Currently: 12 entries, 15 bytes\n \t */\n-\trequestTemplate_ = new CameraMetadata(15, 20);\n-\tif (!requestTemplate_) {\n+\tCameraMetadata *requestTemplate = new CameraMetadata(15, 20);\n+\tif (!requestTemplate->isValid()) {\n \t\tLOG(HAL, Error) << \"Failed to allocate template metadata\";\n-\t\tdelete requestTemplate_;\n-\t\trequestTemplate_ = nullptr;\n+\t\tdelete requestTemplate;\n \t\treturn nullptr;\n \t}\n \n \tuint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON;\n-\trequestTemplate_->addEntry(ANDROID_CONTROL_AE_MODE,\n-\t\t\t\t   &aeMode, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_AE_MODE,\n+\t\t\t\t  &aeMode, 1);\n \n \tint32_t aeExposureCompensation = 0;\n-\trequestTemplate_->addEntry(ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,\n-\t\t\t\t   &aeExposureCompensation, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,\n+\t\t\t\t  &aeExposureCompensation, 1);\n \n \tuint8_t aePrecaptureTrigger = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;\n-\trequestTemplate_->addEntry(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,\n-\t\t\t\t   &aePrecaptureTrigger, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,\n+\t\t\t\t  &aePrecaptureTrigger, 1);\n \n \tuint8_t aeLock = ANDROID_CONTROL_AE_LOCK_OFF;\n-\trequestTemplate_->addEntry(ANDROID_CONTROL_AE_LOCK,\n-\t\t\t\t   &aeLock, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_AE_LOCK,\n+\t\t\t\t  &aeLock, 1);\n \n \tuint8_t afTrigger = ANDROID_CONTROL_AF_TRIGGER_IDLE;\n-\trequestTemplate_->addEntry(ANDROID_CONTROL_AF_TRIGGER,\n-\t\t\t\t   &afTrigger, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_AF_TRIGGER,\n+\t\t\t\t  &afTrigger, 1);\n \n \tuint8_t awbMode = ANDROID_CONTROL_AWB_MODE_AUTO;\n-\trequestTemplate_->addEntry(ANDROID_CONTROL_AWB_MODE,\n-\t\t\t\t   &awbMode, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_AWB_MODE,\n+\t\t\t\t  &awbMode, 1);\n \n \tuint8_t awbLock = ANDROID_CONTROL_AWB_LOCK_OFF;\n-\trequestTemplate_->addEntry(ANDROID_CONTROL_AWB_LOCK,\n-\t\t\t\t   &awbLock, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_AWB_LOCK,\n+\t\t\t\t  &awbLock, 1);\n \n \tuint8_t flashMode = ANDROID_FLASH_MODE_OFF;\n-\trequestTemplate_->addEntry(ANDROID_FLASH_MODE,\n-\t\t\t\t   &flashMode, 1);\n+\trequestTemplate->addEntry(ANDROID_FLASH_MODE,\n+\t\t\t\t  &flashMode, 1);\n \n \tuint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;\n-\trequestTemplate_->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,\n-\t\t\t\t   &faceDetectMode, 1);\n+\trequestTemplate->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,\n+\t\t\t\t  &faceDetectMode, 1);\n \n \tuint8_t noiseReduction = ANDROID_NOISE_REDUCTION_MODE_OFF;\n-\trequestTemplate_->addEntry(ANDROID_NOISE_REDUCTION_MODE,\n-\t\t\t\t   &noiseReduction, 1);\n+\trequestTemplate->addEntry(ANDROID_NOISE_REDUCTION_MODE,\n+\t\t\t\t  &noiseReduction, 1);\n \n \tuint8_t aberrationMode = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF;\n-\trequestTemplate_->addEntry(ANDROID_COLOR_CORRECTION_ABERRATION_MODE,\n-\t\t\t\t   &aberrationMode, 1);\n+\trequestTemplate->addEntry(ANDROID_COLOR_CORRECTION_ABERRATION_MODE,\n+\t\t\t\t  &aberrationMode, 1);\n \n-\trequestTemplate_->addEntry(ANDROID_CONTROL_CAPTURE_INTENT,\n-\t\t\t\t   &captureIntent, 1);\n+\trequestTemplate->addEntry(ANDROID_CONTROL_CAPTURE_INTENT,\n+\t\t\t\t  &captureIntent, 1);\n \n-\tif (!requestTemplate_->isValid()) {\n-\t\tdelete requestTemplate_;\n-\t\trequestTemplate_ = nullptr;\n+\tif (!requestTemplate->isValid()) {\n+\t\tdelete requestTemplate;\n+\t\treturn nullptr;\n \t}\n \n-\treturn requestTemplate_->get();\n+\trequestTemplates_[type] = requestTemplate;\n+\treturn requestTemplate->get();\n }\n \n /*\ndiff --git a/src/android/camera_device.h b/src/android/camera_device.h\nindex 65ba877a02ea..d5d136a74f4a 100644\n--- a/src/android/camera_device.h\n+++ b/src/android/camera_device.h\n@@ -61,7 +61,7 @@ private:\n \tstd::unique_ptr<libcamera::CameraConfiguration> config_;\n \n \tCameraMetadata *staticMetadata_;\n-\tCameraMetadata *requestTemplate_;\n+\tstd::map<unsigned int, CameraMetadata *> requestTemplates_;\n \tconst camera3_callback_ops_t *callbacks_;\n };\n \n",
    "prefixes": [
        "libcamera-devel",
        "v6",
        "8/9"
    ]
}