diff mbox series

media: imx: utils: Default colorspace to SRGB

Message ID 20200325173456.21455-1-slongerbeam@gmail.com (mailing list archive)
State New, archived
Headers show
Series media: imx: utils: Default colorspace to SRGB | expand

Commit Message

Steve Longerbeam March 25, 2020, 5:34 p.m. UTC
The function init_mbus_colorimetry() is used to initialize the imx
subdevice mbus colorimetry to some sane defaults when the subdevice is
registered. Currently it guesses at a colorspace based on the passed
mbus pixel format. If the format is RGB, it chooses colorspace
V4L2_COLORSPACE_SRGB, and if the format is YUV, it chooses
V4L2_COLORSPACE_SMPTE170M.

While that might be a good guess, it's not necessarily true that a RGB
pixel format encoding uses a SRGB colorspace, or that a YUV encoding
uses a SMPTE170M colorspace. Instead of making this dubious guess,
just default the colorspace to SRGB.

Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
---
 drivers/staging/media/imx/imx-media-utils.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Hans Verkuil April 16, 2020, 10:52 a.m. UTC | #1
Hi Steve,

On 25/03/2020 18:34, Steve Longerbeam wrote:
> The function init_mbus_colorimetry() is used to initialize the imx
> subdevice mbus colorimetry to some sane defaults when the subdevice is
> registered. Currently it guesses at a colorspace based on the passed
> mbus pixel format. If the format is RGB, it chooses colorspace
> V4L2_COLORSPACE_SRGB, and if the format is YUV, it chooses
> V4L2_COLORSPACE_SMPTE170M.
> 
> While that might be a good guess, it's not necessarily true that a RGB
> pixel format encoding uses a SRGB colorspace, or that a YUV encoding
> uses a SMPTE170M colorspace. Instead of making this dubious guess,
> just default the colorspace to SRGB.
> 
> Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
> Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
> ---
>  drivers/staging/media/imx/imx-media-utils.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
> index fae981698c49..8344675bfd05 100644
> --- a/drivers/staging/media/imx/imx-media-utils.c
> +++ b/drivers/staging/media/imx/imx-media-utils.c
> @@ -236,8 +236,7 @@ static const struct imx_media_pixfmt ipu_rgb_formats[] = {
>  static void init_mbus_colorimetry(struct v4l2_mbus_framefmt *mbus,
>  				  const struct imx_media_pixfmt *fmt)
>  {
> -	mbus->colorspace = (fmt->cs == IPUV3_COLORSPACE_RGB) ?
> -		V4L2_COLORSPACE_SRGB : V4L2_COLORSPACE_SMPTE170M;
> +	mbus->colorspace = V4L2_COLORSPACE_SRGB;
>  	mbus->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(mbus->colorspace);
>  	mbus->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(mbus->colorspace);
>  	mbus->quantization =

The quantization is probably wrong as well since it checks fmt->cs.
The first argument should just be 'true'.

> 

In any case, this patch no longer applies after the imx utils patch series.

Regards,

	Hans
Steve Longerbeam April 16, 2020, 5:10 p.m. UTC | #2
Hi Hans,

On 4/16/20 3:52 AM, Hans Verkuil wrote:
> Hi Steve,
>
> On 25/03/2020 18:34, Steve Longerbeam wrote:
>> The function init_mbus_colorimetry() is used to initialize the imx
>> subdevice mbus colorimetry to some sane defaults when the subdevice is
>> registered. Currently it guesses at a colorspace based on the passed
>> mbus pixel format. If the format is RGB, it chooses colorspace
>> V4L2_COLORSPACE_SRGB, and if the format is YUV, it chooses
>> V4L2_COLORSPACE_SMPTE170M.
>>
>> While that might be a good guess, it's not necessarily true that a RGB
>> pixel format encoding uses a SRGB colorspace, or that a YUV encoding
>> uses a SMPTE170M colorspace. Instead of making this dubious guess,
>> just default the colorspace to SRGB.
>>
>> Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
>> Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
>> ---
>>   drivers/staging/media/imx/imx-media-utils.c | 3 +--
>>   1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
>> index fae981698c49..8344675bfd05 100644
>> --- a/drivers/staging/media/imx/imx-media-utils.c
>> +++ b/drivers/staging/media/imx/imx-media-utils.c
>> @@ -236,8 +236,7 @@ static const struct imx_media_pixfmt ipu_rgb_formats[] = {
>>   static void init_mbus_colorimetry(struct v4l2_mbus_framefmt *mbus,
>>   				  const struct imx_media_pixfmt *fmt)
>>   {
>> -	mbus->colorspace = (fmt->cs == IPUV3_COLORSPACE_RGB) ?
>> -		V4L2_COLORSPACE_SRGB : V4L2_COLORSPACE_SMPTE170M;
>> +	mbus->colorspace = V4L2_COLORSPACE_SRGB;
>>   	mbus->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(mbus->colorspace);
>>   	mbus->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(mbus->colorspace);
>>   	mbus->quantization =
> The quantization is probably wrong as well since it checks fmt->cs.
> The first argument should just be 'true'.

I don't think so. The default quantization depends in part on whether 
the pixel format is RGB or YUV, which is the reason for passing boolean 
(fmt->cs == IPUV3_COLORSPACE_RGB) as the first argument.

I realize "fmt->cs" is a misnomer, but it is borrowing from earlier 
misnomers, i.e. the 'enum ipu_color_space' enumerations. Fixing those 
names would touch lots of imx driver code.


>
> In any case, this patch no longer applies after the imx utils patch series.

Ok, I'll re-submit after the utils patch series is merged.

Steve
Hans Verkuil April 17, 2020, 7:13 a.m. UTC | #3
On 16/04/2020 19:10, Steve Longerbeam wrote:
> Hi Hans,
> 
> On 4/16/20 3:52 AM, Hans Verkuil wrote:
>> Hi Steve,
>>
>> On 25/03/2020 18:34, Steve Longerbeam wrote:
>>> The function init_mbus_colorimetry() is used to initialize the imx
>>> subdevice mbus colorimetry to some sane defaults when the subdevice is
>>> registered. Currently it guesses at a colorspace based on the passed
>>> mbus pixel format. If the format is RGB, it chooses colorspace
>>> V4L2_COLORSPACE_SRGB, and if the format is YUV, it chooses
>>> V4L2_COLORSPACE_SMPTE170M.
>>>
>>> While that might be a good guess, it's not necessarily true that a RGB
>>> pixel format encoding uses a SRGB colorspace, or that a YUV encoding
>>> uses a SMPTE170M colorspace. Instead of making this dubious guess,
>>> just default the colorspace to SRGB.
>>>
>>> Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
>>> Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
>>> ---
>>>   drivers/staging/media/imx/imx-media-utils.c | 3 +--
>>>   1 file changed, 1 insertion(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
>>> index fae981698c49..8344675bfd05 100644
>>> --- a/drivers/staging/media/imx/imx-media-utils.c
>>> +++ b/drivers/staging/media/imx/imx-media-utils.c
>>> @@ -236,8 +236,7 @@ static const struct imx_media_pixfmt ipu_rgb_formats[] = {
>>>   static void init_mbus_colorimetry(struct v4l2_mbus_framefmt *mbus,
>>>   				  const struct imx_media_pixfmt *fmt)
>>>   {
>>> -	mbus->colorspace = (fmt->cs == IPUV3_COLORSPACE_RGB) ?
>>> -		V4L2_COLORSPACE_SRGB : V4L2_COLORSPACE_SMPTE170M;
>>> +	mbus->colorspace = V4L2_COLORSPACE_SRGB;
>>>   	mbus->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(mbus->colorspace);
>>>   	mbus->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(mbus->colorspace);
>>>   	mbus->quantization =
>> The quantization is probably wrong as well since it checks fmt->cs.
>> The first argument should just be 'true'.
> 
> I don't think so. The default quantization depends in part on whether 
> the pixel format is RGB or YUV, which is the reason for passing boolean 
> (fmt->cs == IPUV3_COLORSPACE_RGB) as the first argument.

Ah yes, that's true. Sorry for the noise.

Regards,

	Hans

> 
> I realize "fmt->cs" is a misnomer, but it is borrowing from earlier 
> misnomers, i.e. the 'enum ipu_color_space' enumerations. Fixing those 
> names would touch lots of imx driver code.
> 
> 
>>
>> In any case, this patch no longer applies after the imx utils patch series.
> 
> Ok, I'll re-submit after the utils patch series is merged.
> 
> Steve
>
diff mbox series

Patch

diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
index fae981698c49..8344675bfd05 100644
--- a/drivers/staging/media/imx/imx-media-utils.c
+++ b/drivers/staging/media/imx/imx-media-utils.c
@@ -236,8 +236,7 @@  static const struct imx_media_pixfmt ipu_rgb_formats[] = {
 static void init_mbus_colorimetry(struct v4l2_mbus_framefmt *mbus,
 				  const struct imx_media_pixfmt *fmt)
 {
-	mbus->colorspace = (fmt->cs == IPUV3_COLORSPACE_RGB) ?
-		V4L2_COLORSPACE_SRGB : V4L2_COLORSPACE_SMPTE170M;
+	mbus->colorspace = V4L2_COLORSPACE_SRGB;
 	mbus->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(mbus->colorspace);
 	mbus->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(mbus->colorspace);
 	mbus->quantization =