From: robin zhu Date: Fri, 20 Sep 2019 04:03:07 +0000 (-0700) Subject: video: dv: DV SDK, DRM infoframe in GBR order [1/1] X-Git-Tag: hardkernel-4.9.236-104~615 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1ab6a1e347916c801a238281001e0c79d0383d03;p=platform%2Fkernel%2Flinux-amlogic.git video: dv: DV SDK, DRM infoframe in GBR order [1/1] PD#SWPL-13874 Problem: DV sdk test, for sdr/hdr/dv to hdr cases DRM infoframe primaries in GBR order Solution: DV enable, send primaries in RGB order Verify: None Change-Id: I0229179592203aba5e2a388a572b0061fa21a48f Signed-off-by: robin zhu --- diff --git a/drivers/amlogic/media/enhancement/amdolby_vision/amdolby_vision.c b/drivers/amlogic/media/enhancement/amdolby_vision/amdolby_vision.c index 3539e98..6d3e636 100644 --- a/drivers/amlogic/media/enhancement/amdolby_vision/amdolby_vision.c +++ b/drivers/amlogic/media/enhancement/amdolby_vision/amdolby_vision.c @@ -5321,6 +5321,7 @@ static int prepare_vsif_pkt( /* #define HDMI_SEND_ALL_PKT */ static u32 last_dst_format = FORMAT_SDR; static bool send_hdmi_pkt( + enum signal_format_e src_format, enum signal_format_e dst_format, const struct vinfo_s *vinfo, struct vframe_s *vf) { @@ -5340,54 +5341,103 @@ static bool send_hdmi_pkt( | (9 << 16) /* bt2020 */ | (0x10 << 8) /* bt2020-10 */ | (10 << 0);/* bt2020c */ - /* need invert to g,b,r */ - if (hdr10_data.primaries[0][0] != - ((p_hdr->display_primaries_x_1_MSB << 8) - | p_hdr->display_primaries_x_1_LSB)) - flag = true; - hdr10_data.primaries[0][0] = - (p_hdr->display_primaries_x_1_MSB << 8) - | p_hdr->display_primaries_x_1_LSB; - - if (hdr10_data.primaries[0][1] != - ((p_hdr->display_primaries_y_1_MSB << 8) - | p_hdr->display_primaries_y_1_LSB)) - flag = true; - hdr10_data.primaries[0][1] = - (p_hdr->display_primaries_y_1_MSB << 8) - | p_hdr->display_primaries_y_1_LSB; - - if (hdr10_data.primaries[1][0] != - ((p_hdr->display_primaries_x_2_MSB << 8) - | p_hdr->display_primaries_x_2_LSB)) - flag = true; - hdr10_data.primaries[1][0] = - (p_hdr->display_primaries_x_2_MSB << 8) - | p_hdr->display_primaries_x_2_LSB; - - if (hdr10_data.primaries[1][1] != - ((p_hdr->display_primaries_y_2_MSB << 8) - | p_hdr->display_primaries_y_2_LSB)) - flag = true; - hdr10_data.primaries[1][1] = - (p_hdr->display_primaries_y_2_MSB << 8) - | p_hdr->display_primaries_y_2_LSB; - if (hdr10_data.primaries[2][0] != - ((p_hdr->display_primaries_x_0_MSB << 8) - | p_hdr->display_primaries_x_0_LSB)) - flag = true; - hdr10_data.primaries[2][0] = - (p_hdr->display_primaries_x_0_MSB << 8) - | p_hdr->display_primaries_x_0_LSB; - - if (hdr10_data.primaries[2][1] != - ((p_hdr->display_primaries_y_0_MSB << 8) - | p_hdr->display_primaries_y_0_LSB)) - flag = true; - hdr10_data.primaries[2][1] = - (p_hdr->display_primaries_y_0_MSB << 8) - | p_hdr->display_primaries_y_0_LSB; - + if (src_format != FORMAT_HDR10PLUS) { + /* keep as r,g,b when src not HDR+ */ + if (hdr10_data.primaries[0][0] != + ((p_hdr->display_primaries_x_0_MSB << 8) + | p_hdr->display_primaries_x_0_LSB)) + flag = true; + hdr10_data.primaries[0][0] = + (p_hdr->display_primaries_x_0_MSB << 8) + | p_hdr->display_primaries_x_0_LSB; + + if (hdr10_data.primaries[0][1] != + ((p_hdr->display_primaries_y_0_MSB << 8) + | p_hdr->display_primaries_y_0_LSB)) + flag = true; + hdr10_data.primaries[0][1] = + (p_hdr->display_primaries_y_0_MSB << 8) + | p_hdr->display_primaries_y_0_LSB; + + if (hdr10_data.primaries[1][0] != + ((p_hdr->display_primaries_x_1_MSB << 8) + | p_hdr->display_primaries_x_1_LSB)) + flag = true; + hdr10_data.primaries[1][0] = + (p_hdr->display_primaries_x_1_MSB << 8) + | p_hdr->display_primaries_x_1_LSB; + + if (hdr10_data.primaries[1][1] != + ((p_hdr->display_primaries_y_1_MSB << 8) + | p_hdr->display_primaries_y_1_LSB)) + flag = true; + hdr10_data.primaries[1][1] = + (p_hdr->display_primaries_y_1_MSB << 8) + | p_hdr->display_primaries_y_1_LSB; + if (hdr10_data.primaries[2][0] != + ((p_hdr->display_primaries_x_2_MSB << 8) + | p_hdr->display_primaries_x_2_LSB)) + flag = true; + hdr10_data.primaries[2][0] = + (p_hdr->display_primaries_x_2_MSB << 8) + | p_hdr->display_primaries_x_2_LSB; + + if (hdr10_data.primaries[2][1] != + ((p_hdr->display_primaries_y_2_MSB << 8) + | p_hdr->display_primaries_y_2_LSB)) + flag = true; + hdr10_data.primaries[2][1] = + (p_hdr->display_primaries_y_2_MSB << 8) + | p_hdr->display_primaries_y_2_LSB; + } else { + /* need invert to g,b,r */ + if (hdr10_data.primaries[0][0] != + ((p_hdr->display_primaries_x_1_MSB << 8) + | p_hdr->display_primaries_x_1_LSB)) + flag = true; + hdr10_data.primaries[0][0] = + (p_hdr->display_primaries_x_1_MSB << 8) + | p_hdr->display_primaries_x_1_LSB; + + if (hdr10_data.primaries[0][1] != + ((p_hdr->display_primaries_y_1_MSB << 8) + | p_hdr->display_primaries_y_1_LSB)) + flag = true; + hdr10_data.primaries[0][1] = + (p_hdr->display_primaries_y_1_MSB << 8) + | p_hdr->display_primaries_y_1_LSB; + + if (hdr10_data.primaries[1][0] != + ((p_hdr->display_primaries_x_2_MSB << 8) + | p_hdr->display_primaries_x_2_LSB)) + flag = true; + hdr10_data.primaries[1][0] = + (p_hdr->display_primaries_x_2_MSB << 8) + | p_hdr->display_primaries_x_2_LSB; + + if (hdr10_data.primaries[1][1] != + ((p_hdr->display_primaries_y_2_MSB << 8) + | p_hdr->display_primaries_y_2_LSB)) + flag = true; + hdr10_data.primaries[1][1] = + (p_hdr->display_primaries_y_2_MSB << 8) + | p_hdr->display_primaries_y_2_LSB; + if (hdr10_data.primaries[2][0] != + ((p_hdr->display_primaries_x_0_MSB << 8) + | p_hdr->display_primaries_x_0_LSB)) + flag = true; + hdr10_data.primaries[2][0] = + (p_hdr->display_primaries_x_0_MSB << 8) + | p_hdr->display_primaries_x_0_LSB; + + if (hdr10_data.primaries[2][1] != + ((p_hdr->display_primaries_y_0_MSB << 8) + | p_hdr->display_primaries_y_0_LSB)) + flag = true; + hdr10_data.primaries[2][1] = + (p_hdr->display_primaries_y_0_MSB << 8) + | p_hdr->display_primaries_y_0_LSB; + } if (hdr10_data.white_point[0] != ((p_hdr->white_point_x_MSB << 8) | p_hdr->white_point_x_LSB)) @@ -6917,21 +6967,25 @@ int dolby_vision_process(struct vframe_s *vf, u32 display_size, if (vf && is_hdr10plus_frame(vf)) { /* disable dolby immediately */ pr_info("Dolby bypass: HDR10+: Switched to SDR first\n"); - send_hdmi_pkt(FORMAT_SDR, vinfo, vf); + send_hdmi_pkt(FORMAT_HDR10PLUS, + FORMAT_SDR, vinfo, vf); enable_dolby_vision(0); } else if (vf && is_hlg_frame(vf)) { /* disable dolby immediately */ pr_info("Dolby bypass: HLG: Switched to SDR first\n"); - send_hdmi_pkt(FORMAT_SDR, vinfo, vf); + send_hdmi_pkt(FORMAT_HLG, + FORMAT_SDR, vinfo, vf); enable_dolby_vision(0); } else if (last_dst_format != FORMAT_DOVI) { /* disable dolby immediately */ pr_info("Dolby bypass: Switched %d to SDR\n", last_dst_format); - send_hdmi_pkt(FORMAT_SDR, vinfo, vf); + send_hdmi_pkt(dolby_vision_src_format, + FORMAT_SDR, vinfo, vf); enable_dolby_vision(0); } else { - send_hdmi_pkt(FORMAT_SDR, vinfo, vf); + send_hdmi_pkt(dolby_vision_src_format, + FORMAT_SDR, vinfo, vf); if (sdr_delay >= MAX_TRANSITION_DELAY) { pr_info("Dolby bypass: Done - Switched to SDR\n"); enable_dolby_vision(0); @@ -7042,6 +7096,7 @@ int dolby_vision_process(struct vframe_s *vf, u32 display_size, /* send HDMI packet according to dst_format */ if (vinfo && !force_stb_mode) send_hdmi_pkt( + dovi_setting.src_format, dovi_setting.dst_format, vinfo, vf); update_dolby_vision_status(