[{"id":20450,"web_url":"https://patchwork.libcamera.org/comment/20450/","msgid":"<YXbkmtsixKhKjnAp@pendragon.ideasonboard.com>","date":"2021-10-25T17:08:42","subject":"Re: [libcamera-devel] [PATCH v2 6/6] pipeline: raspberrypi: Apply\n\tsensor flips at the start of configure()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nThank you for the patch.\n\nOn Fri, Oct 22, 2021 at 03:39:07PM +0100, Naushir Patuck wrote:\n> Sensor flips might change the Bayer order of the requested format. The existing\n> code would set a sensor format along with the appropriate Unicam and ISP input\n> formats, but reset the latter two on start() once the flips had been requested.\n> \n> We can now set the sensor flips just after we set the sensor mode in\n> configure(), thereby not needing the second pair of format sets in start().\n> \n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> Review-by: David Plowman <david.plowman@raspberrypi.com>\n> ---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 60 +++++++------------\n>  1 file changed, 21 insertions(+), 39 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index c5e9607c7d95..ad6f1231bbf6 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -627,16 +627,34 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \n>  \t/* First calculate the best sensor mode we can use based on the user request. */\n>  \tV4L2SubdeviceFormat sensorFormat = findBestMode(data->sensorFormats_, rawStream ? sensorSize : maxSize);\n> -\tV4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat, unpacked);\n>  \n>  \tret = data->sensor_->setFormat(&sensorFormat);\n>  \tif (ret)\n>  \t\treturn ret;\n>  \n>  \t/*\n> -\t * Unicam image output format. The ISP input format gets set at start,\n> -\t * just in case we have swapped bayer orders due to flips.\n> +\t * Configure the H/V flip controls based on the combination of\n> +\t * the sensor and user transform.\n>  \t */\n> +\tif (data->supportsFlips_) {\n> +\t\tconst RPiCameraConfiguration *rpiConfig =\n> +\t\t\tstatic_cast<const RPiCameraConfiguration *>(config);\n> +\t\tControlList controls;\n> +\n> +\t\tcontrols.set(V4L2_CID_HFLIP,\n> +\t\t\t     static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::HFlip)));\n> +\t\tcontrols.set(V4L2_CID_VFLIP,\n> +\t\t\t     static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::VFlip)));\n> +\t\tdata->setSensorControls(controls);\n> +\n> +\t\t/*\n> +\t\t * IPA configure may have changed the sensor flips - hence the bayer\n> +\t\t * order. So update the sensor format now.\n> +\t\t */\n> +\t\tdata->sensor_->device()->getFormat(0, &sensorFormat);\n> +\t}\n\nIf you moved this whole block before the sensor_->setFormat() call,\ncould you drop getFormat() ?\n\n> +\n> +\tV4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat, unpacked);\n>  \tret = data->unicam_[Unicam::Image].dev()->setFormat(&unicamFormat);\n>  \tif (ret)\n>  \t\treturn ret;\n> @@ -645,10 +663,6 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\t       << \" - Selected sensor mode: \" << sensorFormat.toString()\n>  \t\t       << \" - Selected unicam mode: \" << unicamFormat.toString();\n>  \n> -\t/*\n> -\t * This format may be reset on start() if the bayer order has changed\n> -\t * because of flips in the sensor.\n> -\t */\n>  \tret = data->isp_[Isp::Input].dev()->setFormat(&unicamFormat);\n>  \tif (ret)\n>  \t\treturn ret;\n> @@ -871,23 +885,6 @@ int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)\n>  \t\treturn ret;\n>  \t}\n>  \n> -\t/*\n> -\t * IPA configure may have changed the sensor flips - hence the bayer\n> -\t * order. Get the sensor format and set the ISP input now.\n> -\t */\n> -\tV4L2SubdeviceFormat sensorFormat;\n> -\tdata->sensor_->device()->getFormat(0, &sensorFormat);\n> -\n> -\tV4L2DeviceFormat ispFormat;\n> -\tispFormat.fourcc = BayerFormat::fromMbusCode(sensorFormat.mbus_code).toV4L2PixelFormat();\n> -\tispFormat.size = sensorFormat.size;\n> -\n> -\tret = data->isp_[Isp::Input].dev()->setFormat(&ispFormat);\n> -\tif (ret) {\n> -\t\tstop(camera);\n> -\t\treturn ret;\n> -\t}\n> -\n>  \t/* Enable SOF event generation. */\n>  \tdata->unicam_[Unicam::Image].dev()->setFrameStartEnabled(true);\n>  \n> @@ -1301,10 +1298,6 @@ int RPiCameraData::loadIPA(ipa::RPi::SensorConfig *sensorConfig)\n>  \n>  int RPiCameraData::configureIPA(const CameraConfiguration *config)\n>  {\n> -\t/* We know config must be an RPiCameraConfiguration. */\n> -\tconst RPiCameraConfiguration *rpiConfig =\n> -\t\tstatic_cast<const RPiCameraConfiguration *>(config);\n> -\n>  \tstd::map<unsigned int, IPAStream> streamConfig;\n>  \tstd::map<unsigned int, ControlInfoMap> entityControls;\n>  \tipa::RPi::IPAConfig ipaConfig;\n> @@ -1355,17 +1348,6 @@ int RPiCameraData::configureIPA(const CameraConfiguration *config)\n>  \t\treturn -EPIPE;\n>  \t}\n>  \n> -\t/*\n> -\t * Configure the H/V flip controls based on the combination of\n> -\t * the sensor and user transform.\n> -\t */\n> -\tif (supportsFlips_) {\n> -\t\tcontrols.set(V4L2_CID_HFLIP,\n> -\t\t\t     static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::HFlip)));\n> -\t\tcontrols.set(V4L2_CID_VFLIP,\n> -\t\t\t     static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::VFlip)));\n> -\t}\n> -\n>  \tif (!controls.empty())\n>  \t\tsetSensorControls(controls);\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 80355BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 25 Oct 2021 17:09:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DA1DC64875;\n\tMon, 25 Oct 2021 19:09:06 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E9A3960125\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 25 Oct 2021 19:09:04 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6609F119F;\n\tMon, 25 Oct 2021 19:09:04 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"P79K8gTY\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1635181744;\n\tbh=RVWVuU0hOqLypvBdIGx7ExuY7OJ2t/JBtpCYsaNbnvA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=P79K8gTY+JZ6XAm8gf30lSqs7RqfO7BJOtfmNJuuEwV76v9DgzzMlMvru+aJo4dxj\n\te7dFrS08r4C1QGuPPOHQ9i0HHAMjXht5GWkG6TGYEQx3GUE1eeY/NKtiA/b/5v1B3w\n\tPaamA31g90NRqzGFs8opMd3S3Ix5m+T6d1xciB64=","Date":"Mon, 25 Oct 2021 20:08:42 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<YXbkmtsixKhKjnAp@pendragon.ideasonboard.com>","References":"<20211022143907.3089419-1-naush@raspberrypi.com>\n\t<20211022143907.3089419-7-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211022143907.3089419-7-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v2 6/6] pipeline: raspberrypi: Apply\n\tsensor flips at the start of configure()","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":20512,"web_url":"https://patchwork.libcamera.org/comment/20512/","msgid":"<CAEmqJPocVQTsu-HKUTeAOnNAOVEFsP_+=7k3vMK66BU6Zeto9g@mail.gmail.com>","date":"2021-10-26T07:55:39","subject":"Re: [libcamera-devel] [PATCH v2 6/6] pipeline: raspberrypi: Apply\n\tsensor flips at the start of configure()","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi Laurent,\n\nThank you for your feedback.\n\nOn Mon, 25 Oct 2021 at 18:09, Laurent Pinchart <\nlaurent.pinchart@ideasonboard.com> wrote:\n\n> Hi Naush,\n>\n> Thank you for the patch.\n>\n> On Fri, Oct 22, 2021 at 03:39:07PM +0100, Naushir Patuck wrote:\n> > Sensor flips might change the Bayer order of the requested format. The\n> existing\n> > code would set a sensor format along with the appropriate Unicam and ISP\n> input\n> > formats, but reset the latter two on start() once the flips had been\n> requested.\n> >\n> > We can now set the sensor flips just after we set the sensor mode in\n> > configure(), thereby not needing the second pair of format sets in\n> start().\n> >\n> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> > Review-by: David Plowman <david.plowman@raspberrypi.com>\n> > ---\n> >  .../pipeline/raspberrypi/raspberrypi.cpp      | 60 +++++++------------\n> >  1 file changed, 21 insertions(+), 39 deletions(-)\n> >\n> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > index c5e9607c7d95..ad6f1231bbf6 100644\n> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > @@ -627,16 +627,34 @@ int PipelineHandlerRPi::configure(Camera *camera,\n> CameraConfiguration *config)\n> >\n> >       /* First calculate the best sensor mode we can use based on the\n> user request. */\n> >       V4L2SubdeviceFormat sensorFormat =\n> findBestMode(data->sensorFormats_, rawStream ? sensorSize : maxSize);\n> > -     V4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat,\n> unpacked);\n> >\n> >       ret = data->sensor_->setFormat(&sensorFormat);\n> >       if (ret)\n> >               return ret;\n> >\n> >       /*\n> > -      * Unicam image output format. The ISP input format gets set at\n> start,\n> > -      * just in case we have swapped bayer orders due to flips.\n> > +      * Configure the H/V flip controls based on the combination of\n> > +      * the sensor and user transform.\n> >        */\n> > +     if (data->supportsFlips_) {\n> > +             const RPiCameraConfiguration *rpiConfig =\n> > +                     static_cast<const RPiCameraConfiguration\n> *>(config);\n> > +             ControlList controls;\n> > +\n> > +             controls.set(V4L2_CID_HFLIP,\n> > +\n> static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::HFlip)));\n> > +             controls.set(V4L2_CID_VFLIP,\n> > +\n> static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::VFlip)));\n> > +             data->setSensorControls(controls);\n> > +\n> > +             /*\n> > +              * IPA configure may have changed the sensor flips - hence\n> the bayer\n> > +              * order. So update the sensor format now.\n> > +              */\n> > +             data->sensor_->device()->getFormat(0, &sensorFormat);\n> > +     }\n>\n> If you moved this whole block before the sensor_->setFormat() call,\n> could you drop getFormat() ?\n>\n\nYes I could!  Will fix this and all other suggested changes in a v3 shortly.\n\nThanks,\nNaush\n\n>\n> > +\n> > +     V4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat,\n> unpacked);\n> >       ret = data->unicam_[Unicam::Image].dev()->setFormat(&unicamFormat);\n> >       if (ret)\n> >               return ret;\n> > @@ -645,10 +663,6 @@ int PipelineHandlerRPi::configure(Camera *camera,\n> CameraConfiguration *config)\n> >                      << \" - Selected sensor mode: \" <<\n> sensorFormat.toString()\n> >                      << \" - Selected unicam mode: \" <<\n> unicamFormat.toString();\n> >\n> > -     /*\n> > -      * This format may be reset on start() if the bayer order has\n> changed\n> > -      * because of flips in the sensor.\n> > -      */\n> >       ret = data->isp_[Isp::Input].dev()->setFormat(&unicamFormat);\n> >       if (ret)\n> >               return ret;\n> > @@ -871,23 +885,6 @@ int PipelineHandlerRPi::start(Camera *camera, const\n> ControlList *controls)\n> >               return ret;\n> >       }\n> >\n> > -     /*\n> > -      * IPA configure may have changed the sensor flips - hence the\n> bayer\n> > -      * order. Get the sensor format and set the ISP input now.\n> > -      */\n> > -     V4L2SubdeviceFormat sensorFormat;\n> > -     data->sensor_->device()->getFormat(0, &sensorFormat);\n> > -\n> > -     V4L2DeviceFormat ispFormat;\n> > -     ispFormat.fourcc =\n> BayerFormat::fromMbusCode(sensorFormat.mbus_code).toV4L2PixelFormat();\n> > -     ispFormat.size = sensorFormat.size;\n> > -\n> > -     ret = data->isp_[Isp::Input].dev()->setFormat(&ispFormat);\n> > -     if (ret) {\n> > -             stop(camera);\n> > -             return ret;\n> > -     }\n> > -\n> >       /* Enable SOF event generation. */\n> >       data->unicam_[Unicam::Image].dev()->setFrameStartEnabled(true);\n> >\n> > @@ -1301,10 +1298,6 @@ int RPiCameraData::loadIPA(ipa::RPi::SensorConfig\n> *sensorConfig)\n> >\n> >  int RPiCameraData::configureIPA(const CameraConfiguration *config)\n> >  {\n> > -     /* We know config must be an RPiCameraConfiguration. */\n> > -     const RPiCameraConfiguration *rpiConfig =\n> > -             static_cast<const RPiCameraConfiguration *>(config);\n> > -\n> >       std::map<unsigned int, IPAStream> streamConfig;\n> >       std::map<unsigned int, ControlInfoMap> entityControls;\n> >       ipa::RPi::IPAConfig ipaConfig;\n> > @@ -1355,17 +1348,6 @@ int RPiCameraData::configureIPA(const\n> CameraConfiguration *config)\n> >               return -EPIPE;\n> >       }\n> >\n> > -     /*\n> > -      * Configure the H/V flip controls based on the combination of\n> > -      * the sensor and user transform.\n> > -      */\n> > -     if (supportsFlips_) {\n> > -             controls.set(V4L2_CID_HFLIP,\n> > -\n> static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::HFlip)));\n> > -             controls.set(V4L2_CID_VFLIP,\n> > -\n> static_cast<int32_t>(!!(rpiConfig->combinedTransform_ & Transform::VFlip)));\n> > -     }\n> > -\n> >       if (!controls.empty())\n> >               setSensorControls(controls);\n> >\n>\n> --\n> Regards,\n>\n> Laurent Pinchart\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 10884BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 26 Oct 2021 07:55:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 626266487A;\n\tTue, 26 Oct 2021 09:55:57 +0200 (CEST)","from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com\n\t[IPv6:2a00:1450:4864:20::12f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B680360123\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 26 Oct 2021 09:55:55 +0200 (CEST)","by mail-lf1-x12f.google.com with SMTP id u11so9571703lfs.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 26 Oct 2021 00:55:55 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"kWDfLJGT\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=ZcVseRxTiM9mATr3xmMbO9x1a2YaJPOxecK9l4m+rOM=;\n\tb=kWDfLJGTZ2S5TuHOJ7XY0x1yiJNVNB/d+3nV5ZciK+RjsOF+tAvqP57rWTf2ym5s3P\n\tZGQJTfi/K1BWzxkuHXfUju2fHv9fabRsEd1emTd8c3UGe+5hTVMA+4Mnoj4AeogFb2sP\n\tvJ1rxxRYfNIRf7Gwi/3T35Fxrbpf4ZZ9Gvu50/z8gFN8TLDF05Z/JfciQ0jEGlg6iCbe\n\tCT8Xmm2Hfra63CnXiGY4kYJiSo+DK5+fFKJJBqAe+zNRhXbhMEht9TPA8SMVzUMmg2kZ\n\tj7OtAUL14Di9zbQh5C0jlNLGRt75J3BhRZcIqXIq3MR1s3HvR2zBMc//WNMSAw8FSnyt\n\t4YoA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=ZcVseRxTiM9mATr3xmMbO9x1a2YaJPOxecK9l4m+rOM=;\n\tb=vfaSCt0lMnlNuxRnvKqTmB1GpkHEPX/uybVUKg3pixXKp/G3mbK1vKkQxtbdPxz3vT\n\t6Sk/t3utg39xOxBMIs5HhVaYIlSyy4GRz+HkowYjHGxxE/AmZuQ0lugGhkxtS3Fs8p+R\n\t10Wix5gHGL1BXoL6yct019a5R/sbVuGLtpNTg793MtPkJTHEb3eX30mml+/HitpAEk4c\n\tUqy/5emfcNBhitcwimAQDRtkXROtJ+II7DwUvm6RbyS2B0jx3aIqL/kQuk1weq4dgpUy\n\tYol8MsdZHAlea4O6f+RRJOUr+9Kkq+S1WaF7OEdrjhdYT7RI5uJfN+lk6jBsQRiLGMN2\n\tDquQ==","X-Gm-Message-State":"AOAM5325DuDKeM9cDmEl9hr6cexJDDMPZtAAbGqD4i4lI6cJKr1taO+1\n\tnCZjdrZIgowZHKD57bkdlnP8Yu6pHBuniSHMFD0x3g==","X-Google-Smtp-Source":"ABdhPJz/Cz0avG04p7S5JKBDlnB9TaCsPogc4bln9qNPb3bTc09Xku98DdA9mob+OHPCwBuXW78trauLhHGjYy7jS28=","X-Received":"by 2002:ac2:5304:: with SMTP id\n\tc4mr12987574lfh.687.1635234955109; \n\tTue, 26 Oct 2021 00:55:55 -0700 (PDT)","MIME-Version":"1.0","References":"<20211022143907.3089419-1-naush@raspberrypi.com>\n\t<20211022143907.3089419-7-naush@raspberrypi.com>\n\t<YXbkmtsixKhKjnAp@pendragon.ideasonboard.com>","In-Reply-To":"<YXbkmtsixKhKjnAp@pendragon.ideasonboard.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Tue, 26 Oct 2021 08:55:39 +0100","Message-ID":"<CAEmqJPocVQTsu-HKUTeAOnNAOVEFsP_+=7k3vMK66BU6Zeto9g@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"multipart/alternative; boundary=\"0000000000009fbf3505cf3cce68\"","Subject":"Re: [libcamera-devel] [PATCH v2 6/6] pipeline: raspberrypi: Apply\n\tsensor flips at the start of configure()","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 <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]