mirror of https://gitee.com/openkylin/linux.git
drm/komeda: Add drm_lut_to_fgamma_coeffs()
This function is used to convert drm color lut to komeda HW required curve coeffs values. Signed-off-by: james qian wang (Arm Technology China) <james.qian.wang@arm.com> Reviewed-by: Mihail Atanassov <mihail.atanassov@arm.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191112110927.20931-3-james.qian.wang@arm.com
This commit is contained in:
parent
7ca7fcef13
commit
c2b13c650f
|
@ -65,3 +65,55 @@ const s32 *komeda_select_yuv2rgb_coeffs(u32 color_encoding, u32 color_range)
|
|||
|
||||
return coeffs;
|
||||
}
|
||||
|
||||
struct gamma_curve_sector {
|
||||
u32 boundary_start;
|
||||
u32 num_of_segments;
|
||||
u32 segment_width;
|
||||
};
|
||||
|
||||
struct gamma_curve_segment {
|
||||
u32 start;
|
||||
u32 end;
|
||||
};
|
||||
|
||||
static struct gamma_curve_sector sector_tbl[] = {
|
||||
{ 0, 4, 4 },
|
||||
{ 16, 4, 4 },
|
||||
{ 32, 4, 8 },
|
||||
{ 64, 4, 16 },
|
||||
{ 128, 4, 32 },
|
||||
{ 256, 4, 64 },
|
||||
{ 512, 16, 32 },
|
||||
{ 1024, 24, 128 },
|
||||
};
|
||||
|
||||
static void
|
||||
drm_lut_to_coeffs(struct drm_property_blob *lut_blob, u32 *coeffs,
|
||||
struct gamma_curve_sector *sector_tbl, u32 num_sectors)
|
||||
{
|
||||
struct drm_color_lut *lut;
|
||||
u32 i, j, in, num = 0;
|
||||
|
||||
if (!lut_blob)
|
||||
return;
|
||||
|
||||
lut = lut_blob->data;
|
||||
|
||||
for (i = 0; i < num_sectors; i++) {
|
||||
for (j = 0; j < sector_tbl[i].num_of_segments; j++) {
|
||||
in = sector_tbl[i].boundary_start +
|
||||
j * sector_tbl[i].segment_width;
|
||||
|
||||
coeffs[num++] = drm_color_lut_extract(lut[in].red,
|
||||
KOMEDA_COLOR_PRECISION);
|
||||
}
|
||||
}
|
||||
|
||||
coeffs[num] = BIT(KOMEDA_COLOR_PRECISION);
|
||||
}
|
||||
|
||||
void drm_lut_to_fgamma_coeffs(struct drm_property_blob *lut_blob, u32 *coeffs)
|
||||
{
|
||||
drm_lut_to_coeffs(lut_blob, coeffs, sector_tbl, ARRAY_SIZE(sector_tbl));
|
||||
}
|
||||
|
|
|
@ -11,7 +11,14 @@
|
|||
#include <drm/drm_color_mgmt.h>
|
||||
|
||||
#define KOMEDA_N_YUV2RGB_COEFFS 12
|
||||
#define KOMEDA_N_RGB2YUV_COEFFS 12
|
||||
#define KOMEDA_COLOR_PRECISION 12
|
||||
#define KOMEDA_N_GAMMA_COEFFS 65
|
||||
#define KOMEDA_COLOR_LUT_SIZE BIT(KOMEDA_COLOR_PRECISION)
|
||||
#define KOMEDA_N_CTM_COEFFS 9
|
||||
|
||||
void drm_lut_to_fgamma_coeffs(struct drm_property_blob *lut_blob, u32 *coeffs);
|
||||
|
||||
const s32 *komeda_select_yuv2rgb_coeffs(u32 color_encoding, u32 color_range);
|
||||
|
||||
#endif
|
||||
#endif /*_KOMEDA_COLOR_MGMT_H_*/
|
||||
|
|
Loading…
Reference in New Issue