[{"id":12036,"web_url":"https://patchwork.libcamera.org/comment/12036/","msgid":"<20200819015845.GN2360@pendragon.ideasonboard.com>","date":"2020-08-19T01:58:45","subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi David,\n\nThank you for the patch.\n\nOn Thu, Aug 06, 2020 at 05:36:36PM +0100, David Plowman wrote:\n> Add a field to the CameraConfiguration to represent a 2d transform\n> requested by the application. All pipeline handlers are amended to\n> coerce this to the Identity, marking the configuration as \"adjusted\"\n> if something different had been requested.\n> \n> Pipeline handlers that support Transforms can be amended subsequently.\n\nMissing SoB here too. Maybe that was done on purpose, as the series\nisn't complete yet. It's also customary to express that with RFC/PATCH\nin the subject line (git-format-patch has a --subject-prefix options for\nthat).\n\nApart from the missing documentation, this looks fine to me.\n\n> ---\n>  include/libcamera/camera.h                         | 3 +++\n>  src/libcamera/camera.cpp                           | 2 +-\n>  src/libcamera/pipeline/ipu3/ipu3.cpp               | 5 +++++\n>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 5 +++++\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 5 +++++\n>  src/libcamera/pipeline/simple/simple.cpp           | 5 +++++\n>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 5 +++++\n>  src/libcamera/pipeline/vimc/vimc.cpp               | 5 +++++\n>  8 files changed, 34 insertions(+), 1 deletion(-)\n> \n> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> index 48d88d6..dedc1c6 100644\n> --- a/include/libcamera/camera.h\n> +++ b/include/libcamera/camera.h\n> @@ -17,6 +17,7 @@\n>  #include <libcamera/request.h>\n>  #include <libcamera/signal.h>\n>  #include <libcamera/stream.h>\n> +#include <libcamera/transform.h>\n>  \n>  namespace libcamera {\n>  \n> @@ -61,6 +62,8 @@ public:\n>  \tbool empty() const;\n>  \tstd::size_t size() const;\n>  \n> +\tTransform transform;\n> +\n>  protected:\n>  \tCameraConfiguration();\n>  \n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index 820fa1e..4282a02 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -93,7 +93,7 @@ LOG_DECLARE_CATEGORY(Camera)\n>   * \\brief Create an empty camera configuration\n>   */\n>  CameraConfiguration::CameraConfiguration()\n> -\t: config_({})\n> +\t: transform(Transform::Identity), config_({})\n>  {\n>  }\n>  \n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index d931ed3..a9a82a4 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -138,6 +138,11 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n>  \tif (config_.empty())\n>  \t\treturn Invalid;\n>  \n> +\tif (transform != Transform::Identity) {\n> +\t\ttransform = Transform::Identity;\n> +\t\tstatus = Adjusted;\n> +\t}\n> +\n>  \t/* Cap the number of entries to the available streams. */\n>  \tif (config_.size() > IPU3_MAX_STREAMS) {\n>  \t\tconfig_.resize(IPU3_MAX_STREAMS);\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index eeaf335..236aa5c 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -400,6 +400,11 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \tif (config_.empty())\n>  \t\treturn Invalid;\n>  \n> +\tif (transform != Transform::Identity) {\n> +\t\ttransform = Transform::Identity;\n> +\t\tstatus = Adjusted;\n> +\t}\n> +\n>  \tunsigned int rawCount = 0, outCount = 0, count = 0, maxIndex = 0;\n>  \tstd::pair<int, Size> outSize[2];\n>  \tSize maxSize;\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index b7609cb..002f8e5 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -478,6 +478,11 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n>  \tif (config_.empty())\n>  \t\treturn Invalid;\n>  \n> +\tif (transform != Transform::Identity) {\n> +\t\ttransform = Transform::Identity;\n> +\t\tstatus = Adjusted;\n> +\t}\n> +\n>  \t/* Cap the number of entries to the available streams. */\n>  \tif (config_.size() > 1) {\n>  \t\tconfig_.resize(1);\n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index eb72e3b..10223a9 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -438,6 +438,11 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n>  \tif (config_.empty())\n>  \t\treturn Invalid;\n>  \n> +\tif (transform != Transform::Identity) {\n> +\t\ttransform = Transform::Identity;\n> +\t\tstatus = Adjusted;\n> +\t}\n> +\n>  \t/* Cap the number of entries to the available streams. */\n>  \tif (config_.size() > 1) {\n>  \t\tconfig_.resize(1);\n> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> index bc892ec..fd14248 100644\n> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> @@ -108,6 +108,11 @@ CameraConfiguration::Status UVCCameraConfiguration::validate()\n>  \tif (config_.empty())\n>  \t\treturn Invalid;\n>  \n> +\tif (transform != Transform::Identity) {\n> +\t\ttransform = Transform::Identity;\n> +\t\tstatus = Adjusted;\n> +\t}\n> +\n>  \t/* Cap the number of entries to the available streams. */\n>  \tif (config_.size() > 1) {\n>  \t\tconfig_.resize(1);\n> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> index cf244f1..bb791d6 100644\n> --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> @@ -130,6 +130,11 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()\n>  \tif (config_.empty())\n>  \t\treturn Invalid;\n>  \n> +\tif (transform != Transform::Identity) {\n> +\t\ttransform = Transform::Identity;\n> +\t\tstatus = Adjusted;\n> +\t}\n> +\n>  \t/* Cap the number of entries to the available streams. */\n>  \tif (config_.size() > 1) {\n>  \t\tconfig_.resize(1);","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 9ABDCBE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 19 Aug 2020 01:59:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0FD3761E0E;\n\tWed, 19 Aug 2020 03:59:04 +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 1C90560384\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 Aug 2020 03:59:03 +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 8AA7829E;\n\tWed, 19 Aug 2020 03:59:02 +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=\"BvWiV2lX\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1597802342;\n\tbh=sxnZD5QSg5gCwkdPe8UwZqoTYsmfEmW2bFE8PzVf9Yw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BvWiV2lX7XWgox+9AK61yENfjCQIvhyX+6ijAnPBNDOSgCOLJvenGCFKz2/Nx5WWI\n\tEoCXIJfAlh3ZuIS96WpUQplW7ek+B/r/InM11onM2O78LbJPhgJZaUZ9tjqovaY1w6\n\t80SEiHK446szH7tTFcikR6gNfacNTTKLf0hwDGH8=","Date":"Wed, 19 Aug 2020 04:58:45 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Message-ID":"<20200819015845.GN2360@pendragon.ideasonboard.com>","References":"<20200806163639.12971-1-david.plowman@raspberrypi.com>\n\t<20200806163639.12971-3-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200806163639.12971-3-david.plowman@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","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":12041,"web_url":"https://patchwork.libcamera.org/comment/12041/","msgid":"<ef00199a-0c7c-bfd7-5ae0-f233081e71e2@ideasonboard.com>","date":"2020-08-19T08:34:13","subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 19/08/2020 02:58, Laurent Pinchart wrote:\n> Hi David,\n> \n> Thank you for the patch.\n> \n> On Thu, Aug 06, 2020 at 05:36:36PM +0100, David Plowman wrote:\n>> Add a field to the CameraConfiguration to represent a 2d transform\n>> requested by the application. All pipeline handlers are amended to\n>> coerce this to the Identity, marking the configuration as \"adjusted\"\n>> if something different had been requested.\n>>\n>> Pipeline handlers that support Transforms can be amended subsequently.\n> \n> Missing SoB here too. Maybe that was done on purpose, as the series\n> isn't complete yet. It's also customary to express that with RFC/PATCH\n> in the subject line (git-format-patch has a --subject-prefix options for\n> that).\n\nit also has --rfc directly as a shorthand ;-)\n\ngit format-patch -3 --cover-letter --rfc -v2\n\ncat v2-0000-cover-letter.patch  | grep Subject\nSubject: [RFC PATCH v2 0/3] *** SUBJECT HERE ***\n\n--\nKieran\n\n\n> \n> Apart from the missing documentation, this looks fine to me.\n> \n>> ---\n>>  include/libcamera/camera.h                         | 3 +++\n>>  src/libcamera/camera.cpp                           | 2 +-\n>>  src/libcamera/pipeline/ipu3/ipu3.cpp               | 5 +++++\n>>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 5 +++++\n>>  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 5 +++++\n>>  src/libcamera/pipeline/simple/simple.cpp           | 5 +++++\n>>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 5 +++++\n>>  src/libcamera/pipeline/vimc/vimc.cpp               | 5 +++++\n>>  8 files changed, 34 insertions(+), 1 deletion(-)\n>>\n>> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n>> index 48d88d6..dedc1c6 100644\n>> --- a/include/libcamera/camera.h\n>> +++ b/include/libcamera/camera.h\n>> @@ -17,6 +17,7 @@\n>>  #include <libcamera/request.h>\n>>  #include <libcamera/signal.h>\n>>  #include <libcamera/stream.h>\n>> +#include <libcamera/transform.h>\n>>  \n>>  namespace libcamera {\n>>  \n>> @@ -61,6 +62,8 @@ public:\n>>  \tbool empty() const;\n>>  \tstd::size_t size() const;\n>>  \n>> +\tTransform transform;\n>> +\n>>  protected:\n>>  \tCameraConfiguration();\n>>  \n>> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n>> index 820fa1e..4282a02 100644\n>> --- a/src/libcamera/camera.cpp\n>> +++ b/src/libcamera/camera.cpp\n>> @@ -93,7 +93,7 @@ LOG_DECLARE_CATEGORY(Camera)\n>>   * \\brief Create an empty camera configuration\n>>   */\n>>  CameraConfiguration::CameraConfiguration()\n>> -\t: config_({})\n>> +\t: transform(Transform::Identity), config_({})\n>>  {\n>>  }\n>>  \n>> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n>> index d931ed3..a9a82a4 100644\n>> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n>> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n>> @@ -138,6 +138,11 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n>>  \tif (config_.empty())\n>>  \t\treturn Invalid;\n>>  \n>> +\tif (transform != Transform::Identity) {\n>> +\t\ttransform = Transform::Identity;\n>> +\t\tstatus = Adjusted;\n>> +\t}\n>> +\n>>  \t/* Cap the number of entries to the available streams. */\n>>  \tif (config_.size() > IPU3_MAX_STREAMS) {\n>>  \t\tconfig_.resize(IPU3_MAX_STREAMS);\n>> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n>> index eeaf335..236aa5c 100644\n>> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n>> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n>> @@ -400,6 +400,11 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>>  \tif (config_.empty())\n>>  \t\treturn Invalid;\n>>  \n>> +\tif (transform != Transform::Identity) {\n>> +\t\ttransform = Transform::Identity;\n>> +\t\tstatus = Adjusted;\n>> +\t}\n>> +\n>>  \tunsigned int rawCount = 0, outCount = 0, count = 0, maxIndex = 0;\n>>  \tstd::pair<int, Size> outSize[2];\n>>  \tSize maxSize;\n>> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n>> index b7609cb..002f8e5 100644\n>> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n>> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n>> @@ -478,6 +478,11 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n>>  \tif (config_.empty())\n>>  \t\treturn Invalid;\n>>  \n>> +\tif (transform != Transform::Identity) {\n>> +\t\ttransform = Transform::Identity;\n>> +\t\tstatus = Adjusted;\n>> +\t}\n>> +\n>>  \t/* Cap the number of entries to the available streams. */\n>>  \tif (config_.size() > 1) {\n>>  \t\tconfig_.resize(1);\n>> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n>> index eb72e3b..10223a9 100644\n>> --- a/src/libcamera/pipeline/simple/simple.cpp\n>> +++ b/src/libcamera/pipeline/simple/simple.cpp\n>> @@ -438,6 +438,11 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n>>  \tif (config_.empty())\n>>  \t\treturn Invalid;\n>>  \n>> +\tif (transform != Transform::Identity) {\n>> +\t\ttransform = Transform::Identity;\n>> +\t\tstatus = Adjusted;\n>> +\t}\n>> +\n>>  \t/* Cap the number of entries to the available streams. */\n>>  \tif (config_.size() > 1) {\n>>  \t\tconfig_.resize(1);\n>> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n>> index bc892ec..fd14248 100644\n>> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n>> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n>> @@ -108,6 +108,11 @@ CameraConfiguration::Status UVCCameraConfiguration::validate()\n>>  \tif (config_.empty())\n>>  \t\treturn Invalid;\n>>  \n>> +\tif (transform != Transform::Identity) {\n>> +\t\ttransform = Transform::Identity;\n>> +\t\tstatus = Adjusted;\n>> +\t}\n>> +\n>>  \t/* Cap the number of entries to the available streams. */\n>>  \tif (config_.size() > 1) {\n>>  \t\tconfig_.resize(1);\n>> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n>> index cf244f1..bb791d6 100644\n>> --- a/src/libcamera/pipeline/vimc/vimc.cpp\n>> +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n>> @@ -130,6 +130,11 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()\n>>  \tif (config_.empty())\n>>  \t\treturn Invalid;\n>>  \n>> +\tif (transform != Transform::Identity) {\n>> +\t\ttransform = Transform::Identity;\n>> +\t\tstatus = Adjusted;\n>> +\t}\n>> +\n>>  \t/* Cap the number of entries to the available streams. */\n>>  \tif (config_.size() > 1) {\n>>  \t\tconfig_.resize(1);\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 33316BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 19 Aug 2020 08:34:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A34B061E0E;\n\tWed, 19 Aug 2020 10:34:19 +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 6BFA760381\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 Aug 2020 10:34:17 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C1A4B29E;\n\tWed, 19 Aug 2020 10:34:16 +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=\"Dfbu1qcs\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1597826057;\n\tbh=EzrYMKSSKcWldU+soaGC/DD4PMNwIMTGuoC7W0XJsBo=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=Dfbu1qcs793FFXzLDUoAP1z53rclzb1iLh71Xvua8D1UdzvQz8yB1XtMu3N/DkEYs\n\tfTaiCZcyhIrehkKwVf5oz5+5vuAWuq0Tc5WbyIvmQ+QWqaRlAsdLbF5TQXs0xGvl4U\n\tFj5Gb9s2nf2lr96CzqHHvpPCkQyepHsIGfboLxQE=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tDavid Plowman <david.plowman@raspberrypi.com>","References":"<20200806163639.12971-1-david.plowman@raspberrypi.com>\n\t<20200806163639.12971-3-david.plowman@raspberrypi.com>\n\t<20200819015845.GN2360@pendragon.ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<ef00199a-0c7c-bfd7-5ae0-f233081e71e2@ideasonboard.com>","Date":"Wed, 19 Aug 2020 09:34:13 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20200819015845.GN2360@pendragon.ideasonboard.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","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>","Reply-To":"kieran.bingham@ideasonboard.com","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":12042,"web_url":"https://patchwork.libcamera.org/comment/12042/","msgid":"<CAHW6GYJiWh=rd73CaE2S0WDDBrm5GiEZxX2yGsfHXSvFbHr5qQ@mail.gmail.com>","date":"2020-08-19T08:40:31","subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Thanks everyone, noted for next time!\n\nDavid\n\nOn Wed, 19 Aug 2020 at 09:34, Kieran Bingham\n<kieran.bingham@ideasonboard.com> wrote:\n>\n> Hi Laurent,\n>\n> On 19/08/2020 02:58, Laurent Pinchart wrote:\n> > Hi David,\n> >\n> > Thank you for the patch.\n> >\n> > On Thu, Aug 06, 2020 at 05:36:36PM +0100, David Plowman wrote:\n> >> Add a field to the CameraConfiguration to represent a 2d transform\n> >> requested by the application. All pipeline handlers are amended to\n> >> coerce this to the Identity, marking the configuration as \"adjusted\"\n> >> if something different had been requested.\n> >>\n> >> Pipeline handlers that support Transforms can be amended subsequently.\n> >\n> > Missing SoB here too. Maybe that was done on purpose, as the series\n> > isn't complete yet. It's also customary to express that with RFC/PATCH\n> > in the subject line (git-format-patch has a --subject-prefix options for\n> > that).\n>\n> it also has --rfc directly as a shorthand ;-)\n>\n> git format-patch -3 --cover-letter --rfc -v2\n>\n> cat v2-0000-cover-letter.patch  | grep Subject\n> Subject: [RFC PATCH v2 0/3] *** SUBJECT HERE ***\n>\n> --\n> Kieran\n>\n>\n> >\n> > Apart from the missing documentation, this looks fine to me.\n> >\n> >> ---\n> >>  include/libcamera/camera.h                         | 3 +++\n> >>  src/libcamera/camera.cpp                           | 2 +-\n> >>  src/libcamera/pipeline/ipu3/ipu3.cpp               | 5 +++++\n> >>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 5 +++++\n> >>  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 5 +++++\n> >>  src/libcamera/pipeline/simple/simple.cpp           | 5 +++++\n> >>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 5 +++++\n> >>  src/libcamera/pipeline/vimc/vimc.cpp               | 5 +++++\n> >>  8 files changed, 34 insertions(+), 1 deletion(-)\n> >>\n> >> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> >> index 48d88d6..dedc1c6 100644\n> >> --- a/include/libcamera/camera.h\n> >> +++ b/include/libcamera/camera.h\n> >> @@ -17,6 +17,7 @@\n> >>  #include <libcamera/request.h>\n> >>  #include <libcamera/signal.h>\n> >>  #include <libcamera/stream.h>\n> >> +#include <libcamera/transform.h>\n> >>\n> >>  namespace libcamera {\n> >>\n> >> @@ -61,6 +62,8 @@ public:\n> >>      bool empty() const;\n> >>      std::size_t size() const;\n> >>\n> >> +    Transform transform;\n> >> +\n> >>  protected:\n> >>      CameraConfiguration();\n> >>\n> >> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> >> index 820fa1e..4282a02 100644\n> >> --- a/src/libcamera/camera.cpp\n> >> +++ b/src/libcamera/camera.cpp\n> >> @@ -93,7 +93,7 @@ LOG_DECLARE_CATEGORY(Camera)\n> >>   * \\brief Create an empty camera configuration\n> >>   */\n> >>  CameraConfiguration::CameraConfiguration()\n> >> -    : config_({})\n> >> +    : transform(Transform::Identity), config_({})\n> >>  {\n> >>  }\n> >>\n> >> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> index d931ed3..a9a82a4 100644\n> >> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> @@ -138,6 +138,11 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n> >>      if (config_.empty())\n> >>              return Invalid;\n> >>\n> >> +    if (transform != Transform::Identity) {\n> >> +            transform = Transform::Identity;\n> >> +            status = Adjusted;\n> >> +    }\n> >> +\n> >>      /* Cap the number of entries to the available streams. */\n> >>      if (config_.size() > IPU3_MAX_STREAMS) {\n> >>              config_.resize(IPU3_MAX_STREAMS);\n> >> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> >> index eeaf335..236aa5c 100644\n> >> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> >> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> >> @@ -400,6 +400,11 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n> >>      if (config_.empty())\n> >>              return Invalid;\n> >>\n> >> +    if (transform != Transform::Identity) {\n> >> +            transform = Transform::Identity;\n> >> +            status = Adjusted;\n> >> +    }\n> >> +\n> >>      unsigned int rawCount = 0, outCount = 0, count = 0, maxIndex = 0;\n> >>      std::pair<int, Size> outSize[2];\n> >>      Size maxSize;\n> >> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> >> index b7609cb..002f8e5 100644\n> >> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> >> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> >> @@ -478,6 +478,11 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n> >>      if (config_.empty())\n> >>              return Invalid;\n> >>\n> >> +    if (transform != Transform::Identity) {\n> >> +            transform = Transform::Identity;\n> >> +            status = Adjusted;\n> >> +    }\n> >> +\n> >>      /* Cap the number of entries to the available streams. */\n> >>      if (config_.size() > 1) {\n> >>              config_.resize(1);\n> >> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> >> index eb72e3b..10223a9 100644\n> >> --- a/src/libcamera/pipeline/simple/simple.cpp\n> >> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> >> @@ -438,6 +438,11 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n> >>      if (config_.empty())\n> >>              return Invalid;\n> >>\n> >> +    if (transform != Transform::Identity) {\n> >> +            transform = Transform::Identity;\n> >> +            status = Adjusted;\n> >> +    }\n> >> +\n> >>      /* Cap the number of entries to the available streams. */\n> >>      if (config_.size() > 1) {\n> >>              config_.resize(1);\n> >> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> >> index bc892ec..fd14248 100644\n> >> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> >> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> >> @@ -108,6 +108,11 @@ CameraConfiguration::Status UVCCameraConfiguration::validate()\n> >>      if (config_.empty())\n> >>              return Invalid;\n> >>\n> >> +    if (transform != Transform::Identity) {\n> >> +            transform = Transform::Identity;\n> >> +            status = Adjusted;\n> >> +    }\n> >> +\n> >>      /* Cap the number of entries to the available streams. */\n> >>      if (config_.size() > 1) {\n> >>              config_.resize(1);\n> >> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> >> index cf244f1..bb791d6 100644\n> >> --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> >> +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> >> @@ -130,6 +130,11 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()\n> >>      if (config_.empty())\n> >>              return Invalid;\n> >>\n> >> +    if (transform != Transform::Identity) {\n> >> +            transform = Transform::Identity;\n> >> +            status = Adjusted;\n> >> +    }\n> >> +\n> >>      /* Cap the number of entries to the available streams. */\n> >>      if (config_.size() > 1) {\n> >>              config_.resize(1);\n> >\n>\n> --\n> Regards\n> --\n> Kieran","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 21C8ABE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 19 Aug 2020 08:40:46 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9B7FF61E66;\n\tWed, 19 Aug 2020 10:40:45 +0200 (CEST)","from mail-oi1-x244.google.com (mail-oi1-x244.google.com\n\t[IPv6:2607:f8b0:4864:20::244])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5980360381\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 Aug 2020 10:40:44 +0200 (CEST)","by mail-oi1-x244.google.com with SMTP id b22so20333438oic.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 Aug 2020 01:40:44 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"F3lpcuWc\"; 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=LTEG7vlqu07EYe0J8zIdyNrwQSLXelgg7cFoLsk8R2A=;\n\tb=F3lpcuWcT63B1NObkdYnYgHEjXcCOh294MNfypj02F9yhrGigV9Vb/A6zlVgyWQ49x\n\tWzdQJTjsANIqE0cRr1p8gtOuFs5gvO4LvzbHodb02qQV2wcIqXfNGgp+SV1dvpIoSket\n\t64l13yy21doqpsL5dUQH9AixdiqvPoXfWds1zQiSVaNX7ooOEDIyycLKl/LY77OYCMp2\n\tTxCx89UN5xyF4neL+pOpNUWpkDjINu56sFZmYsMcvXIsA3XunmRnUx6RNG1h2vOYzUbt\n\t3/OdYWuy+CnbuxzP6lp683AfNpyzVLZNrKyPx2xdg+K0XFsUFdRFyfAbvhYI913jz7R/\n\tN2pA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=LTEG7vlqu07EYe0J8zIdyNrwQSLXelgg7cFoLsk8R2A=;\n\tb=sivOy/BlaUFD7wc6gC1JP9w1/fHg1C7pwNAcrj5zwCuZ5yD/TxIR4zyZ3iuoGKTnpP\n\tipIBsROdRFaqGdH3sgqOKD7xbRYqXYOfz6vkvMXfzts2o7WSu34TXksYKvKJoq09Ogta\n\tIZnzFZPTtcIH/qIJMLoezNT1u1cwKCh441Njz3S2OJc09/MchvQHLyBBowzU3pLxYaYi\n\tPK2altld5jU+mzCUArwbR4rtXEAB4YQPKgYNIlq2iqe8qJFpUa8pFCSW2kNo1Y/3qViC\n\tuyPGktrBI7AT6mdvIyHkzQY8j97QzDZ4fhuCpvJ2DgIYfUw9C/EJP66JHUswxhf2/eje\n\tdcpw==","X-Gm-Message-State":"AOAM531MplF69WmSypkzi6+rmvPjIDIkWeFPfWdD3HRpquOxRFpxb6Mz\n\tN1ztXGhTzfRg7Z+uqilke3SiS4qH0opKS9+ybOR0J1I2IiE=","X-Google-Smtp-Source":"ABdhPJz9iPPJmBFOT25SCk3vQB4Avh1Srmq6FZeSjqyyTGO/PYhgdH4kvgIIrdoRtx405rS8dRArcsbqLK0t/BGQD0c=","X-Received":"by 2002:aca:bfc6:: with SMTP id\n\tp189mr2436554oif.55.1597826442888; \n\tWed, 19 Aug 2020 01:40:42 -0700 (PDT)","MIME-Version":"1.0","References":"<20200806163639.12971-1-david.plowman@raspberrypi.com>\n\t<20200806163639.12971-3-david.plowman@raspberrypi.com>\n\t<20200819015845.GN2360@pendragon.ideasonboard.com>\n\t<ef00199a-0c7c-bfd7-5ae0-f233081e71e2@ideasonboard.com>","In-Reply-To":"<ef00199a-0c7c-bfd7-5ae0-f233081e71e2@ideasonboard.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Wed, 19 Aug 2020 09:40:31 +0100","Message-ID":"<CAHW6GYJiWh=rd73CaE2S0WDDBrm5GiEZxX2yGsfHXSvFbHr5qQ@mail.gmail.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","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":12044,"web_url":"https://patchwork.libcamera.org/comment/12044/","msgid":"<20200819121831.GF6049@pendragon.ideasonboard.com>","date":"2020-08-19T12:18:31","subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Wed, Aug 19, 2020 at 09:34:13AM +0100, Kieran Bingham wrote:\n> On 19/08/2020 02:58, Laurent Pinchart wrote:\n> > On Thu, Aug 06, 2020 at 05:36:36PM +0100, David Plowman wrote:\n> >> Add a field to the CameraConfiguration to represent a 2d transform\n> >> requested by the application. All pipeline handlers are amended to\n> >> coerce this to the Identity, marking the configuration as \"adjusted\"\n> >> if something different had been requested.\n> >>\n> >> Pipeline handlers that support Transforms can be amended subsequently.\n> > \n> > Missing SoB here too. Maybe that was done on purpose, as the series\n> > isn't complete yet. It's also customary to express that with RFC/PATCH\n> > in the subject line (git-format-patch has a --subject-prefix options for\n> > that).\n> \n> it also has --rfc directly as a shorthand ;-)\n> \n> git format-patch -3 --cover-letter --rfc -v2\n\nOh, I didn't know that. Neat :-)\n\n> cat v2-0000-cover-letter.patch  | grep Subject\n> Subject: [RFC PATCH v2 0/3] *** SUBJECT HERE ***\n> \n> > Apart from the missing documentation, this looks fine to me.\n> > \n> >> ---\n> >>  include/libcamera/camera.h                         | 3 +++\n> >>  src/libcamera/camera.cpp                           | 2 +-\n> >>  src/libcamera/pipeline/ipu3/ipu3.cpp               | 5 +++++\n> >>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 5 +++++\n> >>  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 5 +++++\n> >>  src/libcamera/pipeline/simple/simple.cpp           | 5 +++++\n> >>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 5 +++++\n> >>  src/libcamera/pipeline/vimc/vimc.cpp               | 5 +++++\n> >>  8 files changed, 34 insertions(+), 1 deletion(-)\n> >>\n> >> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> >> index 48d88d6..dedc1c6 100644\n> >> --- a/include/libcamera/camera.h\n> >> +++ b/include/libcamera/camera.h\n> >> @@ -17,6 +17,7 @@\n> >>  #include <libcamera/request.h>\n> >>  #include <libcamera/signal.h>\n> >>  #include <libcamera/stream.h>\n> >> +#include <libcamera/transform.h>\n> >>  \n> >>  namespace libcamera {\n> >>  \n> >> @@ -61,6 +62,8 @@ public:\n> >>  \tbool empty() const;\n> >>  \tstd::size_t size() const;\n> >>  \n> >> +\tTransform transform;\n> >> +\n> >>  protected:\n> >>  \tCameraConfiguration();\n> >>  \n> >> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> >> index 820fa1e..4282a02 100644\n> >> --- a/src/libcamera/camera.cpp\n> >> +++ b/src/libcamera/camera.cpp\n> >> @@ -93,7 +93,7 @@ LOG_DECLARE_CATEGORY(Camera)\n> >>   * \\brief Create an empty camera configuration\n> >>   */\n> >>  CameraConfiguration::CameraConfiguration()\n> >> -\t: config_({})\n> >> +\t: transform(Transform::Identity), config_({})\n> >>  {\n> >>  }\n> >>  \n> >> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> index d931ed3..a9a82a4 100644\n> >> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> @@ -138,6 +138,11 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n> >>  \tif (config_.empty())\n> >>  \t\treturn Invalid;\n> >>  \n> >> +\tif (transform != Transform::Identity) {\n> >> +\t\ttransform = Transform::Identity;\n> >> +\t\tstatus = Adjusted;\n> >> +\t}\n> >> +\n> >>  \t/* Cap the number of entries to the available streams. */\n> >>  \tif (config_.size() > IPU3_MAX_STREAMS) {\n> >>  \t\tconfig_.resize(IPU3_MAX_STREAMS);\n> >> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> >> index eeaf335..236aa5c 100644\n> >> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> >> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> >> @@ -400,6 +400,11 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n> >>  \tif (config_.empty())\n> >>  \t\treturn Invalid;\n> >>  \n> >> +\tif (transform != Transform::Identity) {\n> >> +\t\ttransform = Transform::Identity;\n> >> +\t\tstatus = Adjusted;\n> >> +\t}\n> >> +\n> >>  \tunsigned int rawCount = 0, outCount = 0, count = 0, maxIndex = 0;\n> >>  \tstd::pair<int, Size> outSize[2];\n> >>  \tSize maxSize;\n> >> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> >> index b7609cb..002f8e5 100644\n> >> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> >> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> >> @@ -478,6 +478,11 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n> >>  \tif (config_.empty())\n> >>  \t\treturn Invalid;\n> >>  \n> >> +\tif (transform != Transform::Identity) {\n> >> +\t\ttransform = Transform::Identity;\n> >> +\t\tstatus = Adjusted;\n> >> +\t}\n> >> +\n> >>  \t/* Cap the number of entries to the available streams. */\n> >>  \tif (config_.size() > 1) {\n> >>  \t\tconfig_.resize(1);\n> >> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> >> index eb72e3b..10223a9 100644\n> >> --- a/src/libcamera/pipeline/simple/simple.cpp\n> >> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> >> @@ -438,6 +438,11 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n> >>  \tif (config_.empty())\n> >>  \t\treturn Invalid;\n> >>  \n> >> +\tif (transform != Transform::Identity) {\n> >> +\t\ttransform = Transform::Identity;\n> >> +\t\tstatus = Adjusted;\n> >> +\t}\n> >> +\n> >>  \t/* Cap the number of entries to the available streams. */\n> >>  \tif (config_.size() > 1) {\n> >>  \t\tconfig_.resize(1);\n> >> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> >> index bc892ec..fd14248 100644\n> >> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> >> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> >> @@ -108,6 +108,11 @@ CameraConfiguration::Status UVCCameraConfiguration::validate()\n> >>  \tif (config_.empty())\n> >>  \t\treturn Invalid;\n> >>  \n> >> +\tif (transform != Transform::Identity) {\n> >> +\t\ttransform = Transform::Identity;\n> >> +\t\tstatus = Adjusted;\n> >> +\t}\n> >> +\n> >>  \t/* Cap the number of entries to the available streams. */\n> >>  \tif (config_.size() > 1) {\n> >>  \t\tconfig_.resize(1);\n> >> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> >> index cf244f1..bb791d6 100644\n> >> --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> >> +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> >> @@ -130,6 +130,11 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()\n> >>  \tif (config_.empty())\n> >>  \t\treturn Invalid;\n> >>  \n> >> +\tif (transform != Transform::Identity) {\n> >> +\t\ttransform = Transform::Identity;\n> >> +\t\tstatus = Adjusted;\n> >> +\t}\n> >> +\n> >>  \t/* Cap the number of entries to the available streams. */\n> >>  \tif (config_.size() > 1) {\n> >>  \t\tconfig_.resize(1);","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 84796BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 19 Aug 2020 12:18:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 12B2560387;\n\tWed, 19 Aug 2020 14:18:55 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4AA1860383\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 Aug 2020 14:18:53 +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 56C1D563;\n\tWed, 19 Aug 2020 14:18:48 +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=\"OU7rFVVE\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1597839532;\n\tbh=aw/K3iWMK6f8VpzRE5WWFC6OSwXr8BfwKsNyV0SXxDM=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=OU7rFVVEdJ/Az0rv2I9T4FYgw2Ju0BKci6YWV7T5q9q8XDQ7RsO2PH0j8scmg4Yq0\n\tQXqCBFEUe/c6dSYV7cWWXsAq1ADE1acbBPYIEfLXW9MavEn9H6hZ4JBuW+HtaF1cE0\n\tGYp/4wpuKn4eZ/9HMM57oo6GFJ1I5I0hgqemf1CQ=","Date":"Wed, 19 Aug 2020 15:18:31 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200819121831.GF6049@pendragon.ideasonboard.com>","References":"<20200806163639.12971-1-david.plowman@raspberrypi.com>\n\t<20200806163639.12971-3-david.plowman@raspberrypi.com>\n\t<20200819015845.GN2360@pendragon.ideasonboard.com>\n\t<ef00199a-0c7c-bfd7-5ae0-f233081e71e2@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<ef00199a-0c7c-bfd7-5ae0-f233081e71e2@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform\n\tto CameraConfiguration","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>"}}]