{"id":9265,"url":"https://patchwork.libcamera.org/api/patches/9265/?format=json","web_url":"https://patchwork.libcamera.org/patch/9265/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20200806163639.12971-3-david.plowman@raspberrypi.com>","date":"2020-08-06T16:36:36","name":"[libcamera-devel,v2,2/5] libcamera: Add user Transform to CameraConfiguration","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"9dfae7c71d6b16714622526e3684f5dc11e95813","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/?format=json","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/9265/mbox/","series":[{"id":1208,"url":"https://patchwork.libcamera.org/api/series/1208/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1208","date":"2020-08-06T16:36:34","name":"Transform implementation","version":2,"mbox":"https://patchwork.libcamera.org/series/1208/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/9265/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/9265/checks/","tags":{},"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 6519ABD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  6 Aug 2020 16:36:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EC81760DDE;\n\tThu,  6 Aug 2020 18:36:52 +0200 (CEST)","from mail-wr1-x436.google.com (mail-wr1-x436.google.com\n\t[IPv6:2a00:1450:4864:20::436])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 52D8560392\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  6 Aug 2020 18:36:51 +0200 (CEST)","by mail-wr1-x436.google.com with SMTP id a15so44614846wrh.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 06 Aug 2020 09:36:51 -0700 (PDT)","from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72])\n\tby smtp.gmail.com with ESMTPSA id\n\te5sm7405076wrc.37.2020.08.06.09.36.49\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 06 Aug 2020 09:36:49 -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=\"KUfxkrYw\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=7E2mCFX8dC5oKndfcsoqj9B2tHhHcXoPxYv7Kws94nY=;\n\tb=KUfxkrYwgE3xaqxVlBobpLnYMjmBkF7ELDHGLb9ceh8UVdqNvF/CvcZQeqqds3Uelr\n\tO4pLWJOeLAEzBlWDXJRelHRvX4R9Cl+yLUcNEsolzx/UX1F83gRnebEagn6msOKeFyQ9\n\thsFnFTS53khCweXscz+E2rHuE5TYXhY89I2cXsPdVOlrfCLi908mo7BoAKXPRhOZPb1s\n\t/vPDvOnyOhXQpchZko1sI7NJnKTnRtcH5QTnK+UPOGLXsfwlwRdW2yQMiC5gsDqrlzgu\n\tymGKbN+tnU0IKkvTLx0bT7feqZpw+XWB/Z1Skn/MkWw4dpFCol82akMC94W5Z2VChKOp\n\tJuEA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=7E2mCFX8dC5oKndfcsoqj9B2tHhHcXoPxYv7Kws94nY=;\n\tb=XIJtFUjqD0JadupSzy3YCeFENnhrTMdCHqo7g+7/dr332k2pU+9TxagenLJrF/g2VN\n\tGHrLt01pbagD7eIgkNg/QJWUyYE5VgW/s6uoqIToT1oUwIO2pBdPTCoXht9tGdOUv/Qf\n\tlZWKQBdjv2MLNnGsP5fXcMBJi34gKmfVGy4VmhwXjtCuVvFXpI632KO0l6golBPNQPgo\n\tmHvtFk27w1yXq3TdQdNkjpd2X+K01y6zXopCmm1h5+iAA6eLyEsFILiaEoosue9S7Lzh\n\tbvIrcNf9DoILL5hf3nvJ6a914ZEqmKRCFQMhtULjmCqAjMK5YY2Y2BoC5EYqTmEB08F7\n\tqxdg==","X-Gm-Message-State":"AOAM532uBx8sKe1oiw9sj3rXNfEKpIyljdlJFURIi7ChvQNWGimO7GgG\n\tom8wx+WvlC+mWsojT0ae4GGmjzvwE7S06Q==","X-Google-Smtp-Source":"ABdhPJx2CRkyfbp70mVrYd3lFBbblvfufNiJY1oXo2mfTqBvg/ODvua3jqL8ozcuKFW1bju7So9Tfw==","X-Received":"by 2002:a5d:67d2:: with SMTP id\n\tn18mr8006616wrw.214.1596731810466; \n\tThu, 06 Aug 2020 09:36:50 -0700 (PDT)","From":"David Plowman <david.plowman@raspberrypi.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Thu,  6 Aug 2020 17:36:36 +0100","Message-Id":"<20200806163639.12971-3-david.plowman@raspberrypi.com>","X-Mailer":"git-send-email 2.20.1","In-Reply-To":"<20200806163639.12971-1-david.plowman@raspberrypi.com>","References":"<20200806163639.12971-1-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v2 2/5] libcamera: Add user Transform to\n\tCameraConfiguration","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>","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>"},"content":"Add a field to the CameraConfiguration to represent a 2d transform\nrequested by the application. All pipeline handlers are amended to\ncoerce this to the Identity, marking the configuration as \"adjusted\"\nif something different had been requested.\n\nPipeline handlers that support Transforms can be amended subsequently.\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(-)","diff":"diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 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 \ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 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 \ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 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);\ndiff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\nindex 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;\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 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);\ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex 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);\ndiff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\nindex 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);\ndiff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\nindex 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","prefixes":["libcamera-devel","v2","2/5"]}