mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
drm/amd/display: color space ycbcr709 support
Signed-off-by: Charlene Liu <charlene.liu@amd.com> Reviewed-by: Duke Du <Duke.Du@amd.com> Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
2f482c4f90
commit
40df2f809e
@ -45,8 +45,10 @@ enum dc_color_space_type {
|
|||||||
COLOR_SPACE_RGB_LIMITED_TYPE,
|
COLOR_SPACE_RGB_LIMITED_TYPE,
|
||||||
COLOR_SPACE_YCBCR601_TYPE,
|
COLOR_SPACE_YCBCR601_TYPE,
|
||||||
COLOR_SPACE_YCBCR709_TYPE,
|
COLOR_SPACE_YCBCR709_TYPE,
|
||||||
|
COLOR_SPACE_YCBCR2020_TYPE,
|
||||||
COLOR_SPACE_YCBCR601_LIMITED_TYPE,
|
COLOR_SPACE_YCBCR601_LIMITED_TYPE,
|
||||||
COLOR_SPACE_YCBCR709_LIMITED_TYPE
|
COLOR_SPACE_YCBCR709_LIMITED_TYPE,
|
||||||
|
COLOR_SPACE_YCBCR709_BLACK_TYPE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct tg_color black_color_format[] = {
|
static const struct tg_color black_color_format[] = {
|
||||||
@ -80,7 +82,6 @@ static const struct out_csc_color_matrix_type output_csc_matrix[] = {
|
|||||||
{ COLOR_SPACE_YCBCR709_TYPE,
|
{ COLOR_SPACE_YCBCR709_TYPE,
|
||||||
{ 0xE04, 0xF345, 0xFEB7, 0x1004, 0x5D3, 0x1399, 0x1FA,
|
{ 0xE04, 0xF345, 0xFEB7, 0x1004, 0x5D3, 0x1399, 0x1FA,
|
||||||
0x201, 0xFCCA, 0xF533, 0xE04, 0x1004} },
|
0x201, 0xFCCA, 0xF533, 0xE04, 0x1004} },
|
||||||
|
|
||||||
/* TODO: correct values below */
|
/* TODO: correct values below */
|
||||||
{ COLOR_SPACE_YCBCR601_LIMITED_TYPE,
|
{ COLOR_SPACE_YCBCR601_LIMITED_TYPE,
|
||||||
{ 0xE00, 0xF447, 0xFDB9, 0x1000, 0x991,
|
{ 0xE00, 0xF447, 0xFDB9, 0x1000, 0x991,
|
||||||
@ -88,6 +89,12 @@ static const struct out_csc_color_matrix_type output_csc_matrix[] = {
|
|||||||
{ COLOR_SPACE_YCBCR709_LIMITED_TYPE,
|
{ COLOR_SPACE_YCBCR709_LIMITED_TYPE,
|
||||||
{ 0xE00, 0xF349, 0xFEB7, 0x1000, 0x6CE, 0x16E3,
|
{ 0xE00, 0xF349, 0xFEB7, 0x1000, 0x6CE, 0x16E3,
|
||||||
0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} },
|
0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} },
|
||||||
|
{ COLOR_SPACE_YCBCR2020_TYPE,
|
||||||
|
{ 0x1000, 0xF149, 0xFEB7, 0x0000, 0x0868, 0x15B2,
|
||||||
|
0x01E6, 0x0000, 0xFB88, 0xF478, 0x1000, 0x0000} },
|
||||||
|
{ COLOR_SPACE_YCBCR709_BLACK_TYPE,
|
||||||
|
{ 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x0200, 0x0000, 0x0000, 0x0000, 0x1000} },
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool is_rgb_type(
|
static bool is_rgb_type(
|
||||||
@ -149,6 +156,16 @@ static bool is_ycbcr709_type(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_ycbcr2020_type(
|
||||||
|
enum dc_color_space color_space)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
if (color_space == COLOR_SPACE_2020_YCBCR)
|
||||||
|
ret = true;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static bool is_ycbcr709_limited_type(
|
static bool is_ycbcr709_limited_type(
|
||||||
enum dc_color_space color_space)
|
enum dc_color_space color_space)
|
||||||
{
|
{
|
||||||
@ -174,7 +191,12 @@ enum dc_color_space_type get_color_space_type(enum dc_color_space color_space)
|
|||||||
type = COLOR_SPACE_YCBCR601_LIMITED_TYPE;
|
type = COLOR_SPACE_YCBCR601_LIMITED_TYPE;
|
||||||
else if (is_ycbcr709_limited_type(color_space))
|
else if (is_ycbcr709_limited_type(color_space))
|
||||||
type = COLOR_SPACE_YCBCR709_LIMITED_TYPE;
|
type = COLOR_SPACE_YCBCR709_LIMITED_TYPE;
|
||||||
|
else if (is_ycbcr2020_type(color_space))
|
||||||
|
type = COLOR_SPACE_YCBCR2020_TYPE;
|
||||||
|
else if (color_space == COLOR_SPACE_YCBCR709)
|
||||||
|
type = COLOR_SPACE_YCBCR709_BLACK_TYPE;
|
||||||
|
else if (color_space == COLOR_SPACE_YCBCR709_BLACK)
|
||||||
|
type = COLOR_SPACE_YCBCR709_BLACK_TYPE;
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,6 +228,7 @@ void color_space_to_black_color(
|
|||||||
switch (colorspace) {
|
switch (colorspace) {
|
||||||
case COLOR_SPACE_YCBCR601:
|
case COLOR_SPACE_YCBCR601:
|
||||||
case COLOR_SPACE_YCBCR709:
|
case COLOR_SPACE_YCBCR709:
|
||||||
|
case COLOR_SPACE_YCBCR709_BLACK:
|
||||||
case COLOR_SPACE_YCBCR601_LIMITED:
|
case COLOR_SPACE_YCBCR601_LIMITED:
|
||||||
case COLOR_SPACE_YCBCR709_LIMITED:
|
case COLOR_SPACE_YCBCR709_LIMITED:
|
||||||
case COLOR_SPACE_2020_YCBCR:
|
case COLOR_SPACE_2020_YCBCR:
|
||||||
|
|||||||
@ -534,6 +534,7 @@ enum dc_color_space {
|
|||||||
COLOR_SPACE_DOLBYVISION,
|
COLOR_SPACE_DOLBYVISION,
|
||||||
COLOR_SPACE_APPCTRL,
|
COLOR_SPACE_APPCTRL,
|
||||||
COLOR_SPACE_CUSTOMPOINTS,
|
COLOR_SPACE_CUSTOMPOINTS,
|
||||||
|
COLOR_SPACE_YCBCR709_BLACK,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum dc_dither_option {
|
enum dc_dither_option {
|
||||||
|
|||||||
@ -418,6 +418,7 @@ static void dce110_stream_encoder_dp_set_stream_attribute(
|
|||||||
break;
|
break;
|
||||||
case COLOR_SPACE_YCBCR709:
|
case COLOR_SPACE_YCBCR709:
|
||||||
case COLOR_SPACE_YCBCR709_LIMITED:
|
case COLOR_SPACE_YCBCR709_LIMITED:
|
||||||
|
case COLOR_SPACE_YCBCR709_BLACK:
|
||||||
misc0 = misc0 | 0x18; /* bit3=1, bit4=1 */
|
misc0 = misc0 | 0x18; /* bit3=1, bit4=1 */
|
||||||
misc1 = misc1 & ~0x80; /* bit7 = 0*/
|
misc1 = misc1 & ~0x80; /* bit7 = 0*/
|
||||||
dynamic_range_ycbcr = 1; /*bt709*/
|
dynamic_range_ycbcr = 1; /*bt709*/
|
||||||
|
|||||||
@ -415,6 +415,7 @@ void enc1_stream_encoder_dp_set_stream_attribute(
|
|||||||
case COLOR_SPACE_APPCTRL:
|
case COLOR_SPACE_APPCTRL:
|
||||||
case COLOR_SPACE_CUSTOMPOINTS:
|
case COLOR_SPACE_CUSTOMPOINTS:
|
||||||
case COLOR_SPACE_UNKNOWN:
|
case COLOR_SPACE_UNKNOWN:
|
||||||
|
case COLOR_SPACE_YCBCR709_BLACK:
|
||||||
/* do nothing */
|
/* do nothing */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user