From 7869ba630d51525432f243bbefb830bd4b856565 Mon Sep 17 00:00:00 2001 From: MingLiang Dong Date: Tue, 3 Dec 2019 17:06:02 +0800 Subject: [PATCH] hdr: optimize osd sdr2hdr color/luminance [1/1] PD#SWPL-17683 Problem: 1. osd sdr2hdr color is different with video 2. osd sdr2hdr luminance is too high with astro pattern Solution: 1. osd sdr2hdr matrix set 709 to 2020 2. osd sdr2hdr max luminance set 330 Verify: verify on p212 Change-Id: I9c452f5bb2573089904e280a6e6ff98bea9441ab Signed-off-by: MingLiang Dong --- arch/arm/boot/dts/amlogic/gxl_p212_1g.dts | 4 +- arch/arm/boot/dts/amlogic/gxl_p212_2g.dts | 4 +- arch/arm/boot/dts/amlogic/gxl_p241_1g.dts | 4 +- arch/arm/boot/dts/amlogic/gxl_p241_v2-1g.dts | 4 +- arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts | 4 +- arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts | 4 +- arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts | 4 +- .../arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts | 4 +- .../amlogic/media/enhancement/amvecm/amcsc.c | 59 +++++++++++++++++-- 9 files changed, 69 insertions(+), 22 deletions(-) diff --git a/arch/arm/boot/dts/amlogic/gxl_p212_1g.dts b/arch/arm/boot/dts/amlogic/gxl_p212_1g.dts index 32ff53084810..72a5b5a33100 100644 --- a/arch/arm/boot/dts/amlogic/gxl_p212_1g.dts +++ b/arch/arm/boot/dts/amlogic/gxl_p212_1g.dts @@ -1104,8 +1104,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/arch/arm/boot/dts/amlogic/gxl_p212_2g.dts b/arch/arm/boot/dts/amlogic/gxl_p212_2g.dts index 8b553b64378b..d332a936504f 100644 --- a/arch/arm/boot/dts/amlogic/gxl_p212_2g.dts +++ b/arch/arm/boot/dts/amlogic/gxl_p212_2g.dts @@ -1104,8 +1104,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/arch/arm/boot/dts/amlogic/gxl_p241_1g.dts b/arch/arm/boot/dts/amlogic/gxl_p241_1g.dts index 80b76d479c19..c86ccc8434c6 100644 --- a/arch/arm/boot/dts/amlogic/gxl_p241_1g.dts +++ b/arch/arm/boot/dts/amlogic/gxl_p241_1g.dts @@ -1162,8 +1162,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/arch/arm/boot/dts/amlogic/gxl_p241_v2-1g.dts b/arch/arm/boot/dts/amlogic/gxl_p241_v2-1g.dts index 35d03cffb163..7675b7003920 100644 --- a/arch/arm/boot/dts/amlogic/gxl_p241_v2-1g.dts +++ b/arch/arm/boot/dts/amlogic/gxl_p241_v2-1g.dts @@ -1162,8 +1162,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts index 0a0175b79632..0b9e0f787010 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts @@ -1100,8 +1100,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts index d421ba575468..0b3a647438f4 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts @@ -1101,8 +1101,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts index f3737e9827cd..673d074d8f94 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts @@ -1149,8 +1149,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts index 6715bbdeb844..bb937f01bcd1 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts @@ -1150,8 +1150,8 @@ gamma_en = <0>;/*1:enabel ;0:disable*/ wb_en = <0>;/*1:enabel ;0:disable*/ cm_en = <0>;/*1:enabel ;0:disable*/ - /*1:enabel osd lut 100 table;0:disable*/ - cfg_en_osd_100 = <1>; + /*0:disable; 1:osd 100nit; 2:osd 200nit 3: osd 330 nit*/ + cfg_en_osd_100 = <3>; /*0: 709/601 1: bt2020*/ tx_op_color_primary = <0>; }; diff --git a/drivers/amlogic/media/enhancement/amvecm/amcsc.c b/drivers/amlogic/media/enhancement/amvecm/amcsc.c index 9f2da11b7249..28c51c812abe 100644 --- a/drivers/amlogic/media/enhancement/amvecm/amcsc.c +++ b/drivers/amlogic/media/enhancement/amvecm/amcsc.c @@ -1732,6 +1732,24 @@ static unsigned int osd_oetf_41_2084_mapping_290[OSD_OETF_LUT_SIZE] = { 596 }; +static unsigned int osd_eotf_33_709_mapping_330[EOTF_LUT_SIZE] = { + 0, 8, 37, 90, 169, 276, 412, 579, + 776, 1006, 1268, 1564, 1894, 2258, 2658, 3094, + 3566, 4075, 4621, 5204, 5826, 6486, 7185, 7923, + 8701, 9518, 10376, 11274, 12213, 13194, 14215, 15279, + 16384 +}; + +/* osd oetf lut: 2084 from baozheng */ +static unsigned int osd_oetf_41_2084_mapping_330[OSD_OETF_LUT_SIZE] = { + 0, 166, 207, 233, 254, 270, 284, 296, + 307, 366, 402, 429, 451, 469, 484, 498, + 509, 520, 530, 539, 547, 555, 562, 569, + 576, 582, 588, 593, 598, 603, 608, 613, + 617, 621, 625, 629, 633, 637, 640, 644, + 647 +}; + /* osd eotf lut: sdr->hlg */ static unsigned int osd_eotf_33_sdr2hlg_mapping[EOTF_LUT_SIZE] = { 0, 512, 1024, 1536, 2048, 2560, 3072, 3584, @@ -4784,8 +4802,8 @@ static int hdr_process( /* for OSD */ if (get_cpu_type() > MESON_CPU_MAJOR_ID_GXTVBB) prepare_customer_matrix( - &master_info->primaries, - &master_info->white_point, + &bt2020_primaries, + &bt2020_white_point, vinfo, &osd_m, 1); need_adjust_contrast_saturation |= 1; } else { @@ -4823,12 +4841,19 @@ static int hdr_process( osd_eotf_33_709_mapping_100, /* G */ osd_eotf_33_709_mapping_100, /* B */ CSC_ON); - } else if ((is_hdr_cfg_osd_100() == 2)) { + } else if (is_hdr_cfg_osd_100() == 2) { set_vpp_lut(VPP_LUT_OSD_EOTF, osd_eotf_33_709_mapping_290, /* R */ osd_eotf_33_709_mapping_290, /* G */ osd_eotf_33_709_mapping_290, /* B */ CSC_ON); + } else if (is_hdr_cfg_osd_100() == 3) { + set_vpp_lut( + VPP_LUT_OSD_EOTF, + osd_eotf_33_709_mapping_330, /* R */ + osd_eotf_33_709_mapping_330, /* G */ + osd_eotf_33_709_mapping_330, /* B */ + CSC_ON); } else { set_vpp_lut(VPP_LUT_OSD_EOTF, osd_eotf_33_709_mapping, /* R */ @@ -4863,6 +4888,13 @@ static int hdr_process( osd_oetf_41_2084_mapping_290, /* G */ osd_oetf_41_2084_mapping_290, /* B */ CSC_ON); + } else if (is_hdr_cfg_osd_100() == 3) { + set_vpp_lut( + VPP_LUT_OSD_OETF, + osd_oetf_41_2084_mapping_330, /* R */ + osd_oetf_41_2084_mapping_330, /* G */ + osd_oetf_41_2084_mapping_330, /* B */ + CSC_ON); } else { set_vpp_lut(VPP_LUT_OSD_OETF, osd_oetf_41_2084_mapping, /* R */ @@ -5286,8 +5318,16 @@ static void bypass_hdr_process( osd_eotf_33_709_mapping_290, osd_eotf_33_709_mapping_290, CSC_ON); + } else if (is_hdr_cfg_osd_100() == 3) { + set_vpp_lut( + VPP_LUT_OSD_EOTF, + osd_eotf_33_709_mapping_330, + osd_eotf_33_709_mapping_330, + osd_eotf_33_709_mapping_330, + CSC_ON); } else { - set_vpp_lut(VPP_LUT_OSD_EOTF, + set_vpp_lut( + VPP_LUT_OSD_EOTF, osd_eotf_33_709_mapping, /*R*/ osd_eotf_33_709_mapping, /*G*/ osd_eotf_33_709_mapping, /*B*/ @@ -5300,8 +5340,8 @@ static void bypass_hdr_process( "\tMaster_display_colour available.\n"); print_primaries_info(master_info); prepare_customer_matrix( - &master_info->primaries, - &master_info->white_point, + &bt2020_primaries, + &bt2020_white_point, vinfo, &osd_m, 1); } else { pr_csc(1, "\tNo master_display_colour.\n"); @@ -5346,6 +5386,13 @@ static void bypass_hdr_process( osd_oetf_41_2084_mapping_290, osd_oetf_41_2084_mapping_290, CSC_ON); + } else if (is_hdr_cfg_osd_100() == 3) { + set_vpp_lut( + VPP_LUT_OSD_OETF, + osd_oetf_41_2084_mapping_330, + osd_oetf_41_2084_mapping_330, + osd_oetf_41_2084_mapping_330, + CSC_ON); } else { set_vpp_lut(VPP_LUT_OSD_OETF, osd_oetf_41_2084_mapping,