hdr: fix tl1 hdr no effect [1/1]
authorMingLiang Dong <mingliang.dong@amlogic.com>
Thu, 10 Oct 2019 09:31:07 +0000 (17:31 +0800)
committerTao Zeng <tao.zeng@amlogic.com>
Fri, 11 Oct 2019 07:39:09 +0000 (00:39 -0700)
PD#SWPL-12751

Problem:
1. tl1 hdr no effect
2. alway print [amvideo..] saturation_pre:0 hue_pre:0 mab:1000000

Solution:
1. seprate vd1/vd2 hdr process
2. fix vd2 metadata random change

Verify:
verify on TL1

Change-Id: I4d88b5b8758095ae90b2d2c06480bd9726e2cad1
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>
drivers/amlogic/media/enhancement/amvecm/amcsc.c

index 848bc54..aa2f6d2 100644 (file)
@@ -3776,6 +3776,7 @@ int signal_type_changed(struct vframe_s *vf,
                if (cur_mvc_type[vd_path] != (vf->type & VIDTYPE_MVC)) {
                        change_flag |= SIG_SRC_CHG;
                        cur_mvc_type[vd_path] = vf->type & VIDTYPE_MVC;
+                       pr_csc(1, "VIDTYPE MVC changed.\n");
                        return change_flag;
                }
        } else
@@ -3977,6 +3978,7 @@ int signal_type_changed(struct vframe_s *vf,
        if (vecm_latch_flag & FLAG_HDR_OOTF_LATCH) {
                change_flag |= SIG_HDR_OOTF_CHG;
                vecm_latch_flag &= ~FLAG_HDR_OOTF_LATCH;
+               pr_csc(1, "ootf curve changed.\n");
        }
 
        return change_flag;
@@ -4724,7 +4726,10 @@ static int hdr_process(
 
        if (get_cpu_type() >= MESON_CPU_MAJOR_ID_G12A) {
                hdr_func(OSD1_HDR, HDR_BYPASS, vinfo);
-               hdr_func(VD1_HDR, HDR_SDR, vinfo);
+               if (vd_path == VD1_PATH)
+                       hdr_func(VD1_HDR, HDR_SDR, vinfo);
+               else
+                       hdr_func(VD2_HDR, HDR_SDR, vinfo);
                return need_adjust_contrast_saturation;
        }
 
@@ -4970,7 +4975,10 @@ static int hlg_process(
        int i, j;
 
        if (get_cpu_type() >= MESON_CPU_MAJOR_ID_G12A) {
-               hdr_func(VD1_HDR, HLG_SDR, vinfo);
+               if (vd_path == VD1_PATH)
+                       hdr_func(VD1_HDR, HLG_SDR, vinfo);
+               else
+                       hdr_func(VD2_HDR, HLG_SDR, vinfo);
                hdr_func(OSD1_HDR, HDR_BYPASS, vinfo);
                return need_adjust_contrast_saturation;
        }
@@ -5190,7 +5198,10 @@ static void bypass_hdr_process(
        int i, j;
 
        if (get_cpu_type() >= MESON_CPU_MAJOR_ID_G12A) {
-               hdr_func(VD1_HDR, HDR_BYPASS, vinfo);
+               if (vd_path == VD1_PATH)
+                       hdr_func(VD1_HDR, HDR_BYPASS, vinfo);
+               else
+                       hdr_func(VD2_HDR, HDR_BYPASS, vinfo);
                if ((csc_type == VPP_MATRIX_BT2020YUV_BT2020RGB) &&
                        ((vinfo->hdr_info.hdr_support & 0xc) &&
                        (vinfo->viu_color_fmt != COLOR_FMT_RGB444))) {
@@ -5840,7 +5851,10 @@ static void hlg_hdr_process(
        int i, j;
 
        if (get_cpu_type() >= MESON_CPU_MAJOR_ID_G12A) {
-               hdr_func(VD1_HDR, HLG_HDR, vinfo);
+               if (vd_path == VD1_PATH)
+                       hdr_func(VD1_HDR, HLG_HDR, vinfo);
+               else if (vd_path == VD2_PATH)
+                       hdr_func(VD2_HDR, HLG_HDR, vinfo);
                hdr_func(OSD1_HDR, SDR_HDR, vinfo);
                return;
        }
@@ -6084,7 +6098,10 @@ static void sdr_hdr_process(
 {
        if (vinfo->viu_color_fmt != COLOR_FMT_RGB444) {
                if (get_cpu_type() >= MESON_CPU_MAJOR_ID_G12A) {
-                       hdr_func(VD1_HDR, SDR_HDR, vinfo);
+                       if (vd_path == VD1_PATH)
+                               hdr_func(VD1_HDR, SDR_HDR, vinfo);
+                       else
+                               hdr_func(VD2_HDR, SDR_HDR, vinfo);
                        hdr_func(OSD1_HDR, SDR_HDR, vinfo);
                        return;
                }
@@ -7233,13 +7250,12 @@ static int vpp_matrix_update(
                SIG_SRC_OUTPUT_CHG | SIG_HDR10_PLUS_MODE |
                SIG_SRC_CHG | SIG_HDR_OOTF_CHG))) {
                if (cpu_after_eq(MESON_CPU_MAJOR_ID_G12A) &&
-               (get_cpu_type() != MESON_CPU_MAJOR_ID_TL1)) {
+               (get_cpu_type() != MESON_CPU_MAJOR_ID_TL1))
                        video_post_process(csc_type, vinfo, vd_path);
-                       cur_hdr_policy = get_hdr_policy();
-               } else {
+               else
                        video_process(vf, csc_type, signal_change_flag,
                                vinfo, p, vd_path);
-               }
+               cur_hdr_policy = get_hdr_policy();
        }
 
        /* eye protection mode */
@@ -7524,13 +7540,14 @@ int amvecm_matrix_process(
                        } else {
                                /* dolby disable */
                                pr_csc(8,
-                                      "vd%d: %d %d Fake SDR frame%s, policy =%d\n",
+                                      "vd%d: %d %d Fake SDR frame%s, policy =%d, cur_policy =%d\n",
                                       vd_path + 1,
                                       null_vf_cnt[vd_path],
                                       toggle_frame,
                                       is_video_layer_on(vd_path) ?
                                       " " : ", video off",
-                                      get_hdr_policy());
+                                      get_hdr_policy(),
+                                      cur_hdr_policy);
                                send_fake_frame = true;
                                if (get_hdr_policy() == 1) {
                                /* adaptive hdr */
@@ -7556,6 +7573,10 @@ int amvecm_matrix_process(
                                fake_vframe.prop.
                                master_display_colour.present_flag
                                        = 0x80000000;
+                               memset(
+                               &fake_vframe.prop.master_display_colour,
+                               0,
+                               sizeof(struct vframe_master_display_colour_s));
                                vpp_matrix_update(
                                        &fake_vframe, vinfo,
                                        CSC_FLAG_TOGGLE_FRAME, vd_path);