From patchwork Mon Feb 2 19:46:45 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Faizel K B X-Patchwork-Id: 26082 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id AE463C3226 for ; Mon, 2 Feb 2026 19:47:14 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6459E62009; Mon, 2 Feb 2026 20:47:14 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TUm1dZBM"; dkim-atps=neutral Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DC64362004 for ; Mon, 2 Feb 2026 20:47:12 +0100 (CET) Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-81e931923b5so332213b3a.1 for ; Mon, 02 Feb 2026 11:47:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770061631; x=1770666431; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PvVwdLZlh8MPfXBeT9fb7vVP3darfYnE88ZGrjLridM=; b=TUm1dZBMqQhN+FKz5bfazgjKAK7m1cInb9V4H+Sw79AONNL+KNqCBBXm2rYI3cHWFi y6GSSe5znKVJNmHRENYLwugI9RsRn1PMlK9iekG/nR0lxHGAbJU/Lb4OlIEEutJEST6I 9/XSY6vkucWYk5EJY794IMnpzdK6GCj/R+NQ9XY3+qwDTdRR2kGhxGBGK1C7zqlN9+RP 3doOZnWsaMuw2FxNtGLsHUPwHnxKOmEiHJ0tqukArkcqVn93+ovfyyP5MgPC1Pz2HkTB qTrem1bbl97lGhYTuLp+UIUiaHRAT1ezim7sWRiX7zCdpUemt4uUNxYYzRCb3mzov7BJ TJ8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770061631; x=1770666431; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=PvVwdLZlh8MPfXBeT9fb7vVP3darfYnE88ZGrjLridM=; b=QFD/W8h2o/IgoTgVdXZKxWbMWMZUWP/eC9Sb5ek14piqjiKKYCEQKVzUh8i2GTiPOm u0Sf3j51wqtiNtQ3Plv25iHVJs44BvAaCCwasThVi05DGWRrveyUX74XWIFI12QmFM+t C/4mzG3I9IQ5dKUXnaz5Gx8m7c6WZVkY7m/rn+nFlYOD1uxfpsdqRu1JC26rR0YMNxAZ v1Ob0K+GISQaRgBKwDuuPQP8PqJsuUc7U7zeEbsVnt6GLJ3Vn+0LlT0i7H3qgVHe3CNJ 7szHgnep+iavxavCUwK3lvA7Ac84jWtBKj4EBiIjFXGZzfFVZ15FOJxz+RYe60fDsi6T fzvA== X-Forwarded-Encrypted: i=1; AJvYcCUBQKAEXbCTQosDpSGydT9iwazVxXHReZN+ApRRxoUSoibnvFW5Gp7xD1mcaNCBulIGZRiFPqNMysxOCkd71ds=@lists.libcamera.org X-Gm-Message-State: AOJu0YxJKsLl8HMgVl9wIGObj65PXkngAtwbAuzurUhC146tpHBnc+Af hjR7xFlQnXR/sjO51QibNnEMg6faMoFet/kqFOj0/jXZpzhagD7DhRuL X-Gm-Gg: AZuq6aLWEMXU++lU/6loiO1/rThAd8b9BlcdfTK2R/Wu834JUI2glsnpmbxKXqFim3h WmDESLhAI6Bj1h7mTLWZGu8+pU0KOI6QQOWKfBbeGpQm9drmcJ054KAwaGJLHXz7w0IYsEdHFFA pe8nAOcCgK/AGWnlfUAcLGivlbd9FMRWYbWeZh8hyoGUCN/YzsNNydBckphrofBE59zz5UCk9ho r7o9LaVsapSglNupq+KjyzEGCT9gMfpad0ho6liR+fR591Ir6jWWCuqLN55b2ZVQ2udEEMiTl+M 80sTlOw9yMiMm8p93oyepur+imUk4BRw3Mb7e8KH8qRM2Jpg4Led8u5DBSocj7NfOY/T5StXyQL P7vVnpL/NKXrEL61dV09XHB1gX3I4soaN5qjz9fqvTfqgM1w0Sae7wAr2Rlxz0X2yAhFVG+KamT m9wf+L6fL2caC4oLhjMKZuB9qr1Ukif0RfkLRXA3FSJh8= X-Received: by 2002:a05:6a00:12d0:b0:81e:74a6:542d with SMTP id d2e1a72fcca58-823ab74b844mr7612034b3a.5.1770061631287; Mon, 02 Feb 2026 11:47:11 -0800 (PST) Received: from FAIZEL-KB.. ([2001:569:5999:dc00:af0:4465:b482:1e01]) by smtp.googlemail.com with ESMTPSA id d2e1a72fcca58-82379b1bc68sm16667416b3a.2.2026.02.02.11.47.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Feb 2026 11:47:10 -0800 (PST) From: Faizel K B To: Shuah Khan , Laurent Pinchart , Kieran Bingham , linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , libcamera-devel@lists.libcamera.org, Faizel K B Subject: [PATCH v2 3/3] media: vimc: streamer: Apply sensor frame rate in streamer 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 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Use the sensor's pre-calculated jiffies value to add appropriate delay between frames according to the configured timing value. The actual frame rate will vary depending on processing delays in other media pipeline components. Tested using yavta frame rate display with QCIF resolution: yavta --capture= Signed-off-by: Faizel K B --- .../media/test-drivers/vimc/vimc-streamer.c | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/drivers/media/test-drivers/vimc/vimc-streamer.c b/drivers/media/test-drivers/vimc/vimc-streamer.c index 15d863f97cbf..3ebf5798fa3d 100644 --- a/drivers/media/test-drivers/vimc/vimc-streamer.c +++ b/drivers/media/test-drivers/vimc/vimc-streamer.c @@ -139,6 +139,29 @@ static int vimc_streamer_pipeline_init(struct vimc_stream *stream, return -EINVAL; } +/** + * vimc_streamer_get_sensor() - Get sensor from pipeline + * @stream: the pipeline + * + * Helper function to find the sensor device in the pipeline. + * Returns pointer to sensor device or NULL if not found. + */ +static struct vimc_sensor_device *vimc_streamer_get_sensor(struct vimc_stream *stream) +{ + int i; + + for (i = 0; i < stream->pipe_size; i++) { + struct vimc_ent_device *ved = stream->ved_pipeline[i]; + + if (ved && ved->ent && + ved->ent->function == MEDIA_ENT_F_CAM_SENSOR) { + return container_of(ved, struct vimc_sensor_device, ved); + } + } + + return NULL; +} + /** * vimc_streamer_thread - Process frames through the pipeline * @@ -154,25 +177,31 @@ static int vimc_streamer_pipeline_init(struct vimc_stream *stream, static int vimc_streamer_thread(void *data) { struct vimc_stream *stream = data; + struct vimc_sensor_device *vsensor; u8 *frame = NULL; int i; + unsigned long fps_jiffies; + const unsigned long default_jiffies = HZ / 30; set_freezable(); + vsensor = vimc_streamer_get_sensor(stream); for (;;) { try_to_freeze(); if (kthread_should_stop()) break; + /* Read from hardware configuration */ + fps_jiffies = vsensor ? vsensor->hw.fps_jiffies : default_jiffies; + for (i = stream->pipe_size - 1; i >= 0; i--) { frame = stream->ved_pipeline[i]->process_frame( stream->ved_pipeline[i], frame); if (!frame || IS_ERR(frame)) break; } - //wait for 60hz set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 60); + schedule_timeout(fps_jiffies); } return 0;