dv: below 720p was chaged to HDR10 mode in Dolby
authorzhilei.wu <zhilei.wu@amlogic.com>
Thu, 12 Apr 2018 07:17:15 +0000 (15:17 +0800)
committerYixun Lan <yixun.lan@amlogic.com>
Thu, 3 May 2018 06:57:14 +0000 (23:57 -0700)
PD#163239: dv: below 720p was changed to HDR10 in Dolby

Change-Id: Ie6cedbc03582e4b36b6d3a8c628bbf41001862c2
Signed-off-by: zhilei.wu <zhilei.wu@amlogic.com>
drivers/amlogic/media/enhancement/amdolby_vision/amdolby_vision.c

index f3cadf3..f139952 100644 (file)
@@ -3169,19 +3169,12 @@ static int sink_support_dolby_vision(const struct vinfo_s *vinfo)
                return 0;
        if (dolby_vision_flags & FLAG_DISABLE_DOVI_OUT)
                return 0;
-#if 0
-       /* 2160p60 if TV support */
-       if ((vinfo->vout_device->mode >= VMODE_4K2K_SMPTE_50HZ)
-       && (vinfo->vout_device->dv_info->sup_2160p60hz == 1))
+       if ((vinfo->width >= 1920) &&
+               (vinfo->height >= 1080) &&
+               (vinfo->field_height >= 1080))
                return 1;
-       /* 1080p~2160p30 if TV support */
-       else if ((vinfo->vout_device->mode >= VMODE_1080P)
-       && (vinfo->vout_device->mode <= VMODE_4K2K_SMPTE_30HZ))
-               return 1;
-       return 0;
-#else
-               return 1;
-#endif
+       else
+               return 0;
 }
 
 static int sink_support_hdr(const struct vinfo_s *vinfo)
@@ -3740,6 +3733,37 @@ static int check_primaries(struct vframe_master_display_colour_s *p_mdc)
        return 0;
 }
 
+void prepare_sdr2hdr10_param(void)
+{
+       uint32_t max_lum = 1000 * 10000;
+       uint32_t min_lum = 50;
+
+       hdr10_param.
+       min_display_mastering_luminance
+               = min_lum;
+       hdr10_param.
+       max_display_mastering_luminance
+               = max_lum;
+       hdr10_param.Rx
+               = bt2020_primaries[2][0];
+       hdr10_param.Ry
+               = bt2020_primaries[2][1];
+       hdr10_param.Gx
+               = bt2020_primaries[0][0];
+       hdr10_param.Gy
+               = bt2020_primaries[0][1];
+       hdr10_param.Bx
+               = bt2020_primaries[1][0];
+       hdr10_param.By
+               = bt2020_primaries[1][1];
+       hdr10_param.Wx
+               = bt2020_white_point[0];
+       hdr10_param.Wy
+               = bt2020_white_point[1];
+       hdr10_param.max_content_light_level = 0;
+       hdr10_param.max_pic_average_light_level = 0;
+}
+
 void prepare_hdr10_param(
        struct vframe_master_display_colour_s *p_mdc,
        struct hdr10_param_s *p_hdr10_param)
@@ -4849,7 +4873,14 @@ int dolby_vision_parse_metadata(
                dst_format = FORMAT_HDR10;
        else
                dst_format = FORMAT_SDR;
-
+       if ((src_format == FORMAT_SDR) &&
+               (dolby_vision_mode == DOLBY_VISION_OUTPUT_MODE_HDR10) &&
+               !(dolby_vision_flags & FLAG_CERTIFICAION)) {
+               src_format = FORMAT_HDR10;
+               prepare_sdr2hdr10_param();
+               /* for stb with v2.3 may use 12 bit */
+               src_bdp = 10;
+       }
 #ifdef V2_4
        if ((src_format != dovi_setting.src_format)
                || (dst_format != dovi_setting.dst_format))