{"id":2783,"url":"https://patchwork.libcamera.org/api/patches/2783/?format=json","web_url":"https://patchwork.libcamera.org/patch/2783/","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":"<20200206012601.153858-8-jacopo@jmondi.org>","date":"2020-02-06T01:25:59","name":"[libcamera-devel,v5,7/9] libcamera: pipeline_handler: Add Camera properties","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"55ec59c3e8f472560f84d02918fea178b06b141e","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/?format=json","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/2783/mbox/","series":[{"id":662,"url":"https://patchwork.libcamera.org/api/series/662/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=662","date":"2020-02-06T01:25:52","name":"Introduce camera properties","version":5,"mbox":"https://patchwork.libcamera.org/series/662/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/2783/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/2783/checks/","tags":{},"headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay10.mail.gandi.net (relay10.mail.gandi.net\n\t[217.70.178.230])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B93AB607E5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  6 Feb 2020 02:23:35 +0100 (CET)","from uno.lan (93-34-114-233.ip49.fastwebnet.it [93.34.114.233])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay10.mail.gandi.net (Postfix) with ESMTPSA id 8C847240002\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  6 Feb 2020 01:23:35 +0000 (UTC)"],"From":"Jacopo Mondi <jacopo@jmondi.org>","To":"libcamera-devel@lists.libcamera.org","Date":"Thu,  6 Feb 2020 02:25:59 +0100","Message-Id":"<20200206012601.153858-8-jacopo@jmondi.org>","X-Mailer":"git-send-email 2.24.1","In-Reply-To":"<20200206012601.153858-1-jacopo@jmondi.org>","References":"<20200206012601.153858-1-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v5 7/9] libcamera: pipeline_handler: Add\n\tCamera properties","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>","X-List-Received-Date":"Thu, 06 Feb 2020 01:23:37 -0000"},"content":"Associate to each Camera a ControlList which contains the Camera\nproperties as created by pipeline handlers in the pipeline handler's\nCameraData and provide an operation to retrieve them.\n\nCollect properties from the camera sensor in all pipeline handlers that\nsupport one (IPU3, RKISP1 and VIMC).\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/libcamera/include/pipeline_handler.h |  2 ++\n src/libcamera/pipeline/ipu3/ipu3.cpp     |  3 +++\n src/libcamera/pipeline/rkisp1/rkisp1.cpp |  3 +++\n src/libcamera/pipeline/vimc.cpp          |  4 ++++\n src/libcamera/pipeline_handler.cpp       | 19 +++++++++++++++++++\n 5 files changed, 31 insertions(+)","diff":"diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h\nindex 97157dd75c8a..923bd393d1a2 100644\n--- a/src/libcamera/include/pipeline_handler.h\n+++ b/src/libcamera/include/pipeline_handler.h\n@@ -44,6 +44,7 @@ public:\n \tPipelineHandler *pipe_;\n \tstd::list<Request *> queuedRequests_;\n \tControlInfoMap controlInfo_;\n+\tControlList properties_;\n \tstd::unique_ptr<IPAInterface> ipa_;\n \n private:\n@@ -65,6 +66,7 @@ public:\n \tvoid unlock();\n \n \tconst ControlInfoMap &controls(Camera *camera);\n+\tconst ControlList &properties(Camera *camera);\n \n \tvirtual CameraConfiguration *generateConfiguration(Camera *camera,\n \t\tconst StreamRoles &roles) = 0;\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 8e8e370922ad..387bb070b505 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -887,6 +887,9 @@ int PipelineHandlerIPU3::registerCameras()\n \t\tif (ret)\n \t\t\tcontinue;\n \n+\t\t/* Initialize the camera properties. */\n+\t\tdata->properties_ = cio2->sensor_->properties();\n+\n \t\t/**\n \t\t * \\todo Dynamically assign ImgU and output devices to each\n \t\t * stream and camera; as of now, limit support to two cameras\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 0b3dd9759387..68f16f03a81e 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -906,6 +906,9 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n \tif (ret)\n \t\treturn ret;\n \n+\t/* Initialize the camera properties. */\n+\tdata->properties_ = data->sensor_->properties();\n+\n \tret = data->loadIPA();\n \tif (ret)\n \t\treturn ret;\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex b1054d307ea2..5d3d12fef30b 100644\n--- a/src/libcamera/pipeline/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc.cpp\n@@ -452,6 +452,10 @@ int VimcCameraData::init(MediaDevice *media)\n \t}\n \n \tcontrolInfo_ = std::move(ctrls);\n+\n+\t/* Initialize the camera properties. */\n+\tproperties_ = sensor_->properties();\n+\n \treturn 0;\n }\n \ndiff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex 5476dbab74d5..e976393db3e0 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -98,6 +98,14 @@ LOG_DEFINE_CATEGORY(Pipeline)\n  * creating the camera, and shall not be modified afterwards.\n  */\n \n+/**\n+ * \\var CameraData::properties_\n+ * \\brief The list of properties supported by the camera\n+ *\n+ * The list of camera properties shall be initialised by the pipeline handler\n+ * when creating the camera, and shall not be modified afterwards.\n+ */\n+\n /**\n  * \\var CameraData::ipa_\n  * \\brief The IPA module used by the camera\n@@ -246,6 +254,17 @@ const ControlInfoMap &PipelineHandler::controls(Camera *camera)\n \treturn data->controlInfo_;\n }\n \n+/**\n+ * \\brief Retrieve the list of properties for a camera\n+ * \\param[in] camera The camera\n+ * \\return A ControlList of properties supported by \\a camera\n+ */\n+const ControlList &PipelineHandler::properties(Camera *camera)\n+{\n+\tCameraData *data = cameraData(camera);\n+\treturn data->properties_;\n+}\n+\n /**\n  * \\fn PipelineHandler::generateConfiguration()\n  * \\brief Generate a camera configuration for a specified camera\n","prefixes":["libcamera-devel","v5","7/9"]}