| Message ID | 20260623-libipa-algorithms-v2-7-f97433f12e4e@ideasonboard.com |
|---|---|
| State | Superseded |
| Headers | show |
| Series |
|
| Related | show |
Hi Jacopo On 23/06/2026 14:55, Jacopo Mondi wrote: > Update the Mali-C55 uAPI header to add support for CCM and the > RGB Gamma. > > Patches have been posted upstream but not yet merged > https://patchwork.linuxtv.org/project/linux-media/list/?series=26497 > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > --- Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> > include/linux/media/arm/mali-c55-config.h | 85 ++++++++++++++++++++++++++++++- > 1 file changed, 84 insertions(+), 1 deletion(-) > > diff --git a/include/linux/media/arm/mali-c55-config.h b/include/linux/media/arm/mali-c55-config.h > index 3d335f950eeb..06eb85a6d66a 100644 > --- a/include/linux/media/arm/mali-c55-config.h > +++ b/include/linux/media/arm/mali-c55-config.h > @@ -36,6 +36,9 @@ > */ > #define MALI_C55_MAX_ZONES (15 * 15) > > +/* Number of RGB gamma LUT entries. */ > +#define MALI_C55_NUM_GAMMA_LUT_ELEMENTS 129 > + > /** > * struct mali_c55_ae_1024bin_hist - Auto Exposure 1024-bin histogram statistics > * > @@ -219,6 +222,9 @@ struct mali_c55_stats_buffer { > * @MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP: Auto-white balance gains for AEXP-0 tap > * @MALI_C55_PARAM_MESH_SHADING_CONFIG : Mesh shading tables configuration > * @MALI_C55_PARAM_MESH_SHADING_SELECTION: Mesh shading table selection > + * @MALI_C55_PARAM_BLOCK_CCM: Colour correction matrix > + * @MALI_C55_PARAM_BLOCK_GAMMA_FR: Gamma gain and offset for FR pipe > + * @MALI_C55_PARAM_BLOCK_GAMMA_DS: Gamma gain and offset for DS pipe > */ > enum mali_c55_param_block_type { > MALI_C55_PARAM_BLOCK_SENSOR_OFFS, > @@ -232,6 +238,9 @@ enum mali_c55_param_block_type { > MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP, > MALI_C55_PARAM_MESH_SHADING_CONFIG, > MALI_C55_PARAM_MESH_SHADING_SELECTION, > + MALI_C55_PARAM_BLOCK_CCM, > + MALI_C55_PARAM_BLOCK_GAMMA_FR, > + MALI_C55_PARAM_BLOCK_GAMMA_DS, > }; > > /** > @@ -757,6 +766,77 @@ struct mali_c55_params_mesh_shading_selection { > __u16 mesh_strength; > }; > > +/** > + * struct mali_c55_params_ccm - Coefficients, offsets and gains for the colour > + * correction matrix > + * > + * The colour correction module converts images data from a sensor-specific > + * colour space to known one. > + * > + * Colour correction is applied after demosaicing and each pixel is represented > + * as a column vector of the three RGB colour channels on which the following > + * operations take place: > + * 1) An offset is subtracted from each colour channel > + * 2) Each colour channel is multiplied by a gain > + * 3) The pixel column vector is multiplied by the colour correction matrix > + * > + * This struct allows users to configure the coefficients for CCM and the > + * per-channel offsets and gains. The nine matrix coefficients are expressed as > + * signed Q4.8 Sign/Magnitude fixed-point numbers, the three gain multipliers > + * are expressed as unsigned Q4.8 fixed-point numbers and the three offsets are > + * expressed as a 12-bit unsigned integers. > + * > + * header.type should be set to MALI_C55_PARAM_BLOCK_CCM from > + * :c:type:`mali_c55_param_block_type`. > + * > + * @header: The Mali-C55 parameters block header > + * @coeffs: 3x3 color conversion matrix coefficients in sign/magnitude > + * Q4.8 format > + * @gains: Gains for red, green and blue channels in unsigned Q4.8 format > + * @offs: Offsets for red, green and blue channels > + */ > +struct mali_c55_params_ccm { > + struct v4l2_isp_params_block_header header; > + __u16 coeffs[3][3]; > + __u16 gains[3]; > + __u16 offs[3]; > +}; > + > +/** > + * struct mali_c55_params_gamma - RGB Gamma correction > + * > + * Gamma correction is used to program a standard gamma curve such as the sRGB > + * one. It provides gains and offsets to implement contrast adjustments. > + * > + * Gamma correction is applied on both the FR and DS pipes separately in the RGB > + * colour domain where the following operations take place: > + * 1) An offset is subtracted from each colour channel > + * 2) Each colour channel is multiplied by a gain > + * 3) The Gamma LUT is applied to each colour channel > + * > + * The Gamma LUT has 129 entries where each node is an unsigned 12 bit number. > + * It is expected that LUT[0]=0 and LUT[128]=0xffff, with the other 127 values > + * defining the Gamma correction curve. > + * > + * As one Gamma correction block is available on both the FR and DS pipes, the > + * header.type field should be set to one of either > + * MALI_C55_PARAM_BLOCK_GAMMA_FR or MALI_C55_PARAM_BLOCK_GAMMA_DS from > + * :c:type:`mali_c55_param_block_type`. > + * > + * @header: The Mali-C55 parameters block header > + * @gains: Gains for the red, green and blue channel in unsigned Q4.8 format > + * @offs: Offsets subtracted from the red, green and blue channels > + * in unsigned 12-bit format > + * @lut: 129-node Gamma LUT in u0.12 format > + */ > +struct mali_c55_params_gamma { > + struct v4l2_isp_params_block_header header; > + __u8 rgb_enable; > + __u16 gains[3]; > + __u16 offs[3]; > + __u32 lut[MALI_C55_NUM_GAMMA_LUT_ELEMENTS]; > +}; > + > /** > * define MALI_C55_PARAMS_MAX_SIZE - Maximum size of all Mali C55 Parameters > * > @@ -780,6 +860,9 @@ struct mali_c55_params_mesh_shading_selection { > sizeof(struct mali_c55_params_awb_config) + \ > sizeof(struct mali_c55_params_awb_gains) + \ > sizeof(struct mali_c55_params_mesh_shading_config) + \ > - sizeof(struct mali_c55_params_mesh_shading_selection)) > + sizeof(struct mali_c55_params_mesh_shading_selection) + \ > + sizeof(struct mali_c55_params_ccm) + \ > + sizeof(struct mali_c55_params_gamma) + \ > + sizeof(struct mali_c55_params_gamma)) > > #endif /* __UAPI_MALI_C55_CONFIG_H */ >
Quoting Jacopo Mondi (2026-06-23 14:55:02) > Update the Mali-C55 uAPI header to add support for CCM and the > RGB Gamma. > > Patches have been posted upstream but not yet merged > https://patchwork.linuxtv.org/project/linux-media/list/?series=26497 > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > --- > include/linux/media/arm/mali-c55-config.h | 85 ++++++++++++++++++++++++++++++- > 1 file changed, 84 insertions(+), 1 deletion(-) > > diff --git a/include/linux/media/arm/mali-c55-config.h b/include/linux/media/arm/mali-c55-config.h > index 3d335f950eeb..06eb85a6d66a 100644 > --- a/include/linux/media/arm/mali-c55-config.h > +++ b/include/linux/media/arm/mali-c55-config.h > @@ -36,6 +36,9 @@ > */ > #define MALI_C55_MAX_ZONES (15 * 15) > > +/* Number of RGB gamma LUT entries. */ > +#define MALI_C55_NUM_GAMMA_LUT_ELEMENTS 129 > + > /** > * struct mali_c55_ae_1024bin_hist - Auto Exposure 1024-bin histogram statistics > * > @@ -219,6 +222,9 @@ struct mali_c55_stats_buffer { > * @MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP: Auto-white balance gains for AEXP-0 tap > * @MALI_C55_PARAM_MESH_SHADING_CONFIG : Mesh shading tables configuration > * @MALI_C55_PARAM_MESH_SHADING_SELECTION: Mesh shading table selection > + * @MALI_C55_PARAM_BLOCK_CCM: Colour correction matrix > + * @MALI_C55_PARAM_BLOCK_GAMMA_FR: Gamma gain and offset for FR pipe > + * @MALI_C55_PARAM_BLOCK_GAMMA_DS: Gamma gain and offset for DS pipe > */ > enum mali_c55_param_block_type { > MALI_C55_PARAM_BLOCK_SENSOR_OFFS, > @@ -232,6 +238,9 @@ enum mali_c55_param_block_type { > MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP, > MALI_C55_PARAM_MESH_SHADING_CONFIG, > MALI_C55_PARAM_MESH_SHADING_SELECTION, > + MALI_C55_PARAM_BLOCK_CCM, > + MALI_C55_PARAM_BLOCK_GAMMA_FR, > + MALI_C55_PARAM_BLOCK_GAMMA_DS, > }; > > /** > @@ -757,6 +766,77 @@ struct mali_c55_params_mesh_shading_selection { > __u16 mesh_strength; > }; > > +/** > + * struct mali_c55_params_ccm - Coefficients, offsets and gains for the colour > + * correction matrix > + * > + * The colour correction module converts images data from a sensor-specific > + * colour space to known one. > + * > + * Colour correction is applied after demosaicing and each pixel is represented > + * as a column vector of the three RGB colour channels on which the following > + * operations take place: > + * 1) An offset is subtracted from each colour channel > + * 2) Each colour channel is multiplied by a gain > + * 3) The pixel column vector is multiplied by the colour correction matrix > + * > + * This struct allows users to configure the coefficients for CCM and the > + * per-channel offsets and gains. The nine matrix coefficients are expressed as > + * signed Q4.8 Sign/Magnitude fixed-point numbers, the three gain multipliers > + * are expressed as unsigned Q4.8 fixed-point numbers and the three offsets are > + * expressed as a 12-bit unsigned integers. > + * > + * header.type should be set to MALI_C55_PARAM_BLOCK_CCM from > + * :c:type:`mali_c55_param_block_type`. > + * > + * @header: The Mali-C55 parameters block header > + * @coeffs: 3x3 color conversion matrix coefficients in sign/magnitude > + * Q4.8 format > + * @gains: Gains for red, green and blue channels in unsigned Q4.8 format > + * @offs: Offsets for red, green and blue channels > + */ > +struct mali_c55_params_ccm { > + struct v4l2_isp_params_block_header header; > + __u16 coeffs[3][3]; > + __u16 gains[3]; > + __u16 offs[3]; > +}; > + > +/** > + * struct mali_c55_params_gamma - RGB Gamma correction > + * > + * Gamma correction is used to program a standard gamma curve such as the sRGB > + * one. It provides gains and offsets to implement contrast adjustments. > + * > + * Gamma correction is applied on both the FR and DS pipes separately in the RGB > + * colour domain where the following operations take place: > + * 1) An offset is subtracted from each colour channel > + * 2) Each colour channel is multiplied by a gain > + * 3) The Gamma LUT is applied to each colour channel > + * > + * The Gamma LUT has 129 entries where each node is an unsigned 12 bit number. > + * It is expected that LUT[0]=0 and LUT[128]=0xffff, with the other 127 values > + * defining the Gamma correction curve. > + * > + * As one Gamma correction block is available on both the FR and DS pipes, the > + * header.type field should be set to one of either > + * MALI_C55_PARAM_BLOCK_GAMMA_FR or MALI_C55_PARAM_BLOCK_GAMMA_DS from > + * :c:type:`mali_c55_param_block_type`. > + * > + * @header: The Mali-C55 parameters block header > + * @gains: Gains for the red, green and blue channel in unsigned Q4.8 format > + * @offs: Offsets subtracted from the red, green and blue channels > + * in unsigned 12-bit format > + * @lut: 129-node Gamma LUT in u0.12 format > + */ > +struct mali_c55_params_gamma { > + struct v4l2_isp_params_block_header header; > + __u8 rgb_enable; > + __u16 gains[3]; > + __u16 offs[3]; > + __u32 lut[MALI_C55_NUM_GAMMA_LUT_ELEMENTS]; > +}; > + > /** > * define MALI_C55_PARAMS_MAX_SIZE - Maximum size of all Mali C55 Parameters > * > @@ -780,6 +860,9 @@ struct mali_c55_params_mesh_shading_selection { > sizeof(struct mali_c55_params_awb_config) + \ > sizeof(struct mali_c55_params_awb_gains) + \ > sizeof(struct mali_c55_params_mesh_shading_config) + \ > - sizeof(struct mali_c55_params_mesh_shading_selection)) > + sizeof(struct mali_c55_params_mesh_shading_selection) + \ > + sizeof(struct mali_c55_params_ccm) + \ > + sizeof(struct mali_c55_params_gamma) + \ > + sizeof(struct mali_c55_params_gamma)) > > #endif /* __UAPI_MALI_C55_CONFIG_H */ > > -- > 2.54.0 >
diff --git a/include/linux/media/arm/mali-c55-config.h b/include/linux/media/arm/mali-c55-config.h index 3d335f950eeb..06eb85a6d66a 100644 --- a/include/linux/media/arm/mali-c55-config.h +++ b/include/linux/media/arm/mali-c55-config.h @@ -36,6 +36,9 @@ */ #define MALI_C55_MAX_ZONES (15 * 15) +/* Number of RGB gamma LUT entries. */ +#define MALI_C55_NUM_GAMMA_LUT_ELEMENTS 129 + /** * struct mali_c55_ae_1024bin_hist - Auto Exposure 1024-bin histogram statistics * @@ -219,6 +222,9 @@ struct mali_c55_stats_buffer { * @MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP: Auto-white balance gains for AEXP-0 tap * @MALI_C55_PARAM_MESH_SHADING_CONFIG : Mesh shading tables configuration * @MALI_C55_PARAM_MESH_SHADING_SELECTION: Mesh shading table selection + * @MALI_C55_PARAM_BLOCK_CCM: Colour correction matrix + * @MALI_C55_PARAM_BLOCK_GAMMA_FR: Gamma gain and offset for FR pipe + * @MALI_C55_PARAM_BLOCK_GAMMA_DS: Gamma gain and offset for DS pipe */ enum mali_c55_param_block_type { MALI_C55_PARAM_BLOCK_SENSOR_OFFS, @@ -232,6 +238,9 @@ enum mali_c55_param_block_type { MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP, MALI_C55_PARAM_MESH_SHADING_CONFIG, MALI_C55_PARAM_MESH_SHADING_SELECTION, + MALI_C55_PARAM_BLOCK_CCM, + MALI_C55_PARAM_BLOCK_GAMMA_FR, + MALI_C55_PARAM_BLOCK_GAMMA_DS, }; /** @@ -757,6 +766,77 @@ struct mali_c55_params_mesh_shading_selection { __u16 mesh_strength; }; +/** + * struct mali_c55_params_ccm - Coefficients, offsets and gains for the colour + * correction matrix + * + * The colour correction module converts images data from a sensor-specific + * colour space to known one. + * + * Colour correction is applied after demosaicing and each pixel is represented + * as a column vector of the three RGB colour channels on which the following + * operations take place: + * 1) An offset is subtracted from each colour channel + * 2) Each colour channel is multiplied by a gain + * 3) The pixel column vector is multiplied by the colour correction matrix + * + * This struct allows users to configure the coefficients for CCM and the + * per-channel offsets and gains. The nine matrix coefficients are expressed as + * signed Q4.8 Sign/Magnitude fixed-point numbers, the three gain multipliers + * are expressed as unsigned Q4.8 fixed-point numbers and the three offsets are + * expressed as a 12-bit unsigned integers. + * + * header.type should be set to MALI_C55_PARAM_BLOCK_CCM from + * :c:type:`mali_c55_param_block_type`. + * + * @header: The Mali-C55 parameters block header + * @coeffs: 3x3 color conversion matrix coefficients in sign/magnitude + * Q4.8 format + * @gains: Gains for red, green and blue channels in unsigned Q4.8 format + * @offs: Offsets for red, green and blue channels + */ +struct mali_c55_params_ccm { + struct v4l2_isp_params_block_header header; + __u16 coeffs[3][3]; + __u16 gains[3]; + __u16 offs[3]; +}; + +/** + * struct mali_c55_params_gamma - RGB Gamma correction + * + * Gamma correction is used to program a standard gamma curve such as the sRGB + * one. It provides gains and offsets to implement contrast adjustments. + * + * Gamma correction is applied on both the FR and DS pipes separately in the RGB + * colour domain where the following operations take place: + * 1) An offset is subtracted from each colour channel + * 2) Each colour channel is multiplied by a gain + * 3) The Gamma LUT is applied to each colour channel + * + * The Gamma LUT has 129 entries where each node is an unsigned 12 bit number. + * It is expected that LUT[0]=0 and LUT[128]=0xffff, with the other 127 values + * defining the Gamma correction curve. + * + * As one Gamma correction block is available on both the FR and DS pipes, the + * header.type field should be set to one of either + * MALI_C55_PARAM_BLOCK_GAMMA_FR or MALI_C55_PARAM_BLOCK_GAMMA_DS from + * :c:type:`mali_c55_param_block_type`. + * + * @header: The Mali-C55 parameters block header + * @gains: Gains for the red, green and blue channel in unsigned Q4.8 format + * @offs: Offsets subtracted from the red, green and blue channels + * in unsigned 12-bit format + * @lut: 129-node Gamma LUT in u0.12 format + */ +struct mali_c55_params_gamma { + struct v4l2_isp_params_block_header header; + __u8 rgb_enable; + __u16 gains[3]; + __u16 offs[3]; + __u32 lut[MALI_C55_NUM_GAMMA_LUT_ELEMENTS]; +}; + /** * define MALI_C55_PARAMS_MAX_SIZE - Maximum size of all Mali C55 Parameters * @@ -780,6 +860,9 @@ struct mali_c55_params_mesh_shading_selection { sizeof(struct mali_c55_params_awb_config) + \ sizeof(struct mali_c55_params_awb_gains) + \ sizeof(struct mali_c55_params_mesh_shading_config) + \ - sizeof(struct mali_c55_params_mesh_shading_selection)) + sizeof(struct mali_c55_params_mesh_shading_selection) + \ + sizeof(struct mali_c55_params_ccm) + \ + sizeof(struct mali_c55_params_gamma) + \ + sizeof(struct mali_c55_params_gamma)) #endif /* __UAPI_MALI_C55_CONFIG_H */
Update the Mali-C55 uAPI header to add support for CCM and the RGB Gamma. Patches have been posted upstream but not yet merged https://patchwork.linuxtv.org/project/linux-media/list/?series=26497 Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> --- include/linux/media/arm/mali-c55-config.h | 85 ++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-)