Re: [PATCH] media: staging: ipu3-imgu: add the AWB memory layout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Laurent,

On 04/10/2021 23:58, Laurent Pinchart wrote:
> Hi Jean-Michel,
> 
> Thank you for the patch.
> 
> On Thu, Sep 30, 2021 at 11:20:21AM +0200, Jean-Michel Hautbois wrote:
>> While parsing the RAW AWB metadata, the AWB layout was missing to fully
>> understand which byte corresponds to which feature. Make the field names
>> and usage explicit, as it is used by the userspace applications.
> 
> I would have mentioned how the hardware (or maybe firmware) generates
> the statistics instead of how applications consume them, as it's the
> IPU3 dictating the format, but it doesn't matter too much.
> 
>> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@xxxxxxxxxxxxxxxx>
>> ---
>>  .../media/ipu3/include/uapi/intel-ipu3.h      | 30 +++++++++++++++++--
>>  1 file changed, 27 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/staging/media/ipu3/include/uapi/intel-ipu3.h b/drivers/staging/media/ipu3/include/uapi/intel-ipu3.h
>> index 585f55981c86..fdda9d0a30af 100644
>> --- a/drivers/staging/media/ipu3/include/uapi/intel-ipu3.h
>> +++ b/drivers/staging/media/ipu3/include/uapi/intel-ipu3.h
>> @@ -61,6 +61,29 @@ struct ipu3_uapi_grid_config {
>>  	__u16 y_end;
>>  } __packed;
>>  
>> +/**
>> + * struct ipu3_uapi_awb_set_item - Memory layout for each cell in AWB
>> + *
>> + * @Gr_avg:	Green average for red lines in the cell.
>> + * @R_avg:	Red average in the cell.
>> + * @B_avg:	Blue average in the cell.
>> + * @Gb_avg:	Green average for blue lines in the cell.
>> + * @sat_ratio:  Saturation ratio in the cell.
> 
> Do we have more information about this field ? We can add it later if we
> don't.

Indeed, I have made tests on my side, and I am now even able to make
this field "visible" :-).
The sat_ratio is a 0-100% ratio coded as 0-255 values. It is controlled
by the rgbs_thr_* fields in the ipu3_uapi_awb_config_s structure.

> 
>> + * @padding0:   Unused byte for padding.
>> + * @padding1:   Unused byte for padding.
>> + * @padding2:   Unused byte for padding.
>> + */
>> +struct ipu3_uapi_awb_set_item {
>> +	__u8 Gr_avg;
>> +	__u8 R_avg;
>> +	__u8 B_avg;
>> +	__u8 Gb_avg;
>> +	__u8 sat_ratio;
>> +	__u8 padding0;
>> +	__u8 padding1;
>> +	__u8 padding2;
>> +} __attribute__((packed));
>> +
>>  /*
>>   * The grid based data is divided into "slices" called set, each slice of setX
>>   * refers to ipu3_uapi_grid_config width * height_per_slice.
>> @@ -73,8 +96,9 @@ struct ipu3_uapi_grid_config {
>>  	(IPU3_UAPI_MAX_BUBBLE_SIZE * IPU3_UAPI_MAX_STRIPES * \
>>  	 IPU3_UAPI_AWB_MD_ITEM_SIZE)
>>  #define IPU3_UAPI_AWB_MAX_BUFFER_SIZE \
>> -	(IPU3_UAPI_AWB_MAX_SETS * \
>> -	 (IPU3_UAPI_AWB_SET_SIZE + IPU3_UAPI_AWB_SPARE_FOR_BUBBLES))
>> +	((IPU3_UAPI_AWB_MAX_SETS * \
>> +	 (IPU3_UAPI_AWB_SET_SIZE + IPU3_UAPI_AWB_SPARE_FOR_BUBBLES)) / \
>> +	 sizeof(struct ipu3_uapi_awb_set_item))
> 
> We'll really have to figure out what the bubbles are... Not in this
> patch though.
> 
> Given that IPU3_UAPI_AWB_MD_ITEM_SIZE is equal to the size of one item,
> how about this ?
> 
> diff --git a/drivers/staging/media/ipu3/include/uapi/intel-ipu3.h b/drivers/staging/media/ipu3/include/uapi/intel-ipu3.h
> index ee0e6d0e4b2c..a18e9228ed07 100644
> --- a/include/linux/intel-ipu3.h
> +++ b/include/linux/intel-ipu3.h
> @@ -65,11 +65,9 @@ struct ipu3_uapi_grid_config {
>   */
>  #define IPU3_UAPI_AWB_MAX_SETS				60
>  /* Based on grid size 80 * 60 and cell size 16 x 16 */
> -#define IPU3_UAPI_AWB_SET_SIZE				1280
> -#define IPU3_UAPI_AWB_MD_ITEM_SIZE			8
> +#define IPU3_UAPI_AWB_SET_SIZE				160
>  #define IPU3_UAPI_AWB_SPARE_FOR_BUBBLES \
> -	(IPU3_UAPI_MAX_BUBBLE_SIZE * IPU3_UAPI_MAX_STRIPES * \
> -	 IPU3_UAPI_AWB_MD_ITEM_SIZE)
> +	(IPU3_UAPI_MAX_BUBBLE_SIZE * IPU3_UAPI_MAX_STRIPES)
>  #define IPU3_UAPI_AWB_MAX_BUFFER_SIZE \
>  	(IPU3_UAPI_AWB_MAX_SETS * \
>  	 (IPU3_UAPI_AWB_SET_SIZE + IPU3_UAPI_AWB_SPARE_FOR_BUBBLES))
> 

Yes, it is better :-), thanks :-).

>>  
>>  /**
>>   * struct ipu3_uapi_awb_raw_buffer - AWB raw buffer
>> @@ -83,7 +107,7 @@ struct ipu3_uapi_grid_config {
>>   *		the average values for each color channel.
>>   */
>>  struct ipu3_uapi_awb_raw_buffer {
>> -	__u8 meta_data[IPU3_UAPI_AWB_MAX_BUFFER_SIZE]
>> +	struct ipu3_uapi_awb_set_item meta_data[IPU3_UAPI_AWB_MAX_BUFFER_SIZE]
>>  		__attribute__((aligned(32)));
>>  } __packed;
>>  
> 



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux