kmssink: add hdr metadata reset when exit playback

upstream status: imx specific
diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index 7f0d2cc..3c66826 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -1597,6 +1597,16 @@
         if (self->hold_buf[i])
           gst_buffer_unref (self->hold_buf[i]);
       }
+      if (self->hdr10meta.eotf != 0) {
+        guint blob_id = 0;
+        gint err = 0;
+        self->hdr10meta.eotf = 0;
+        drmModeCreatePropertyBlob (self->fd, &self->hdr10meta, 1, &blob_id);
+        err = drmModeObjectSetProperty (self->ctrl_fd, self->conn_id, DRM_MODE_OBJECT_CONNECTOR, self->hdr_prop_id, blob_id);
+        drmModeDestroyPropertyBlob (self->fd, blob_id);
+        if (err)
+          GST_ERROR_OBJECT (self, "reset blob property fail %d", err);
+      }
 
       break;
     }
@@ -1714,7 +1724,7 @@
 void
 gst_kms_sink_config_hdr10 (GstKMSSink *self, GstBuffer * buf)
 {
-  guint blob_id = 0, prop_id = 0;
+  guint blob_id = 0;
   int err;
   gint i;
   drmModeObjectPropertiesPtr props = NULL;
@@ -1761,30 +1771,32 @@
     self->hdr10meta.min_mastering_display_luminance = meta->hdr10meta.minMasteringLuminance & 0xffff;
     self->hdr10meta.max_fall = meta->hdr10meta.maxFrameAverageLightLevel;
     self->hdr10meta.max_cll =  meta->hdr10meta.maxContentLightLevel;
-  
-    props = drmModeObjectGetProperties (self->fd, self->conn_id, DRM_MODE_OBJECT_CONNECTOR);
-    for (i = 0; i < props->count_props; ++i) {
-      prop = drmModeGetProperty(self->fd, props->props[i]);
-      if (!strcmp(prop->name, "HDR_SOURCE_METADATA")) {
-        GST_DEBUG_OBJECT (self, "found HDR_SOURCE_METADATA property on connector %d property id %d",
-            self->conn_id, prop->prop_id);
-        prop_id = prop->prop_id;
+
+    if (!self->hdr_prop_id) {
+      props = drmModeObjectGetProperties (self->fd, self->conn_id, DRM_MODE_OBJECT_CONNECTOR);
+      for (i = 0; i < props->count_props; ++i) {
+        prop = drmModeGetProperty(self->fd, props->props[i]);
+        if (!strcmp(prop->name, "HDR_SOURCE_METADATA")) {
+          GST_DEBUG_OBJECT (self, "found HDR_SOURCE_METADATA property on connector %d property id %d",
+              self->conn_id, prop->prop_id);
+          self->hdr_prop_id = prop->prop_id;
+        }
+        drmModeFreeProperty (prop);
+        prop = NULL;
       }
-      drmModeFreeProperty (prop);
-      prop = NULL;
     }
 
-    if (prop_id == 0) {
+    if (self->hdr_prop_id == 0) {
       GST_WARNING_OBJECT (self, "no HDR_SOURCE_METADATA property found");
       return;
     }
 
     drmModeCreatePropertyBlob (self->fd, &self->hdr10meta, sizeof (self->hdr10meta), &blob_id);
     GST_INFO_OBJECT (self, "create blob id %d", blob_id);
-    err = drmModeObjectSetProperty (self->ctrl_fd, self->conn_id, DRM_MODE_OBJECT_CONNECTOR, prop_id, blob_id);
+    err = drmModeObjectSetProperty (self->ctrl_fd, self->conn_id, DRM_MODE_OBJECT_CONNECTOR, self->hdr_prop_id, blob_id);
     drmModeDestroyPropertyBlob (self->fd, blob_id);
     if (err) {
-      GST_ERROR_OBJECT (self, "set blob property fail");
+      GST_ERROR_OBJECT (self, "set blob property fail %d", err);
       return;
     }
   }
@@ -2188,6 +2200,7 @@
   sink->conn_id = -1;
   sink->plane_id = -1;
   sink->primary_plane_id = -1;
+  sink->hdr_prop_id = 0;
   sink->can_scale = TRUE;
   sink->scale_checked = FALSE;
   sink->upscale_ratio = 1;
diff --git a/sys/kms/gstkmssink.h b/sys/kms/gstkmssink.h
index 28ad9cd..50a7676 100644
--- a/sys/kms/gstkmssink.h
+++ b/sys/kms/gstkmssink.h
@@ -87,6 +87,7 @@
 
   /* hdr10 support */
   struct hdr_static_metadata hdr10meta;
+  gint hdr_prop_id;
 
   GstVideoInfo vinfo;
   GstCaps *allowed_caps;