Patch Detail
Show a patch.
GET /api/1.1/patches/26082/?format=api
{ "id": 26082, "url": "https://patchwork.libcamera.org/api/1.1/patches/26082/?format=api", "web_url": "https://patchwork.libcamera.org/patch/26082/", "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": "<20260202194645.1287757-4-faizel.kb@gmail.com>", "date": "2026-02-02T19:46:45", "name": "[v2,3/3] media: vimc: streamer: Apply sensor frame rate in streamer thread", "commit_ref": null, "pull_url": null, "state": "not-applicable", "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/26082/mbox/", "series": [ { "id": 5767, "url": "https://patchwork.libcamera.org/api/1.1/series/5767/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5767", "date": "2026-02-02T19:46:42", "name": "media: vimc: Add timing controls for fps config", "version": 2, "mbox": "https://patchwork.libcamera.org/series/5767/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/26082/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/26082/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 AE463C3226\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 2 Feb 2026 19:47:14 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6459E62009;\n\tMon, 2 Feb 2026 20:47:14 +0100 (CET)", "from mail-pf1-x433.google.com (mail-pf1-x433.google.com\n\t[IPv6:2607:f8b0:4864:20::433])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DC64362004\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 2 Feb 2026 20:47:12 +0100 (CET)", "by mail-pf1-x433.google.com with SMTP id\n\td2e1a72fcca58-81e931923b5so332213b3a.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 02 Feb 2026 11:47:12 -0800 (PST)", "from FAIZEL-KB.. ([2001:569:5999:dc00:af0:4465:b482:1e01])\n\tby smtp.googlemail.com with ESMTPSA id\n\td2e1a72fcca58-82379b1bc68sm16667416b3a.2.2026.02.02.11.47.10\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 02 Feb 2026 11:47:10 -0800 (PST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"TUm1dZBM\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20230601; t=1770061631; x=1770666431;\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=TUm1dZBMqQhN+FKz5bfazgjKAK7m1cInb9V4H+Sw79AONNL+KNqCBBXm2rYI3cHWFi\n\ty6GSSe5znKVJNmHRENYLwugI9RsRn1PMlK9iekG/nR0lxHGAbJU/Lb4OlIEEutJEST6I\n\t9/XSY6vkucWYk5EJY794IMnpzdK6GCj/R+NQ9XY3+qwDTdRR2kGhxGBGK1C7zqlN9+RP\n\t3doOZnWsaMuw2FxNtGLsHUPwHnxKOmEiHJ0tqukArkcqVn93+ovfyyP5MgPC1Pz2HkTB\n\tqTrem1bbl97lGhYTuLp+UIUiaHRAT1ezim7sWRiX7zCdpUemt4uUNxYYzRCb3mzov7BJ\n\tTJ8g==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1770061631; x=1770666431;\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=QFD/W8h2o/IgoTgVdXZKxWbMWMZUWP/eC9Sb5ek14piqjiKKYCEQKVzUh8i2GTiPOm\n\tu0Sf3j51wqtiNtQ3Plv25iHVJs44BvAaCCwasThVi05DGWRrveyUX74XWIFI12QmFM+t\n\tC/4mzG3I9IQ5dKUXnaz5Gx8m7c6WZVkY7m/rn+nFlYOD1uxfpsdqRu1JC26rR0YMNxAZ\n\tv1Ob0K+GISQaRgBKwDuuPQP8PqJsuUc7U7zeEbsVnt6GLJ3Vn+0LlT0i7H3qgVHe3CNJ\n\t7szHgnep+iavxavCUwK3lvA7Ac84jWtBKj4EBiIjFXGZzfFVZ15FOJxz+RYe60fDsi6T\n\tfzvA==", "X-Forwarded-Encrypted": "i=1;\n\tAJvYcCUBQKAEXbCTQosDpSGydT9iwazVxXHReZN+ApRRxoUSoibnvFW5Gp7xD1mcaNCBulIGZRiFPqNMysxOCkd71ds=@lists.libcamera.org", "X-Gm-Message-State": "AOJu0YxJKsLl8HMgVl9wIGObj65PXkngAtwbAuzurUhC146tpHBnc+Af\n\thjR7xFlQnXR/sjO51QibNnEMg6faMoFet/kqFOj0/jXZpzhagD7DhRuL", "X-Gm-Gg": "AZuq6aLWEMXU++lU/6loiO1/rThAd8b9BlcdfTK2R/Wu834JUI2glsnpmbxKXqFim3h\n\tWmDESLhAI6Bj1h7mTLWZGu8+pU0KOI6QQOWKfBbeGpQm9drmcJ054KAwaGJLHXz7w0IYsEdHFFA\n\tpe8nAOcCgK/AGWnlfUAcLGivlbd9FMRWYbWeZh8hyoGUCN/YzsNNydBckphrofBE59zz5UCk9ho\n\tr7o9LaVsapSglNupq+KjyzEGCT9gMfpad0ho6liR+fR591Ir6jWWCuqLN55b2ZVQ2udEEMiTl+M\n\t80sTlOw9yMiMm8p93oyepur+imUk4BRw3Mb7e8KH8qRM2Jpg4Led8u5DBSocj7NfOY/T5StXyQL\n\tP7vVnpL/NKXrEL61dV09XHB1gX3I4soaN5qjz9fqvTfqgM1w0Sae7wAr2Rlxz0X2yAhFVG+KamT\n\tm9wf+L6fL2caC4oLhjMKZuB9qr1Ukif0RfkLRXA3FSJh8=", "X-Received": "by 2002:a05:6a00:12d0:b0:81e:74a6:542d with SMTP id\n\td2e1a72fcca58-823ab74b844mr7612034b3a.5.1770061631287; \n\tMon, 02 Feb 2026 11:47:11 -0800 (PST)", "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 v2 3/3] media: vimc: streamer: Apply sensor frame rate in\n\tstreamer thread", "Date": "Mon, 2 Feb 2026 11:46:45 -0800", "Message-ID": "<20260202194645.1287757-4-faizel.kb@gmail.com>", "X-Mailer": "git-send-email 2.43.0", "In-Reply-To": "<20260202194645.1287757-1-faizel.kb@gmail.com>", "References": "<20260202194645.1287757-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": [ "v2", "3/3" ] }