From patchwork Thu Jun 13 11:20:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1428 Return-Path: Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3149D61BE0 for ; Thu, 13 Jun 2019 13:19:44 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id B6889C0014; Thu, 13 Jun 2019 11:19:43 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Thu, 13 Jun 2019 13:20:44 +0200 Message-Id: <20190613112046.25260-5-jacopo@jmondi.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190613112046.25260-1-jacopo@jmondi.org> References: <20190613112046.25260-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 4/6] libcamera: camera_sensor: Add V4L2 control operations X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jun 2019 11:19:45 -0000 Add operations to get and set control and to retrieve the informations on a V4L2 control. For simple camera sensors, the operations are directly called on the underlying V4L2 subdevice. Signed-off-by: Jacopo Mondi --- src/libcamera/camera_sensor.cpp | 58 +++++++++++++++++++++++++++ src/libcamera/include/camera_sensor.h | 6 +++ 2 files changed, 64 insertions(+) diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp index cb6649efac3f..73e870b6cc98 100644 --- a/src/libcamera/camera_sensor.cpp +++ b/src/libcamera/camera_sensor.cpp @@ -249,6 +249,64 @@ int CameraSensor::setFormat(V4L2SubdeviceFormat *format) return subdev_->setFormat(0, format); } +/** + * \brief Retrieve the V4L2 control info from the sensor's subdevice + * \param id The V4L2 control id + * + * Retrieve the V4L2ControlInfo from the V4L2 subdevice backing the + * camera sensor. + * + * More complex camera sensors, which expose multiple subdevices should + * override this method. + * + * \sa V4L2Device::getControlInfo() + * + * \return The V4L2ControlInfo associated to the V4L2 control with \a id or + * nullptr if the control is not supported. + */ +V4L2ControlInfo *CameraSensor::getControlInfo(unsigned int id) +{ + return subdev_->getControlInfo(id); +} + +/** + * \brief Read a list of controls from the sensor's subdevice + * \param ctrls The list of controls to read + * + * Read V4L2 controls values on the V4L2 subdevice backing the + * camera sensor. + * + * More complex camera sensors, which expose multiple subdevices should + * override this method. + * + * \sa V4L2Device::getControls() + * + * \return 0 on success or a negative error code otherwise + */ +int CameraSensor::getControls(V4L2Controls *ctrls) +{ + return subdev_->getControls(ctrls); +} + +/** + * \brief Write a list of controls from the sensor's subdevice + * \param ctrls The list of controls to write + * + * Write V4L2 controls values on the V4L2 subdevice backing the + * camera sensor. + * + * More complex camera sensors, which expose multiple subdevices should + * override this method. + * + * \sa V4L2Device::setControls() + * + * \return 0 on success or a negative error code otherwise + */ +int CameraSensor::setControls(V4L2Controls *ctrls) +{ + return subdev_->setControls(ctrls); +} + std::string CameraSensor::logPrefix() const { return "'" + subdev_->entity()->name() + "'"; diff --git a/src/libcamera/include/camera_sensor.h b/src/libcamera/include/camera_sensor.h index b823480241a7..ed6bb16f5686 100644 --- a/src/libcamera/include/camera_sensor.h +++ b/src/libcamera/include/camera_sensor.h @@ -17,6 +17,8 @@ namespace libcamera { class MediaEntity; +class V4L2ControlInfo; +class V4L2Controls; class V4L2Subdevice; struct V4L2SubdeviceFormat; @@ -41,6 +43,10 @@ public: const Size &size) const; int setFormat(V4L2SubdeviceFormat *format); + V4L2ControlInfo *getControlInfo(unsigned int id); + int getControls(V4L2Controls *ctrls); + int setControls(V4L2Controls *ctrls); + protected: std::string logPrefix() const;