[libcamera-devel] [PATCH 8/9] libcamera: v4l2_controls: Remove V4L2ControlInfo type field

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Oct 9 11:41:36 CEST 2019


Hi Jacopo,

On Wed, Oct 09, 2019 at 11:23:50AM +0200, Jacopo Mondi wrote:
> On Tue, Oct 08, 2019 at 01:46:41AM +0300, Laurent Pinchart wrote:
> > The V4L2ControlInfo type field stores the V4L2 control type. It partly
> > duplicates the V4L2ControlInfo id().type() that stores the corresponding
> > libcamera control type. The two fields are not strictly identical, but
> > having two types doesn't provide us with any extra value. As this is
> > confusing, remove the V4L2ControlInfo type field.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/libcamera/include/v4l2_controls.h |  2 --
> >  src/libcamera/v4l2_controls.cpp       |  7 -------
> >  src/libcamera/v4l2_device.cpp         | 10 +++++-----
> >  3 files changed, 5 insertions(+), 14 deletions(-)
> >
> > diff --git a/src/libcamera/include/v4l2_controls.h b/src/libcamera/include/v4l2_controls.h
> > index 1d85ecf9864a..133ab9ec208b 100644
> > --- a/src/libcamera/include/v4l2_controls.h
> > +++ b/src/libcamera/include/v4l2_controls.h
> > @@ -31,14 +31,12 @@ public:
> >  	V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl);
> >
> >  	const ControlId &id() const { return id_; }
> > -	unsigned int type() const { return type_; }
> 
> Have you considered
> 	unsigned int type() const { return id_.type(); }
> ?

I think that would be the worst of both worlds :-) If the type can be
retrieved from id(), I don't think we should create an alias here. It
would be slightly shorter for callers, but quite confusing I think as a
type() method on a V4L2ControlInfo can be expected to return the V4L2
control type.

> Either ways:
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> 
> >  	size_t size() const { return size_; }
> >
> >  	const ControlRange &range() const { return range_; }
> >
> >  private:
> >  	V4L2ControlId id_;
> > -	unsigned int type_;
> >  	size_t size_;
> >
> >  	ControlRange range_;
> > diff --git a/src/libcamera/v4l2_controls.cpp b/src/libcamera/v4l2_controls.cpp
> > index 98b2b3fe9d0a..d3f94709e821 100644
> > --- a/src/libcamera/v4l2_controls.cpp
> > +++ b/src/libcamera/v4l2_controls.cpp
> > @@ -127,7 +127,6 @@ V4L2ControlId::V4L2ControlId(const struct v4l2_query_ext_ctrl &ctrl)
> >  V4L2ControlInfo::V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl)
> >  	: id_(ctrl)
> >  {
> > -	type_ = ctrl.type;
> >  	size_ = ctrl.elem_size * ctrl.elems;
> >
> >  	if (ctrl.type == V4L2_CTRL_TYPE_INTEGER64)
> > @@ -144,12 +143,6 @@ V4L2ControlInfo::V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl)
> >   * \return The V4L2 control ID
> >   */
> >
> > -/**
> > - * \fn V4L2ControlInfo::type()
> > - * \brief Retrieve the control type as defined by V4L2_CTRL_TYPE_*
> > - * \return The V4L2 control type
> > - */
> > -
> >  /**
> >   * \fn V4L2ControlInfo::size()
> >   * \brief Retrieve the control value data size (in bytes)
> > diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
> > index 50616571dcef..b64e5068a671 100644
> > --- a/src/libcamera/v4l2_device.cpp
> > +++ b/src/libcamera/v4l2_device.cpp
> > @@ -269,8 +269,8 @@ int V4L2Device::setControls(ControlList *ctrls)
> >
> >  		/* Set the v4l2_ext_control value for the write operation. */
> >  		const ControlValue &value = ctrl.second;
> > -		switch (info->type()) {
> > -		case V4L2_CTRL_TYPE_INTEGER64:
> > +		switch (info->id().type()) {
> > +		case ControlTypeInteger64:
> >  			v4l2Ctrls[i].value64 = value.get<int64_t>();
> >  			break;
> >  		default:
> > @@ -278,7 +278,7 @@ int V4L2Device::setControls(ControlList *ctrls)
> >  			 * \todo To be changed when support for string and
> >  			 * compound controls will be added.
> >  			 */
> > -			v4l2Ctrls[i].value64 = value.get<int32_t>();
> > +			v4l2Ctrls[i].value = value.get<int32_t>();
> >  			break;
> >  		}
> >
> > @@ -402,8 +402,8 @@ void V4L2Device::updateControls(ControlList *ctrls,
> >  		const V4L2ControlInfo *info = controlInfo[i];
> >  		ControlValue &value = ctrl.second;
> >
> > -		switch (info->type()) {
> > -		case V4L2_CTRL_TYPE_INTEGER64:
> > +		switch (info->id().type()) {
> > +		case ControlTypeInteger64:
> >  			value.set<int64_t>(v4l2Ctrl->value64);
> >  			break;
> >  		default:

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list