MLK-19550 waylandsink: fix HDR10 playback abnormal
HDR10 require 10bit, transfer_characteristics = 16 or 18
otherwise don't trigger HDR10
upstream status: imx specific
Signed-off-by: Haihua Hu <jared.hu@nxp.com>
diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
index af067fd..9537d98 100644
--- a/ext/wayland/gstwaylandsink.c
+++ b/ext/wayland/gstwaylandsink.c
@@ -812,16 +812,19 @@
GST_INFO_OBJECT (sink, "chromaSampleLocTypeTopField %d", meta->hdr10meta.chromaSampleLocTypeTopField);
GST_INFO_OBJECT (sink, "chromaSampleLocTypeBottomField %d", meta->hdr10meta.chromaSampleLocTypeBottomField);
- eotf = SMPTE_ST2084;
- type = 0;
- display_primaries_red = (guint)(meta->hdr10meta.redPrimary[0] << 16 | meta->hdr10meta.redPrimary[1]);
- display_primaries_green = (guint)(meta->hdr10meta.greenPrimary[0] << 16 | meta->hdr10meta.greenPrimary[1]);
- display_primaries_blue = (guint)(meta->hdr10meta.bluePrimary[0] << 16 | meta->hdr10meta.bluePrimary[1]);
- white_point = (guint)(meta->hdr10meta.whitePoint[0] << 16 | meta->hdr10meta.whitePoint[1]);
- mastering_display_luminance = (guint)(((meta->hdr10meta.maxMasteringLuminance / 10000) & 0xffff) << 16
- | (meta->hdr10meta.minMasteringLuminance & 0xffff));
- max_cll = meta->hdr10meta.maxContentLightLevel;
- max_fall = meta->hdr10meta.maxFrameAverageLightLevel;
+ if ((meta->hdr10meta.transferCharacteristics == 16 || meta->hdr10meta.transferCharacteristics == 18)
+ && GST_VIDEO_INFO_FORMAT (&sink->video_info) == GST_VIDEO_FORMAT_NV12_10LE) {
+ eotf = SMPTE_ST2084;
+ type = 0;
+ display_primaries_red = (guint)(meta->hdr10meta.redPrimary[0] << 16 | meta->hdr10meta.redPrimary[1]);
+ display_primaries_green = (guint)(meta->hdr10meta.greenPrimary[0] << 16 | meta->hdr10meta.greenPrimary[1]);
+ display_primaries_blue = (guint)(meta->hdr10meta.bluePrimary[0] << 16 | meta->hdr10meta.bluePrimary[1]);
+ white_point = (guint)(meta->hdr10meta.whitePoint[0] << 16 | meta->hdr10meta.whitePoint[1]);
+ mastering_display_luminance = (guint)(((meta->hdr10meta.maxMasteringLuminance / 10000) & 0xffff) << 16
+ | (meta->hdr10meta.minMasteringLuminance & 0xffff));
+ max_cll = meta->hdr10meta.maxContentLightLevel;
+ max_fall = meta->hdr10meta.maxFrameAverageLightLevel;
+ }
}
if (display->hdr10_metadata) {