decodebin3: Do not modify structure of EOS event

https://bugzilla.gnome.org/show_bug.cgi?id=795981
diff --git a/gst/playback/gstdecodebin3-parse.c b/gst/playback/gstdecodebin3-parse.c
index b96eff7..aea0f66 100644
--- a/gst/playback/gstdecodebin3-parse.c
+++ b/gst/playback/gstdecodebin3-parse.c
@@ -35,6 +35,20 @@
 #include "gstplayback.h"
 #endif
 
+#define CUSTOM_EOS_QUARK _custom_eos_quark_get ()
+#define CUSTOM_EOS_QUARK_DATA "custom-eos"
+static GQuark
+_custom_eos_quark_get (void)
+{
+  static gsize g_quark;
+
+  if (g_once_init_enter (&g_quark)) {
+    gsize quark = (gsize) g_quark_from_static_string ("decodebin3-custom-eos");
+    g_once_init_leave (&g_quark, quark);
+  }
+  return g_quark;
+}
+
 /* Streams that come from demuxers (input/upstream) */
 /* FIXME : All this is hardcoded. Switch to tree of chains */
 struct _DecodebinInputStream
@@ -263,16 +277,14 @@
           GstPad *peer = gst_pad_get_peer (input->srcpad);
           if (peer) {
             /* Send custom-eos event to multiqueue slot */
-            GstStructure *s;
             GstEvent *event;
 
             GST_DEBUG_OBJECT (pad,
                 "Got EOS end of input stream, post custom-eos");
             event = gst_event_new_eos ();
             gst_event_set_seqnum (event, gst_event_get_seqnum (ev));
-            s = gst_event_writable_structure (event);
-            gst_structure_set (s, "decodebin3-custom-eos", G_TYPE_BOOLEAN, TRUE,
-                NULL);
+            gst_mini_object_set_qdata (GST_MINI_OBJECT_CAST (event),
+                CUSTOM_EOS_QUARK, (gchar *) CUSTOM_EOS_QUARK_DATA, NULL);
             gst_pad_send_event (peer, event);
             gst_object_unref (peer);
           } else {
diff --git a/gst/playback/gstdecodebin3.c b/gst/playback/gstdecodebin3.c
index 3a61645..07b6104 100644
--- a/gst/playback/gstdecodebin3.c
+++ b/gst/playback/gstdecodebin3.c
@@ -181,6 +181,21 @@
 
 #define EXTRA_DEBUG 1
 
+#define CUSTOM_FINAL_EOS_QUARK _custom_final_eos_quark_get ()
+#define CUSTOM_FINAL_EOS_QUARK_DATA "custom-final-eos"
+static GQuark
+_custom_final_eos_quark_get (void)
+{
+  static gsize g_quark;
+
+  if (g_once_init_enter (&g_quark)) {
+    gsize quark =
+        (gsize) g_quark_from_static_string ("decodebin3-custom-final-eos");
+    g_once_init_leave (&g_quark, quark);
+  }
+  return g_quark;
+}
+
 typedef struct _GstDecodebin3 GstDecodebin3;
 typedef struct _GstDecodebin3Class GstDecodebin3Class;
 
@@ -1585,7 +1600,6 @@
 
       /* Send EOS to all slots */
       if (peer) {
-        GstStructure *s;
         GstEvent *stream_start, *eos;
 
         stream_start =
@@ -1603,9 +1617,9 @@
         }
 
         eos = gst_event_new_eos ();
-        s = gst_event_writable_structure (eos);
-        gst_structure_set (s, "decodebin3-custom-final-eos", G_TYPE_BOOLEAN,
-            TRUE, NULL);
+        gst_mini_object_set_qdata (GST_MINI_OBJECT_CAST (eos),
+            CUSTOM_FINAL_EOS_QUARK, (gchar *) CUSTOM_FINAL_EOS_QUARK_DATA,
+            NULL);
         gst_pad_send_event (peer, eos);
         gst_object_unref (peer);
       } else
@@ -1704,12 +1718,15 @@
         break;
       case GST_EVENT_EOS:
       {
-        const GstStructure *s = gst_event_get_structure (ev);
         gboolean was_drained = slot->is_drained;
         slot->is_drained = TRUE;
 
         /* Custom EOS handling first */
-        if (s && gst_structure_has_field (s, "decodebin3-custom-eos")) {
+        if (gst_mini_object_get_qdata (GST_MINI_OBJECT_CAST (ev),
+                CUSTOM_EOS_QUARK)) {
+          /* remove custom-eos */
+          gst_mini_object_set_qdata (GST_MINI_OBJECT_CAST (ev),
+              CUSTOM_EOS_QUARK, NULL, NULL);
           GST_LOG_OBJECT (pad, "Received custom EOS");
           ret = GST_PAD_PROBE_HANDLED;
           SELECTION_LOCK (dbin);
@@ -1762,8 +1779,8 @@
 
           free_multiqueue_slot_async (dbin, slot);
           ret = GST_PAD_PROBE_REMOVE;
-        } else if (s
-            && gst_structure_has_field (s, "decodebin3-custom-final-eos")) {
+        } else if (gst_mini_object_get_qdata (GST_MINI_OBJECT_CAST (ev),
+                CUSTOM_FINAL_EOS_QUARK)) {
           GST_DEBUG_OBJECT (pad, "Got final eos, propagating downstream");
         } else {
           GST_DEBUG_OBJECT (pad, "Got regular eos (all_inputs_are_eos)");