Patch Detail
Show a patch.
GET /api/1.1/patches/26282/?format=api
{ "id": 26282, "url": "https://patchwork.libcamera.org/api/1.1/patches/26282/?format=api", "web_url": "https://patchwork.libcamera.org/patch/26282/", "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": "<20260312231616.3590215-4-faizel.kb@gmail.com>", "date": "2026-03-12T23:16:16", "name": "[RESEND,v3,3/3] media: vimc: streamer: Apply sensor frame rate in streamer thread", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "70584a186b0c46e78bc19882f5cb52b6f3643315", "submitter": { "id": 258, "url": "https://patchwork.libcamera.org/api/1.1/people/258/?format=api", "name": "Faizel K B", "email": "faizel.kb@gmail.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/26282/mbox/", "series": [ { "id": 5828, "url": "https://patchwork.libcamera.org/api/1.1/series/5828/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5828", "date": "2026-03-12T23:16:13", "name": "media: vimc: Add timing controls for fps config", "version": 3, "mbox": "https://patchwork.libcamera.org/series/5828/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/26282/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/26282/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 92E82BDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 12 Mar 2026 23:17:48 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 444546267F;\n\tFri, 13 Mar 2026 00:17:48 +0100 (CET)", "from mail-pl1-x635.google.com (mail-pl1-x635.google.com\n\t[IPv6:2607:f8b0:4864:20::635])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4BFB46265F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 13 Mar 2026 00:17:46 +0100 (CET)", "by mail-pl1-x635.google.com with SMTP id\n\td9443c01a7336-2a3e79fe2b8so1555135ad.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 12 Mar 2026 16:17:46 -0700 (PDT)", "from FAIZEL-KB.. ([2001:569:5b64:e100:3685:315:53bf:61fc])\n\tby smtp.googlemail.com with ESMTPSA id\n\td9443c01a7336-2aece81cde8sm619395ad.70.2026.03.12.16.17.39\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 12 Mar 2026 16:17:44 -0700 (PDT)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"VRBcxwPT\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20230601; t=1773357465; x=1773962265;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=PvVwdLZlh8MPfXBeT9fb7vVP3darfYnE88ZGrjLridM=;\n\tb=VRBcxwPT6xayGCoBvjqB3g+tUn31KZM9aCd2yEvnbA/vK21MFer8ct4l6wIhjwDlgB\n\tVLsdkLBbo+ZvzHicWJjOXDvss1LfQG+A+5h/perxpaNR6m6m6AfsbnnTEml6w+zLDiZp\n\tH45AkRHSPMl0/XHZ4nIaxN3M08DSXYsPDcgVPl1bt2CFYkDQZtbitFotSksWwbbHy2gD\n\tB5UyBOLZ0EERjLuoASUwYctPffngebFEdSz7Xd76U7KLlbX6v5XDqx85MN6PmjX/iBYt\n\tsuJDWCbkc2A5FqjteU2PzaP5cSir9cFs8lDtK83dqY07Y9xQhAb3MlivRuCBcdyNLcw3\n\txd9g==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1773357465; x=1773962265;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=PvVwdLZlh8MPfXBeT9fb7vVP3darfYnE88ZGrjLridM=;\n\tb=Da74RClYJpcSNiFrFcA7nTe6F92fTMI2oD1PcN86xK+nd0g/7BKFOjfgA0nQSO4ner\n\tLPe0RCKUwbur1X1b2kxwtRZynTU5ODEEBI8K186T8UFTgp0f8mkFQvpsvzHPAKKMDWyb\n\taRficQlseoCK/sefi6FvNX3gZ4yOs3iL3OXff/T707TOqqsEcMUA9aZVVsI1YY3DKJig\n\tBrJWwjm76/BQeGjyx2Qs+XL+D9HTeHQbEYWc/PpqaR1HGLX7S6zCgvI+5q5XkE0nQZCC\n\ttyWqFYrgLnqHWoJjVtT80f5DlGEG2GdVD8WOvUq1FjqH4wB5QiwUi+PHTWHeybT9E53x\n\t352Q==", "X-Forwarded-Encrypted": "i=1;\n\tAJvYcCXVvTD1ju7aobuUkEnl3cwAa+wCGTJb1OhhNHuFZ/jPIew8QowroV5600SCLtmylcyL3PgZMN6O8uOBA7BSLuA=@lists.libcamera.org", "X-Gm-Message-State": "AOJu0Yy2fRFHbgdKYubL6D/BafL7GIXNpXxvBSMiXTYEPB1grdl2rBAq\n\t5AYjjRL+0aTvf2auX3xt6nrrSsRoEYoZYuwNxfNcXJkaqL10fgb2aF8unE/VjdwHUjE=", "X-Gm-Gg": "ATEYQzz5IcPFRIWaZMvn1lxoCl2KOjJCK9xGgAz6mIT9lSBAQKzoPzu+2eKlnFbkld5\n\tbNVunna0RDjh+r7+ustw7x+WgSMO6yCbX4kKRs7IdnEu6jT6lEUvsperU7Vt5qMHhlJk3GXbFsw\n\tDE9u+5dNQuQLOeruDY89jcUhEhXzUTTAtFd8ibHATEjQYTZnloWO9A0veTUTUYEqBK6KJQeEdW4\n\tl5YEy5n7tg4sc+rnVzMpwGmllhosyxLcE4fbEzLPx/Sq01uYiDF8ypb+94OeRMJ2kjMOqy8TZb1\n\tPoe1mTj9hCfFmxlINatxECTZZTp8Ytp2+Se7a2ZSNVaCIaqcAB50x0+R6w5jihMbfkcpKKduJrY\n\tjpYElbhfjjrHdLvZQSENj1Ylq9hlS1TyocDOe1rHMSzWadhbxMfmUoRW14h2qYXP5UN22AgvLPW\n\tRzQZ0tplb/hXqG93vHkxn6H7Z5E9WiH7o3uLpIq/77jMuQjl4onG/zT00j4yDutvXnuQ==", "X-Received": "by 2002:a17:902:e550:b0:2ae:7ed6:7d19 with SMTP id\n\td9443c01a7336-2aecaad2c12mr6749555ad.4.1773357464899; \n\tThu, 12 Mar 2026 16:17:44 -0700 (PDT)", "From": "Faizel K B <faizel.kb@gmail.com>", "To": "Shuah Khan <skhan@linuxfoundation.org>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlinux-media@vger.kernel.org", "Cc": "Mauro Carvalho Chehab <mchehab@kernel.org>,\n\tlibcamera-devel@lists.libcamera.org, Faizel K B <faizel.kb@gmail.com>", "Subject": "[PATCH RESEND v3 3/3] media: vimc: streamer: Apply sensor frame rate\n\tin streamer thread", "Date": "Thu, 12 Mar 2026 16:16:16 -0700", "Message-ID": "<20260312231616.3590215-4-faizel.kb@gmail.com>", "X-Mailer": "git-send-email 2.43.0", "In-Reply-To": "<20260312231616.3590215-1-faizel.kb@gmail.com>", "References": "<20260312231616.3590215-1-faizel.kb@gmail.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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": "Use the sensor's pre-calculated jiffies value to add appropriate\ndelay between frames according to the configured timing value.\nThe actual frame rate will vary depending on processing delays in\nother media pipeline components.\n\nTested using yavta frame rate display with QCIF resolution:\nyavta <video-node> --capture=<no_of_frames>\n\nSigned-off-by: Faizel K B <faizel.kb@gmail.com>\n---\n .../media/test-drivers/vimc/vimc-streamer.c | 33 +++++++++++++++++--\n 1 file changed, 31 insertions(+), 2 deletions(-)", "diff": "diff --git a/drivers/media/test-drivers/vimc/vimc-streamer.c b/drivers/media/test-drivers/vimc/vimc-streamer.c\nindex 15d863f97cbf..3ebf5798fa3d 100644\n--- a/drivers/media/test-drivers/vimc/vimc-streamer.c\n+++ b/drivers/media/test-drivers/vimc/vimc-streamer.c\n@@ -139,6 +139,29 @@ static int vimc_streamer_pipeline_init(struct vimc_stream *stream,\n \treturn -EINVAL;\n }\n \n+/**\n+ * vimc_streamer_get_sensor() - Get sensor from pipeline\n+ * @stream: the pipeline\n+ *\n+ * Helper function to find the sensor device in the pipeline.\n+ * Returns pointer to sensor device or NULL if not found.\n+ */\n+static struct vimc_sensor_device *vimc_streamer_get_sensor(struct vimc_stream *stream)\n+{\n+\tint i;\n+\n+\tfor (i = 0; i < stream->pipe_size; i++) {\n+\t\tstruct vimc_ent_device *ved = stream->ved_pipeline[i];\n+\n+\t\tif (ved && ved->ent &&\n+\t\t ved->ent->function == MEDIA_ENT_F_CAM_SENSOR) {\n+\t\t\treturn container_of(ved, struct vimc_sensor_device, ved);\n+\t\t}\n+\t}\n+\n+\treturn NULL;\n+}\n+\n /**\n * vimc_streamer_thread - Process frames through the pipeline\n *\n@@ -154,25 +177,31 @@ static int vimc_streamer_pipeline_init(struct vimc_stream *stream,\n static int vimc_streamer_thread(void *data)\n {\n \tstruct vimc_stream *stream = data;\n+\tstruct vimc_sensor_device *vsensor;\n \tu8 *frame = NULL;\n \tint i;\n+\tunsigned long fps_jiffies;\n+\tconst unsigned long default_jiffies = HZ / 30;\n \n \tset_freezable();\n+\tvsensor = vimc_streamer_get_sensor(stream);\n \n \tfor (;;) {\n \t\ttry_to_freeze();\n \t\tif (kthread_should_stop())\n \t\t\tbreak;\n \n+\t\t/* Read from hardware configuration */\n+\t\tfps_jiffies = vsensor ? vsensor->hw.fps_jiffies : default_jiffies;\n+\n \t\tfor (i = stream->pipe_size - 1; i >= 0; i--) {\n \t\t\tframe = stream->ved_pipeline[i]->process_frame(\n \t\t\t\t\tstream->ved_pipeline[i], frame);\n \t\t\tif (!frame || IS_ERR(frame))\n \t\t\t\tbreak;\n \t\t}\n-\t\t//wait for 60hz\n \t\tset_current_state(TASK_UNINTERRUPTIBLE);\n-\t\tschedule_timeout(HZ / 60);\n+\t\tschedule_timeout(fps_jiffies);\n \t}\n \n \treturn 0;\n", "prefixes": [ "RESEND", "v3", "3/3" ] }