Show a patch.

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

{
    "id": 14090,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/14090/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/14090/",
    "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": "<20211011151154.72856-7-jacopo@jmondi.org>",
    "date": "2021-10-11T15:11:44",
    "name": "[libcamera-devel,v3,06/16] android: capabilities: Collect per-stream frame durations",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "b3b77f2e6a5240ba8fa5bba5e1a38df1418bfa75",
    "submitter": {
        "id": 3,
        "url": "https://patchwork.libcamera.org/api/1.1/people/3/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo@jmondi.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/14090/mbox/",
    "series": [
        {
            "id": 2613,
            "url": "https://patchwork.libcamera.org/api/1.1/series/2613/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2613",
            "date": "2021-10-11T15:11:38",
            "name": "IPU3 control info update and HAL frame durations",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/2613/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/14090/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/14090/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 EEA85C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 11 Oct 2021 15:11:19 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 82F9E68F52;\n\tMon, 11 Oct 2021 17:11:19 +0200 (CEST)",
            "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 3945568F4B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 11 Oct 2021 17:11:16 +0200 (CEST)",
            "(Authenticated sender: jacopo@jmondi.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 2A974E000F;\n\tMon, 11 Oct 2021 15:11:14 +0000 (UTC)"
        ],
        "From": "Jacopo Mondi <jacopo@jmondi.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Mon, 11 Oct 2021 17:11:44 +0200",
        "Message-Id": "<20211011151154.72856-7-jacopo@jmondi.org>",
        "X-Mailer": "git-send-email 2.33.0",
        "In-Reply-To": "<20211011151154.72856-1-jacopo@jmondi.org>",
        "References": "<20211011151154.72856-1-jacopo@jmondi.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v3 06/16] android: capabilities: Collect\n\tper-stream frame durations",
        "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": "Collect the per-stream frame durations while building the list\nof supported stream formats and resolutions.\n\nIn order to get an updated list of controls it is necessary to apply\nto the Camera the configuration we're testing, which was so far only\nvalidated.\n\nThe per-configuration durations will be used to populate the Android\nANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS static metadata.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/android/camera_capabilities.cpp | 39 ++++++++++++++++++++++++++---\n src/android/camera_capabilities.h   |  2 ++\n 2 files changed, 38 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp\nindex 87a6e1c6f264..cfe0a1ad93e6 100644\n--- a/src/android/camera_capabilities.cpp\n+++ b/src/android/camera_capabilities.cpp\n@@ -608,7 +608,32 @@ int CameraCapabilities::initializeStreamConfigurations()\n \t\t}\n \n \t\tfor (const Size &res : resolutions) {\n-\t\t\tstreamConfigurations_.push_back({ res, androidFormat });\n+\t\t\t/*\n+\t\t\t * Configure the Camera with the collected format and\n+\t\t\t * resolution to get an updated list of controls.\n+\t\t\t *\n+\t\t\t * \\todo Avoid the need to configure the camera when\n+\t\t\t * redesigning the configuration API.\n+\t\t\t */\n+\t\t\tcfg.size = res;\n+\t\t\tint ret = camera_->configure(cameraConfig.get());\n+\t\t\tif (ret)\n+\t\t\t\treturn ret;\n+\n+\t\t\tconst ControlInfoMap &controls = camera_->controls();\n+\t\t\tconst auto frameDurations = controls.find(\n+\t\t\t\t&controls::FrameDurationLimits);\n+\t\t\tif (frameDurations == controls.end()) {\n+\t\t\t\tLOG(HAL, Error)\n+\t\t\t\t\t<< \"Camera does not report frame durations\";\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\n+\t\t\tint64_t minFrameDuration = frameDurations->second.min().get<int64_t>() * 1000;\n+\t\t\tint64_t maxFrameDuration = frameDurations->second.max().get<int64_t>() * 1000;\n+\t\t\tstreamConfigurations_.push_back({\n+\t\t\t\tres, androidFormat, minFrameDuration, maxFrameDuration,\n+\t\t\t});\n \n \t\t\t/*\n \t\t\t * If the format is HAL_PIXEL_FORMAT_YCbCr_420_888\n@@ -620,10 +645,18 @@ int CameraCapabilities::initializeStreamConfigurations()\n \t\t\t *\n \t\t\t * \\todo Support JPEG streams produced by the camera\n \t\t\t * natively.\n+\t\t\t *\n+\t\t\t * \\todo HAL_PIXEL_FORMAT_BLOB is a 'stalling' format,\n+\t\t\t * its duration should take into account the time\n+\t\t\t * required for the YUV to JPEG encoding. For now\n+\t\t\t * use the same frame durations as collected for\n+\t\t\t * the YUV/RGB streams.\n \t\t\t */\n \t\t\tif (androidFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {\n-\t\t\t\tstreamConfigurations_.push_back(\n-\t\t\t\t\t{ res, HAL_PIXEL_FORMAT_BLOB });\n+\t\t\t\tstreamConfigurations_.push_back({\n+\t\t\t\t\tres, HAL_PIXEL_FORMAT_BLOB,\n+\t\t\t\t\tminFrameDuration, maxFrameDuration,\n+\t\t\t\t});\n \t\t\t\tmaxJpegSize = std::max(maxJpegSize, res);\n \t\t\t}\n \t\t}\ndiff --git a/src/android/camera_capabilities.h b/src/android/camera_capabilities.h\nindex a12596993ee5..6e55ddab445e 100644\n--- a/src/android/camera_capabilities.h\n+++ b/src/android/camera_capabilities.h\n@@ -43,6 +43,8 @@ private:\n \tstruct Camera3StreamConfiguration {\n \t\tlibcamera::Size resolution;\n \t\tint androidFormat;\n+\t\tint64_t minFrameDurationNsec;\n+\t\tint64_t maxFrameDurationNsec;\n \t};\n \n \tbool validateManualSensorCapability();\n",
    "prefixes": [
        "libcamera-devel",
        "v3",
        "06/16"
    ]
}