[libcamera-devel,v9,6/8] libcamera: Support passing ColorSpaces to V4L2 subdevices
diff mbox series

Message ID 20211206105032.13876-7-david.plowman@raspberrypi.com
State Superseded
Headers show
Series
  • Colour spaces
Related show

Commit Message

David Plowman Dec. 6, 2021, 10:50 a.m. UTC
The ColorSpace from the StreamConfiguration is now handled
appropriately in the V4L2Subdevice.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
---
 src/libcamera/v4l2_subdevice.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Laurent Pinchart Dec. 7, 2021, 1:29 p.m. UTC | #1
Hi David,

Thank you for the patch.

On Mon, Dec 06, 2021 at 10:50:29AM +0000, David Plowman wrote:
> The ColorSpace from the StreamConfiguration is now handled
> appropriately in the V4L2Subdevice.
> 
> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> ---
>  src/libcamera/v4l2_subdevice.cpp | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
> index 981645e0..f5ec6901 100644
> --- a/src/libcamera/v4l2_subdevice.cpp
> +++ b/src/libcamera/v4l2_subdevice.cpp
> @@ -411,6 +411,7 @@ int V4L2Subdevice::getFormat(unsigned int pad, V4L2SubdeviceFormat *format,
>  	format->size.width = subdevFmt.format.width;
>  	format->size.height = subdevFmt.format.height;
>  	format->mbus_code = subdevFmt.format.code;
> +	format->colorSpace = toColorSpace(subdevFmt.format);
>  
>  	return 0;
>  }
> @@ -439,7 +440,13 @@ int V4L2Subdevice::setFormat(unsigned int pad, V4L2SubdeviceFormat *format,
>  	subdevFmt.format.code = format->mbus_code;
>  	subdevFmt.format.field = V4L2_FIELD_NONE;
>  
> -	int ret = ioctl(VIDIOC_SUBDEV_S_FMT, &subdevFmt);
> +	int ret = fromColorSpace(format->colorSpace, subdevFmt.format);
> +	if (ret < 0)
> +		LOG(V4L2, Warning)
> +			<< "Setting color space unrecognised by V4L2: "
> +			<< ColorSpace::toString(format->colorSpace);

Same comment as in 5/8 regarding the message.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> +
> +	ret = ioctl(VIDIOC_SUBDEV_S_FMT, &subdevFmt);
>  	if (ret) {
>  		LOG(V4L2, Error)
>  			<< "Unable to set format on pad " << pad
> @@ -450,6 +457,7 @@ int V4L2Subdevice::setFormat(unsigned int pad, V4L2SubdeviceFormat *format,
>  	format->size.width = subdevFmt.format.width;
>  	format->size.height = subdevFmt.format.height;
>  	format->mbus_code = subdevFmt.format.code;
> +	format->colorSpace = toColorSpace(subdevFmt.format);
>  
>  	return 0;
>  }
Laurent Pinchart Dec. 7, 2021, 1:31 p.m. UTC | #2
On Tue, Dec 07, 2021 at 03:29:44PM +0200, Laurent Pinchart wrote:
> Hi David,
> 
> Thank you for the patch.

Also, the subject line should read

libcamera: v4l2_subdevice: Support passing ColorSpaces to V4L2 subdevices

or just

libcamera: v4l2_subdevice: Support passing ColorSpaces

(please update other patches in the series accordingly)

> On Mon, Dec 06, 2021 at 10:50:29AM +0000, David Plowman wrote:
> > The ColorSpace from the StreamConfiguration is now handled
> > appropriately in the V4L2Subdevice.
> > 
> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> > ---
> >  src/libcamera/v4l2_subdevice.cpp | 10 +++++++++-
> >  1 file changed, 9 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
> > index 981645e0..f5ec6901 100644
> > --- a/src/libcamera/v4l2_subdevice.cpp
> > +++ b/src/libcamera/v4l2_subdevice.cpp
> > @@ -411,6 +411,7 @@ int V4L2Subdevice::getFormat(unsigned int pad, V4L2SubdeviceFormat *format,
> >  	format->size.width = subdevFmt.format.width;
> >  	format->size.height = subdevFmt.format.height;
> >  	format->mbus_code = subdevFmt.format.code;
> > +	format->colorSpace = toColorSpace(subdevFmt.format);
> >  
> >  	return 0;
> >  }
> > @@ -439,7 +440,13 @@ int V4L2Subdevice::setFormat(unsigned int pad, V4L2SubdeviceFormat *format,
> >  	subdevFmt.format.code = format->mbus_code;
> >  	subdevFmt.format.field = V4L2_FIELD_NONE;
> >  
> > -	int ret = ioctl(VIDIOC_SUBDEV_S_FMT, &subdevFmt);
> > +	int ret = fromColorSpace(format->colorSpace, subdevFmt.format);
> > +	if (ret < 0)
> > +		LOG(V4L2, Warning)
> > +			<< "Setting color space unrecognised by V4L2: "
> > +			<< ColorSpace::toString(format->colorSpace);
> 
> Same comment as in 5/8 regarding the message.

I meant 4/8.

> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> 
> > +
> > +	ret = ioctl(VIDIOC_SUBDEV_S_FMT, &subdevFmt);
> >  	if (ret) {
> >  		LOG(V4L2, Error)
> >  			<< "Unable to set format on pad " << pad
> > @@ -450,6 +457,7 @@ int V4L2Subdevice::setFormat(unsigned int pad, V4L2SubdeviceFormat *format,
> >  	format->size.width = subdevFmt.format.width;
> >  	format->size.height = subdevFmt.format.height;
> >  	format->mbus_code = subdevFmt.format.code;
> > +	format->colorSpace = toColorSpace(subdevFmt.format);
> >  
> >  	return 0;
> >  }

Patch
diff mbox series

diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
index 981645e0..f5ec6901 100644
--- a/src/libcamera/v4l2_subdevice.cpp
+++ b/src/libcamera/v4l2_subdevice.cpp
@@ -411,6 +411,7 @@  int V4L2Subdevice::getFormat(unsigned int pad, V4L2SubdeviceFormat *format,
 	format->size.width = subdevFmt.format.width;
 	format->size.height = subdevFmt.format.height;
 	format->mbus_code = subdevFmt.format.code;
+	format->colorSpace = toColorSpace(subdevFmt.format);
 
 	return 0;
 }
@@ -439,7 +440,13 @@  int V4L2Subdevice::setFormat(unsigned int pad, V4L2SubdeviceFormat *format,
 	subdevFmt.format.code = format->mbus_code;
 	subdevFmt.format.field = V4L2_FIELD_NONE;
 
-	int ret = ioctl(VIDIOC_SUBDEV_S_FMT, &subdevFmt);
+	int ret = fromColorSpace(format->colorSpace, subdevFmt.format);
+	if (ret < 0)
+		LOG(V4L2, Warning)
+			<< "Setting color space unrecognised by V4L2: "
+			<< ColorSpace::toString(format->colorSpace);
+
+	ret = ioctl(VIDIOC_SUBDEV_S_FMT, &subdevFmt);
 	if (ret) {
 		LOG(V4L2, Error)
 			<< "Unable to set format on pad " << pad
@@ -450,6 +457,7 @@  int V4L2Subdevice::setFormat(unsigned int pad, V4L2SubdeviceFormat *format,
 	format->size.width = subdevFmt.format.width;
 	format->size.height = subdevFmt.format.height;
 	format->mbus_code = subdevFmt.format.code;
+	format->colorSpace = toColorSpace(subdevFmt.format);
 
 	return 0;
 }