x265enc: Update for video-hdr struct change
authorSeungha Yang <seungha@centricular.com>
Fri, 13 Mar 2020 07:34:01 +0000 (16:34 +0900)
committerSeungha Yang <seungha@centricular.com>
Wed, 1 Apr 2020 05:18:11 +0000 (05:18 +0000)
See the change of -base https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/594

ext/x265/gstx265enc.c

index 7242418..30c909a 100644 (file)
@@ -942,70 +942,28 @@ gst_x265_enc_init_encoder (GstX265Enc * encoder)
 
     if (gst_video_mastering_display_info_from_caps (&minfo,
             encoder->input_state->caps)) {
-      guint16 displayPrimaryX[3];
-      guint16 displayPrimaryY[3];
-      guint16 whitePointX, whitePointY;
-      guint32 maxDisplayMasteringLuminance;
-      guint32 minDisplayMasteringLuminance;
-      const guint chroma_scale = 50000;
-      const guint luma_scale = 10000;
-
       GST_DEBUG_OBJECT (encoder, "Apply mastering display info");
 
-      displayPrimaryX[0] =
-          (guint16) gst_util_uint64_scale_round (minfo.Gx_n, chroma_scale,
-          minfo.Gx_d);
-      displayPrimaryX[1] =
-          (guint16) gst_util_uint64_scale_round (minfo.Bx_n, chroma_scale,
-          minfo.Bx_d);
-      displayPrimaryX[2] =
-          (guint16) gst_util_uint64_scale_round (minfo.Rx_n, chroma_scale,
-          minfo.Rx_d);
-
-      displayPrimaryY[0] =
-          (guint16) gst_util_uint64_scale_round (minfo.Gy_n, chroma_scale,
-          minfo.Gy_d);
-      displayPrimaryY[1] =
-          (guint16) gst_util_uint64_scale_round (minfo.By_n, chroma_scale,
-          minfo.By_d);
-      displayPrimaryY[2] =
-          (guint16) gst_util_uint64_scale_round (minfo.Ry_n, chroma_scale,
-          minfo.Ry_d);
-
-      whitePointX =
-          (guint16) gst_util_uint64_scale_round (minfo.Wx_n, chroma_scale,
-          minfo.Wx_d);
-      whitePointY =
-          (guint16) gst_util_uint64_scale_round (minfo.Wy_n, chroma_scale,
-          minfo.Wy_d);
-
-      maxDisplayMasteringLuminance =
-          (guint32) gst_util_uint64_scale_round (minfo.max_luma_n, luma_scale,
-          minfo.max_luma_d);
-      minDisplayMasteringLuminance =
-          (guint32) gst_util_uint64_scale_round (minfo.min_luma_n, luma_scale,
-          minfo.min_luma_d);
-
+      /* GstVideoMasteringDisplayInfo::display_primaries is rgb order but
+       * HEVC uses gbr order
+       * See spec D.3.28 display_primaries_x and display_primaries_y
+       */
       encoder->x265param.masteringDisplayColorVolume =
           g_strdup_printf ("G(%hu,%hu)B(%hu,%hu)R(%hu,%hu)WP(%hu,%hu)L(%u,%u)",
-          displayPrimaryX[0], displayPrimaryY[0],
-          displayPrimaryX[1], displayPrimaryY[1],
-          displayPrimaryX[2], displayPrimaryY[2],
-          whitePointX, whitePointY,
-          maxDisplayMasteringLuminance, minDisplayMasteringLuminance);
+          minfo.display_primaries[1].x, minfo.display_primaries[1].y,
+          minfo.display_primaries[2].x, minfo.display_primaries[2].y,
+          minfo.display_primaries[0].x, minfo.display_primaries[0].y,
+          minfo.white_point.x, minfo.white_point.y,
+          minfo.max_display_mastering_luminance,
+          minfo.min_display_mastering_luminance);
     }
 
     if (gst_video_content_light_level_from_caps (&cll,
             encoder->input_state->caps)) {
-      gdouble val;
-
       GST_DEBUG_OBJECT (encoder, "Apply content light level");
 
-      gst_util_fraction_to_double (cll.maxCLL_n, cll.maxCLL_d, &val);
-      encoder->x265param.maxCLL = (guint16) val;
-
-      gst_util_fraction_to_double (cll.maxFALL_n, cll.maxFALL_d, &val);
-      encoder->x265param.maxFALL = (guint16) val;
+      encoder->x265param.maxCLL = cll.max_content_light_level;
+      encoder->x265param.maxFALL = cll.max_frame_average_light_level;
     }
   }
 #endif