[{"id":33525,"web_url":"https://patchwork.libcamera.org/comment/33525/","msgid":"<174087243517.3864332.103004259237916415@ping.linuxembedded.co.uk>","date":"2025-03-01T23:40:35","subject":"Re: [PATCH v5 4/5] pipeline: simple: Do not apply controls twice","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Stanislaw Gruszka (2025-02-25 16:41:15)\n> Apply controls directly only when there is no start frame emitter\n> device.\n> \n> Co-developed-by: Hans de Goede <hdegoede@redhat.com>\n> Signed-off-by: Hans de Goede <hdegoede@redhat.com>\n> Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> ---\n>  src/libcamera/pipeline/simple/simple.cpp | 7 +++++--\n>  1 file changed, 5 insertions(+), 2 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index 774c7824..b92b738b 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -911,8 +911,11 @@ void SimpleCameraData::ispStatsReady(uint32_t frame, uint32_t bufferId)\n>  void SimpleCameraData::setSensorControls(const ControlList &sensorControls)\n>  {\n>         delayedCtrls_->push(sensorControls);\n> -       ControlList ctrls(sensorControls);\n> -       sensor_->setControls(&ctrls);\n> +       /* Directly apply controls now if there is no frameStart signal */\n\nI wonder if in the future we would generate some software start event\nhere, which will be timed. But I think just setting is fine to do for\nnow.\n\n> +       if (!frameStartEmitter_) {\n> +               ControlList ctrls(sensorControls);\n> +               sensor_->setControls(&ctrls);\n> +       }\n>  }\n>  \n>  /* Retrieve all source pads connected to a sink pad through active routes. */\n> -- \n> 2.43.0\n>","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 8C45DC3263\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat,  1 Mar 2025 23:40:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 476A068822;\n\tSun,  2 Mar 2025 00:40:38 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5493661853\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun,  2 Mar 2025 00:40:37 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 25EE9666;\n\tSun,  2 Mar 2025 00:39:07 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"fqNbO3OH\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1740872347;\n\tbh=Im9YLBNrkDDuNfFX7k7gcSQl4yEq9oW6PvQDnXVoIig=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=fqNbO3OHtqiHvu1HOvxYJnvkf9u2O6KL+fX8WzZMy+iIBXl8nxah9TuUDbx0/kiUE\n\te77V5/yI0DS7KKj15OS6s2x82XxyD/ffhuIAN3mnsmUmV9Ro/qyf1j4y89G6tHL9YG\n\tej4cZP13io7/maikLAt0Boz+dt3wHfvgML91Mgbw=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250225164116.414301-5-stanislaw.gruszka@linux.intel.com>","References":"<20250225164116.414301-1-stanislaw.gruszka@linux.intel.com>\n\t<20250225164116.414301-5-stanislaw.gruszka@linux.intel.com>","Subject":"Re: [PATCH v5 4/5] pipeline: simple: Do not apply controls twice","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Milan Zamazal <mzamazal@redhat.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tNaushir Patuck <naush@raspberrypi.com>,\n\tSakari Ailus <sakari.ailus@linux.intel.com>,\n\tHans de Goede <hdegoede@redhat.com>","To":"Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Sat, 01 Mar 2025 23:40:35 +0000","Message-ID":"<174087243517.3864332.103004259237916415@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}},{"id":33529,"web_url":"https://patchwork.libcamera.org/comment/33529/","msgid":"<20250302012001.GA15048@pendragon.ideasonboard.com>","date":"2025-03-02T01:20:01","subject":"Re: [PATCH v5 4/5] pipeline: simple: Do not apply controls twice","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Sat, Mar 01, 2025 at 11:40:35PM +0000, Kieran Bingham wrote:\n> Quoting Stanislaw Gruszka (2025-02-25 16:41:15)\n> > Apply controls directly only when there is no start frame emitter\n> > device.\n> > \n> > Co-developed-by: Hans de Goede <hdegoede@redhat.com>\n> > Signed-off-by: Hans de Goede <hdegoede@redhat.com>\n> > Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>\n> \n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> > ---\n> >  src/libcamera/pipeline/simple/simple.cpp | 7 +++++--\n> >  1 file changed, 5 insertions(+), 2 deletions(-)\n> > \n> > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > index 774c7824..b92b738b 100644\n> > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > @@ -911,8 +911,11 @@ void SimpleCameraData::ispStatsReady(uint32_t frame, uint32_t bufferId)\n> >  void SimpleCameraData::setSensorControls(const ControlList &sensorControls)\n> >  {\n> >         delayedCtrls_->push(sensorControls);\n> > -       ControlList ctrls(sensorControls);\n> > -       sensor_->setControls(&ctrls);\n> > +       /* Directly apply controls now if there is no frameStart signal */\n> \n> I wonder if in the future we would generate some software start event\n> here, which will be timed. But I think just setting is fine to do for\n> now.\n\nWe clearly need to do better than this when there is no frame start\nsource, as setting controls here completely bypass delayed controls, and\nwill result in regulation issues. Let's add a comment about it.\n\n\t/*\n\t * Directly apply controls now if there is no frameStart signal.\n\t *\n\t * \\todo Applying controls directly not only increases the risk of\n\t * applying them to the wrong frame (or across a frame boundary), but it\n\t * also bypasses delayedCtrls_, creating AGC regulation issues. Both\n\t * problems should be fixed.\n\t */\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> > +       if (!frameStartEmitter_) {\n> > +               ControlList ctrls(sensorControls);\n> > +               sensor_->setControls(&ctrls);\n> > +       }\n> >  }\n> >  \n> >  /* Retrieve all source pads connected to a sink pad through active routes. */","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 E3F03C3263\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun,  2 Mar 2025 01:20:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 243FD6871A;\n\tSun,  2 Mar 2025 02:20:22 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9491E61833\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun,  2 Mar 2025 02:20:20 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E99053E4;\n\tSun,  2 Mar 2025 02:18:49 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"i1SUQWCd\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1740878330;\n\tbh=dLSj8XZVg/aBdge6MiI1cZzxVt4+xjlsbPLts3norZs=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=i1SUQWCdnbwjAWMc2lbUUtI15fxx5nLbgIvs9subzCQ8pAgGKMXy3LZpw6yL2qZnL\n\tTRvD/+6Nw8PQmLKtsA8/Q/IPtv+yKtbAVB5JEjMTaIGPgT0ScdPSwtAd67jPyvnxBh\n\tERgu6HxCW8v9R6OxvMhXQ4I8rP0wQqKlcXqIcfy0=","Date":"Sun, 2 Mar 2025 03:20:01 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>,\n\tlibcamera-devel@lists.libcamera.org,\n\tMilan Zamazal <mzamazal@redhat.com>, \n\tNaushir Patuck <naush@raspberrypi.com>,\n\tSakari Ailus <sakari.ailus@linux.intel.com>,\n\tHans de Goede <hdegoede@redhat.com>","Subject":"Re: [PATCH v5 4/5] pipeline: simple: Do not apply controls twice","Message-ID":"<20250302012001.GA15048@pendragon.ideasonboard.com>","References":"<20250225164116.414301-1-stanislaw.gruszka@linux.intel.com>\n\t<20250225164116.414301-5-stanislaw.gruszka@linux.intel.com>\n\t<174087243517.3864332.103004259237916415@ping.linuxembedded.co.uk>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<174087243517.3864332.103004259237916415@ping.linuxembedded.co.uk>","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>"}}]