From patchwork Thu Mar 12 23:16:16 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: 26282 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 92E82BDCC1 for ; Thu, 12 Mar 2026 23:17:48 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 444546267F; Fri, 13 Mar 2026 00:17:48 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VRBcxwPT"; dkim-atps=neutral Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4BFB46265F for ; Fri, 13 Mar 2026 00:17:46 +0100 (CET) Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2a3e79fe2b8so1555135ad.1 for ; Thu, 12 Mar 2026 16:17:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773357465; x=1773962265; 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=VRBcxwPT6xayGCoBvjqB3g+tUn31KZM9aCd2yEvnbA/vK21MFer8ct4l6wIhjwDlgB VLsdkLBbo+ZvzHicWJjOXDvss1LfQG+A+5h/perxpaNR6m6m6AfsbnnTEml6w+zLDiZp H45AkRHSPMl0/XHZ4nIaxN3M08DSXYsPDcgVPl1bt2CFYkDQZtbitFotSksWwbbHy2gD B5UyBOLZ0EERjLuoASUwYctPffngebFEdSz7Xd76U7KLlbX6v5XDqx85MN6PmjX/iBYt suJDWCbkc2A5FqjteU2PzaP5cSir9cFs8lDtK83dqY07Y9xQhAb3MlivRuCBcdyNLcw3 xd9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773357465; x=1773962265; 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=Da74RClYJpcSNiFrFcA7nTe6F92fTMI2oD1PcN86xK+nd0g/7BKFOjfgA0nQSO4ner LPe0RCKUwbur1X1b2kxwtRZynTU5ODEEBI8K186T8UFTgp0f8mkFQvpsvzHPAKKMDWyb aRficQlseoCK/sefi6FvNX3gZ4yOs3iL3OXff/T707TOqqsEcMUA9aZVVsI1YY3DKJig BrJWwjm76/BQeGjyx2Qs+XL+D9HTeHQbEYWc/PpqaR1HGLX7S6zCgvI+5q5XkE0nQZCC tyWqFYrgLnqHWoJjVtT80f5DlGEG2GdVD8WOvUq1FjqH4wB5QiwUi+PHTWHeybT9E53x 352Q== X-Forwarded-Encrypted: i=1; AJvYcCXVvTD1ju7aobuUkEnl3cwAa+wCGTJb1OhhNHuFZ/jPIew8QowroV5600SCLtmylcyL3PgZMN6O8uOBA7BSLuA=@lists.libcamera.org X-Gm-Message-State: AOJu0Yy2fRFHbgdKYubL6D/BafL7GIXNpXxvBSMiXTYEPB1grdl2rBAq 5AYjjRL+0aTvf2auX3xt6nrrSsRoEYoZYuwNxfNcXJkaqL10fgb2aF8unE/VjdwHUjE= X-Gm-Gg: ATEYQzz5IcPFRIWaZMvn1lxoCl2KOjJCK9xGgAz6mIT9lSBAQKzoPzu+2eKlnFbkld5 bNVunna0RDjh+r7+ustw7x+WgSMO6yCbX4kKRs7IdnEu6jT6lEUvsperU7Vt5qMHhlJk3GXbFsw DE9u+5dNQuQLOeruDY89jcUhEhXzUTTAtFd8ibHATEjQYTZnloWO9A0veTUTUYEqBK6KJQeEdW4 l5YEy5n7tg4sc+rnVzMpwGmllhosyxLcE4fbEzLPx/Sq01uYiDF8ypb+94OeRMJ2kjMOqy8TZb1 Poe1mTj9hCfFmxlINatxECTZZTp8Ytp2+Se7a2ZSNVaCIaqcAB50x0+R6w5jihMbfkcpKKduJrY jpYElbhfjjrHdLvZQSENj1Ylq9hlS1TyocDOe1rHMSzWadhbxMfmUoRW14h2qYXP5UN22AgvLPW RzQZ0tplb/hXqG93vHkxn6H7Z5E9WiH7o3uLpIq/77jMuQjl4onG/zT00j4yDutvXnuQ== X-Received: by 2002:a17:902:e550:b0:2ae:7ed6:7d19 with SMTP id d9443c01a7336-2aecaad2c12mr6749555ad.4.1773357464899; Thu, 12 Mar 2026 16:17:44 -0700 (PDT) Received: from FAIZEL-KB.. ([2001:569:5b64:e100:3685:315:53bf:61fc]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-2aece81cde8sm619395ad.70.2026.03.12.16.17.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 16:17:44 -0700 (PDT) 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 RESEND v3 3/3] media: vimc: streamer: Apply sensor frame rate in 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 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;