Message ID | 20190620153144.5394-5-jacopo@jmondi.org |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Jacopo, Thank you for the patch. On Thu, Jun 20, 2019 at 05:31:42PM +0200, Jacopo Mondi wrote: > 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 <jacopo@jmondi.org> > --- > src/libcamera/camera_sensor.cpp | 65 +++++++++++++++++++++++++++ > src/libcamera/include/camera_sensor.h | 6 +++ > 2 files changed, 71 insertions(+) > > diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp > index a804a68c9d91..637f86b05701 100644 > --- a/src/libcamera/camera_sensor.cpp > +++ b/src/libcamera/camera_sensor.cpp > @@ -247,6 +247,71 @@ int CameraSensor::setFormat(V4L2SubdeviceFormat *format) > return subdev_->setFormat(0, format); > } > > +/** > + * \brief Retrieve information about a control > + * \param[in] id The control ID > + * \return A pointer to the V4L2ControlInfo for control \a id, or nullptr > + * if the sensor doesn't have such a control > + */ > +const V4L2ControlInfo *CameraSensor::getControlInfo(unsigned int id) const > +{ > + return subdev_->getControlInfo(id); > +} > + > +/** > + * \brief Read controls from the sensor > + * \param[inout] ctrls The list of controls to read > + * > + * Read the value of each control contained in \a ctrls, and store the > + * value in the corresponding \a ctrls entry. > + * > + * If an integer number less than the requested number of controls is returned, > + * only controls up to that index have been successfully read. > + * > + * Each V4L2Control instance in \a ctrls should be supported by the sensor and > + * accessible (ie the V4L2_CTRL_FLAG_DISABLED flag should not be set), otherwise > + * a negative error code (-EINVAL) is returned > + * > + * \sa V4L2Device::getControls() > + * > + * \return 0 on success or an error code otherwise > + * \retval -EINVAL One of the control is not supported or not accessible > + * \retval i The index of the control that failed > + */ Let's copy the documentation for getControls() and setControls() from patch 3/6 once we agree on it, and Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > +int CameraSensor::getControls(V4L2Controls *ctrls) > +{ > + return subdev_->getControls(ctrls); > +} > + > +/** > + * \brief Write controls to the sensor > + * \param[in] ctrls The list of controls to write > + * > + * Write the value of each V4L2Control contained in \a ctrls. Each > + * control should be initialized by the caller with a value, otherwise > + * the result of the operation is undefined. > + * > + * The value of each control is updated to reflect what has been > + * actually applied on the sensor. > + * > + * If an integer number less than the requested number of controls is returned, > + * only controls up to that index have been successfully applied. > + * > + * Each V4L2Control instance in \a ctrls should be supported by the sensor and > + * accessible (ie the V4L2_CTRL_FLAG_DISABLED flag should not be set), otherwise > + * a negative error code (-EINVAL) is returned > + * > + * \sa V4L2Device::setControls() > + * > + * \return 0 on success or an error code otherwise > + * \retval -EINVAL One of the control is not supported or not accessible > + * \retval i The index of the control that failed > + */ > +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..b4f4b66e96c4 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); > > + const V4L2ControlInfo *getControlInfo(unsigned int id) const; > + int getControls(V4L2Controls *ctrls); > + int setControls(V4L2Controls *ctrls); > + > protected: > std::string logPrefix() const; >
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp index a804a68c9d91..637f86b05701 100644 --- a/src/libcamera/camera_sensor.cpp +++ b/src/libcamera/camera_sensor.cpp @@ -247,6 +247,71 @@ int CameraSensor::setFormat(V4L2SubdeviceFormat *format) return subdev_->setFormat(0, format); } +/** + * \brief Retrieve information about a control + * \param[in] id The control ID + * \return A pointer to the V4L2ControlInfo for control \a id, or nullptr + * if the sensor doesn't have such a control + */ +const V4L2ControlInfo *CameraSensor::getControlInfo(unsigned int id) const +{ + return subdev_->getControlInfo(id); +} + +/** + * \brief Read controls from the sensor + * \param[inout] ctrls The list of controls to read + * + * Read the value of each control contained in \a ctrls, and store the + * value in the corresponding \a ctrls entry. + * + * If an integer number less than the requested number of controls is returned, + * only controls up to that index have been successfully read. + * + * Each V4L2Control instance in \a ctrls should be supported by the sensor and + * accessible (ie the V4L2_CTRL_FLAG_DISABLED flag should not be set), otherwise + * a negative error code (-EINVAL) is returned + * + * \sa V4L2Device::getControls() + * + * \return 0 on success or an error code otherwise + * \retval -EINVAL One of the control is not supported or not accessible + * \retval i The index of the control that failed + */ +int CameraSensor::getControls(V4L2Controls *ctrls) +{ + return subdev_->getControls(ctrls); +} + +/** + * \brief Write controls to the sensor + * \param[in] ctrls The list of controls to write + * + * Write the value of each V4L2Control contained in \a ctrls. Each + * control should be initialized by the caller with a value, otherwise + * the result of the operation is undefined. + * + * The value of each control is updated to reflect what has been + * actually applied on the sensor. + * + * If an integer number less than the requested number of controls is returned, + * only controls up to that index have been successfully applied. + * + * Each V4L2Control instance in \a ctrls should be supported by the sensor and + * accessible (ie the V4L2_CTRL_FLAG_DISABLED flag should not be set), otherwise + * a negative error code (-EINVAL) is returned + * + * \sa V4L2Device::setControls() + * + * \return 0 on success or an error code otherwise + * \retval -EINVAL One of the control is not supported or not accessible + * \retval i The index of the control that failed + */ +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..b4f4b66e96c4 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); + const V4L2ControlInfo *getControlInfo(unsigned int id) const; + int getControls(V4L2Controls *ctrls); + int setControls(V4L2Controls *ctrls); + protected: std::string logPrefix() const;
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 <jacopo@jmondi.org> --- src/libcamera/camera_sensor.cpp | 65 +++++++++++++++++++++++++++ src/libcamera/include/camera_sensor.h | 6 +++ 2 files changed, 71 insertions(+)