[{"id":11249,"web_url":"https://patchwork.libcamera.org/comment/11249/","msgid":"<20200708151655.GF20298@pendragon.ideasonboard.com>","date":"2020-07-08T15:16:55","subject":"Re: [libcamera-devel] [PATCH v4 15/21] libcamera: raspberrypi: Fill\n\tstride and frameSize at config validation","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Paul,\n\nThank you for the patch.\n\nOn Wed, Jul 08, 2020 at 10:44:11PM +0900, Paul Elder wrote:\n> Fill the stride and frameSize fields of the StreamConfiguration at\n> configuration validation time instead of at camera configuration time.\n> This allows applications to get the stride when trying a configuration\n> without modifying the active configuration of the camera.\n> \n> Also set a default configuration size, in case the size is zero.\n\nThis would normally be split in a separate commit.\n\n> \n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> \n> ---\n> Changes in v4:\n> - mention motivation in commit message\n> - also fill stride and frameSize in the default format\n> \n> New in v3\n> ---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 45 +++++++++++++++----\n>  1 file changed, 37 insertions(+), 8 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index 1822ac9..d0ce446 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -427,6 +427,10 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \t\t\t */\n>  \t\t\tV4L2PixFmtMap fmts = data_->unicam_[Unicam::Image].dev()->formats();\n>  \t\t\tV4L2DeviceFormat sensorFormat = findBestMode(fmts, cfg.size);\n> +\t\t\tint ret = data_->unicam_[Unicam::Image].dev()->tryFormat(&sensorFormat);\n> +\t\t\tif (ret)\n> +\t\t\t\treturn Invalid;\n> +\n>  \t\t\tPixelFormat sensorPixFormat = sensorFormat.fourcc.toPixelFormat();\n>  \t\t\tif (cfg.size != sensorFormat.size ||\n>  \t\t\t    cfg.pixelFormat != sensorPixFormat) {\n> @@ -434,6 +438,10 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \t\t\t\tcfg.pixelFormat = sensorPixFormat;\n>  \t\t\t\tstatus = Adjusted;\n>  \t\t\t}\n> +\n> +\t\t\tcfg.stride = sensorFormat.planes[0].bpl;\n> +\t\t\tcfg.frameSize = sensorFormat.planes[0].size;\n> +\n>  \t\t\trawCount++;\n>  \t\t} else {\n>  \t\t\toutSize[outCount] = std::make_pair(count, cfg.size);\n> @@ -478,19 +486,43 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \t\t * have that fixed up in the code above.\n>  \t\t *\n>  \t\t */\n> -\t\tPixelFormat &cfgPixFmt = config_.at(outSize[i].first).pixelFormat;\n> +\t\tStreamConfiguration &cfg = config_.at(outSize[i].first);\n> +\t\tPixelFormat &cfgPixFmt = cfg.pixelFormat;\n> +\t\tV4L2VideoDevice *dev;\n>  \t\tV4L2PixFmtMap fmts;\n>  \n> -\t\tif (i == maxIndex)\n> -\t\t\tfmts = data_->isp_[Isp::Output0].dev()->formats();\n> -\t\telse\n> -\t\t\tfmts = data_->isp_[Isp::Output1].dev()->formats();\n> +\t\tif (i == maxIndex) {\n> +\t\t\tdev = data_->isp_[Isp::Output0].dev();\n> +\t\t\tfmts = dev->formats();\n> +\t\t} else {\n> +\t\t\tdev = data_->isp_[Isp::Output1].dev();\n> +\t\t\tfmts = dev->formats();\n> +\t\t}\n>  \n\nIf would remove fmts above and write here\n\n  \t\tV4L2PixFmtMap fmts = dev->formats();\n\n>  \t\tif (fmts.find(V4L2PixelFormat::fromPixelFormat(cfgPixFmt, false)) == fmts.end()) {\n>  \t\t\t/* If we cannot find a native format, use a default one. */\n>  \t\t\tcfgPixFmt = formats::NV12;\n> +\n> +\t\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(cfgPixFmt);\n> +\t\t\tcfg.size.width = 1920;\n> +\t\t\tcfg.size.height = 1080;\n\nWhy is this needed, isn't the code above supposed to pick a suitable\nsize ?\n\n> +\t\t\tcfg.stride = info.stride(cfg.size.width, 0);\n> +\t\t\tcfg.frameSize = info.frameSize(cfg.size);\n\nI think you can drop those two lines, as you set the stride and\nframeSize below.\n\n> +\n>  \t\t\tstatus = Adjusted;\n>  \t\t}\n> +\n> +\t\tV4L2DeviceFormat format = {};\n> +\t\tformat.fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);\n> +\t\tformat.size = cfg.size;\n> +\n> +\t\tint ret = dev->tryFormat(&format);\n> +\t\tif (ret)\n> +\t\t\treturn Invalid;\n> +\n> +\t\tcfg.stride = format.planes[0].bpl;\n> +\t\tcfg.frameSize = format.planes[0].size;\n> +\n>  \t}\n>  \n>  \treturn status;\n> @@ -655,7 +687,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \n>  \t\tif (isRaw(cfg.pixelFormat)) {\n>  \t\t\tcfg.setStream(&data->isp_[Isp::Input]);\n> -\t\t\tcfg.stride = sensorFormat.planes[0].bpl;\n>  \t\t\tdata->isp_[Isp::Input].setExternal(true);\n>  \t\t\tcontinue;\n>  \t\t}\n> @@ -679,7 +710,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\t\t}\n>  \n>  \t\t\tcfg.setStream(&data->isp_[Isp::Output0]);\n> -\t\t\tcfg.stride = format.planes[0].bpl;\n>  \t\t\tdata->isp_[Isp::Output0].setExternal(true);\n>  \t\t}\n>  \n> @@ -705,7 +735,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\t */\n>  \t\tif (!cfg.stream()) {\n>  \t\t\tcfg.setStream(&data->isp_[Isp::Output1]);\n> -\t\t\tcfg.stride = format.planes[0].bpl;\n>  \t\t\tdata->isp_[Isp::Output1].setExternal(true);\n>  \t\t}\n>  \t}","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 76B0DBD792\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jul 2020 15:17:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F018661153;\n\tWed,  8 Jul 2020 17:17:02 +0200 (CEST)","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 6163561138\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jul 2020 17:17:01 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D450B543;\n\tWed,  8 Jul 2020 17:17:00 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"T59WRVf8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1594221421;\n\tbh=gPkwwva1Tk0BEReKuWINJiD1mbAOsrRp7hCe2Q+Zk5w=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=T59WRVf85RhOyqafdmfURqpaVdlcJpbaRQ2HxbrIMsSMiy+BPI/i2iCcjGVWnuI/z\n\toXSnIowq7DldrAG0uwn327vSH4rboPnBpfb9uYmF8C2VYJshK2/AVdl1yn6jLJoqts\n\tTsw1SKC/vJyNF4uumAvC2c/zmFwoGrgRlFll7M+k=","Date":"Wed, 8 Jul 2020 18:16:55 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20200708151655.GF20298@pendragon.ideasonboard.com>","References":"<20200708134417.67747-1-paul.elder@ideasonboard.com>\n\t<20200708134417.67747-16-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200708134417.67747-16-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 15/21] libcamera: raspberrypi: Fill\n\tstride and frameSize at config validation","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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11264,"web_url":"https://patchwork.libcamera.org/comment/11264/","msgid":"<20200708213053.5cwixo7zbyb2ato6@uno.localdomain>","date":"2020-07-08T21:30:53","subject":"Re: [libcamera-devel] [PATCH v4 15/21] libcamera: raspberrypi: Fill\n\tstride and frameSize at config validation","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul,\n\nOn Wed, Jul 08, 2020 at 10:44:11PM +0900, Paul Elder wrote:\n> Fill the stride and frameSize fields of the StreamConfiguration at\n> configuration validation time instead of at camera configuration time.\n> This allows applications to get the stride when trying a configuration\n> without modifying the active configuration of the camera.\n>\n> Also set a default configuration size, in case the size is zero.\n>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n>\n> ---\n> Changes in v4:\n> - mention motivation in commit message\n> - also fill stride and frameSize in the default format\n>\n> New in v3\n> ---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 45 +++++++++++++++----\n>  1 file changed, 37 insertions(+), 8 deletions(-)\n>\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index 1822ac9..d0ce446 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -427,6 +427,10 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \t\t\t */\n>  \t\t\tV4L2PixFmtMap fmts = data_->unicam_[Unicam::Image].dev()->formats();\n>  \t\t\tV4L2DeviceFormat sensorFormat = findBestMode(fmts, cfg.size);\n> +\t\t\tint ret = data_->unicam_[Unicam::Image].dev()->tryFormat(&sensorFormat);\n> +\t\t\tif (ret)\n> +\t\t\t\treturn Invalid;\n> +\n\nIs this related ?\n\n>  \t\t\tPixelFormat sensorPixFormat = sensorFormat.fourcc.toPixelFormat();\n>  \t\t\tif (cfg.size != sensorFormat.size ||\n>  \t\t\t    cfg.pixelFormat != sensorPixFormat) {\n> @@ -434,6 +438,10 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \t\t\t\tcfg.pixelFormat = sensorPixFormat;\n>  \t\t\t\tstatus = Adjusted;\n>  \t\t\t}\n> +\n> +\t\t\tcfg.stride = sensorFormat.planes[0].bpl;\n> +\t\t\tcfg.frameSize = sensorFormat.planes[0].size;\n> +\n>  \t\t\trawCount++;\n>  \t\t} else {\n>  \t\t\toutSize[outCount] = std::make_pair(count, cfg.size);\n> @@ -478,19 +486,43 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \t\t * have that fixed up in the code above.\n>  \t\t *\n>  \t\t */\n> -\t\tPixelFormat &cfgPixFmt = config_.at(outSize[i].first).pixelFormat;\n> +\t\tStreamConfiguration &cfg = config_.at(outSize[i].first);\n> +\t\tPixelFormat &cfgPixFmt = cfg.pixelFormat;\n> +\t\tV4L2VideoDevice *dev;\n>  \t\tV4L2PixFmtMap fmts;\n>\n> -\t\tif (i == maxIndex)\n> -\t\t\tfmts = data_->isp_[Isp::Output0].dev()->formats();\n> -\t\telse\n> -\t\t\tfmts = data_->isp_[Isp::Output1].dev()->formats();\n> +\t\tif (i == maxIndex) {\n> +\t\t\tdev = data_->isp_[Isp::Output0].dev();\n> +\t\t\tfmts = dev->formats();\n> +\t\t} else {\n> +\t\t\tdev = data_->isp_[Isp::Output1].dev();\n> +\t\t\tfmts = dev->formats();\n> +\t\t}\n>\n>  \t\tif (fmts.find(V4L2PixelFormat::fromPixelFormat(cfgPixFmt, false)) == fmts.end()) {\n>  \t\t\t/* If we cannot find a native format, use a default one. */\n>  \t\t\tcfgPixFmt = formats::NV12;\n> +\n> +\t\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(cfgPixFmt);\n> +\t\t\tcfg.size.width = 1920;\n> +\t\t\tcfg.size.height = 1080;\n> +\t\t\tcfg.stride = info.stride(cfg.size.width, 0);\n> +\t\t\tcfg.frameSize = info.frameSize(cfg.size);\n> +\n>  \t\t\tstatus = Adjusted;\n>  \t\t}\n> +\n> +\t\tV4L2DeviceFormat format = {};\n> +\t\tformat.fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);\n> +\t\tformat.size = cfg.size;\n> +\n> +\t\tint ret = dev->tryFormat(&format);\n> +\t\tif (ret)\n> +\t\t\treturn Invalid;\n> +\n> +\t\tcfg.stride = format.planes[0].bpl;\n> +\t\tcfg.frameSize = format.planes[0].size;\n> +\n>  \t}\n>\n>  \treturn status;\n> @@ -655,7 +687,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>\n>  \t\tif (isRaw(cfg.pixelFormat)) {\n>  \t\t\tcfg.setStream(&data->isp_[Isp::Input]);\n> -\t\t\tcfg.stride = sensorFormat.planes[0].bpl;\n>  \t\t\tdata->isp_[Isp::Input].setExternal(true);\n>  \t\t\tcontinue;\n>  \t\t}\n> @@ -679,7 +710,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\t\t}\n>\n>  \t\t\tcfg.setStream(&data->isp_[Isp::Output0]);\n> -\t\t\tcfg.stride = format.planes[0].bpl;\n>  \t\t\tdata->isp_[Isp::Output0].setExternal(true);\n>  \t\t}\n>\n> @@ -705,7 +735,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\t */\n>  \t\tif (!cfg.stream()) {\n>  \t\t\tcfg.setStream(&data->isp_[Isp::Output1]);\n> -\t\t\tcfg.stride = format.planes[0].bpl;\n>  \t\t\tdata->isp_[Isp::Output1].setExternal(true);\n>  \t\t}\n>  \t}\n> --\n> 2.27.0\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 D054CBD790\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jul 2020 21:27:21 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4F5306116D;\n\tWed,  8 Jul 2020 23:27:21 +0200 (CEST)","from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[217.70.183.199])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5172B61163\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jul 2020 23:27:20 +0200 (CEST)","from uno.localdomain (2-224-242-101.ip172.fastwebnet.it\n\t[2.224.242.101]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 79198FF806;\n\tWed,  8 Jul 2020 21:27:19 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Wed, 8 Jul 2020 23:30:53 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20200708213053.5cwixo7zbyb2ato6@uno.localdomain>","References":"<20200708134417.67747-1-paul.elder@ideasonboard.com>\n\t<20200708134417.67747-16-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200708134417.67747-16-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 15/21] libcamera: raspberrypi: Fill\n\tstride and frameSize at config validation","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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11265,"web_url":"https://patchwork.libcamera.org/comment/11265/","msgid":"<20200708213533.vfaxk233rj4cobth@uno.localdomain>","date":"2020-07-08T21:35:33","subject":"Re: [libcamera-devel] [PATCH v4 15/21] libcamera: raspberrypi: Fill\n\tstride and frameSize at config validation","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"On Wed, Jul 08, 2020 at 11:30:53PM +0200, Jacopo Mondi wrote:\n> Hi Paul,\n>\n> On Wed, Jul 08, 2020 at 10:44:11PM +0900, Paul Elder wrote:\n> > Fill the stride and frameSize fields of the StreamConfiguration at\n> > configuration validation time instead of at camera configuration time.\n> > This allows applications to get the stride when trying a configuration\n> > without modifying the active configuration of the camera.\n> >\n> > Also set a default configuration size, in case the size is zero.\n> >\n> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> >\n> > ---\n> > Changes in v4:\n> > - mention motivation in commit message\n> > - also fill stride and frameSize in the default format\n> >\n> > New in v3\n> > ---\n> >  .../pipeline/raspberrypi/raspberrypi.cpp      | 45 +++++++++++++++----\n> >  1 file changed, 37 insertions(+), 8 deletions(-)\n> >\n> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > index 1822ac9..d0ce446 100644\n> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > @@ -427,6 +427,10 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n> >  \t\t\t */\n> >  \t\t\tV4L2PixFmtMap fmts = data_->unicam_[Unicam::Image].dev()->formats();\n> >  \t\t\tV4L2DeviceFormat sensorFormat = findBestMode(fmts, cfg.size);\n> > +\t\t\tint ret = data_->unicam_[Unicam::Image].dev()->tryFormat(&sensorFormat);\n> > +\t\t\tif (ret)\n> > +\t\t\t\treturn Invalid;\n> > +\n>\n> Is this related ?\n>\n\nOf course it is, sorry, I mis-read that :)\n\n> >  \t\t\tPixelFormat sensorPixFormat = sensorFormat.fourcc.toPixelFormat();\n> >  \t\t\tif (cfg.size != sensorFormat.size ||\n> >  \t\t\t    cfg.pixelFormat != sensorPixFormat) {\n> > @@ -434,6 +438,10 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n> >  \t\t\t\tcfg.pixelFormat = sensorPixFormat;\n> >  \t\t\t\tstatus = Adjusted;\n> >  \t\t\t}\n> > +\n> > +\t\t\tcfg.stride = sensorFormat.planes[0].bpl;\n> > +\t\t\tcfg.frameSize = sensorFormat.planes[0].size;\n> > +\n> >  \t\t\trawCount++;\n> >  \t\t} else {\n> >  \t\t\toutSize[outCount] = std::make_pair(count, cfg.size);\n> > @@ -478,19 +486,43 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n> >  \t\t * have that fixed up in the code above.\n> >  \t\t *\n> >  \t\t */\n> > -\t\tPixelFormat &cfgPixFmt = config_.at(outSize[i].first).pixelFormat;\n> > +\t\tStreamConfiguration &cfg = config_.at(outSize[i].first);\n> > +\t\tPixelFormat &cfgPixFmt = cfg.pixelFormat;\n> > +\t\tV4L2VideoDevice *dev;\n> >  \t\tV4L2PixFmtMap fmts;\n> >\n> > -\t\tif (i == maxIndex)\n> > -\t\t\tfmts = data_->isp_[Isp::Output0].dev()->formats();\n> > -\t\telse\n> > -\t\t\tfmts = data_->isp_[Isp::Output1].dev()->formats();\n> > +\t\tif (i == maxIndex) {\n> > +\t\t\tdev = data_->isp_[Isp::Output0].dev();\n> > +\t\t\tfmts = dev->formats();\n> > +\t\t} else {\n> > +\t\t\tdev = data_->isp_[Isp::Output1].dev();\n> > +\t\t\tfmts = dev->formats();\n> > +\t\t}\n> >\n> >  \t\tif (fmts.find(V4L2PixelFormat::fromPixelFormat(cfgPixFmt, false)) == fmts.end()) {\n> >  \t\t\t/* If we cannot find a native format, use a default one. */\n> >  \t\t\tcfgPixFmt = formats::NV12;\n> > +\n> > +\t\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(cfgPixFmt);\n> > +\t\t\tcfg.size.width = 1920;\n> > +\t\t\tcfg.size.height = 1080;\n> > +\t\t\tcfg.stride = info.stride(cfg.size.width, 0);\n> > +\t\t\tcfg.frameSize = info.frameSize(cfg.size);\n> > +\n> >  \t\t\tstatus = Adjusted;\n> >  \t\t}\n> > +\n> > +\t\tV4L2DeviceFormat format = {};\n> > +\t\tformat.fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);\n> > +\t\tformat.size = cfg.size;\n> > +\n> > +\t\tint ret = dev->tryFormat(&format);\n> > +\t\tif (ret)\n> > +\t\t\treturn Invalid;\n> > +\n> > +\t\tcfg.stride = format.planes[0].bpl;\n> > +\t\tcfg.frameSize = format.planes[0].size;\n> > +\n> >  \t}\n> >\n> >  \treturn status;\n> > @@ -655,7 +687,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n> >\n> >  \t\tif (isRaw(cfg.pixelFormat)) {\n> >  \t\t\tcfg.setStream(&data->isp_[Isp::Input]);\n> > -\t\t\tcfg.stride = sensorFormat.planes[0].bpl;\n> >  \t\t\tdata->isp_[Isp::Input].setExternal(true);\n> >  \t\t\tcontinue;\n> >  \t\t}\n> > @@ -679,7 +710,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n> >  \t\t\t}\n> >\n> >  \t\t\tcfg.setStream(&data->isp_[Isp::Output0]);\n> > -\t\t\tcfg.stride = format.planes[0].bpl;\n> >  \t\t\tdata->isp_[Isp::Output0].setExternal(true);\n> >  \t\t}\n> >\n> > @@ -705,7 +735,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n> >  \t\t */\n> >  \t\tif (!cfg.stream()) {\n> >  \t\t\tcfg.setStream(&data->isp_[Isp::Output1]);\n> > -\t\t\tcfg.stride = format.planes[0].bpl;\n> >  \t\t\tdata->isp_[Isp::Output1].setExternal(true);\n> >  \t\t}\n> >  \t}\n> > --\n> > 2.27.0\n> >\n> > _______________________________________________\n> > libcamera-devel mailing list\n> > libcamera-devel@lists.libcamera.org\n> > https://lists.libcamera.org/listinfo/libcamera-devel\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 A1AC0BD792\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jul 2020 21:32:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 16AAA6116D;\n\tWed,  8 Jul 2020 23:32:01 +0200 (CEST)","from relay10.mail.gandi.net (relay10.mail.gandi.net\n\t[217.70.178.230])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 793F361163\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jul 2020 23:31:59 +0200 (CEST)","from uno.localdomain (2-224-242-101.ip172.fastwebnet.it\n\t[2.224.242.101]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay10.mail.gandi.net (Postfix) with ESMTPSA id EC944240003;\n\tWed,  8 Jul 2020 21:31:58 +0000 (UTC)"],"Date":"Wed, 8 Jul 2020 23:35:33 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20200708213533.vfaxk233rj4cobth@uno.localdomain>","References":"<20200708134417.67747-1-paul.elder@ideasonboard.com>\n\t<20200708134417.67747-16-paul.elder@ideasonboard.com>\n\t<20200708213053.5cwixo7zbyb2ato6@uno.localdomain>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200708213053.5cwixo7zbyb2ato6@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH v4 15/21] libcamera: raspberrypi: Fill\n\tstride and frameSize at config validation","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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]