playbin3: Propagate sink context
authorPhilippe Normand <philn@igalia.com>
Sun, 11 Aug 2019 10:25:50 +0000 (11:25 +0100)
committerSebastian Dröge <slomo@coaxion.net>
Tue, 31 Dec 2019 10:00:20 +0000 (10:00 +0000)
When the playsink's sink is activated its state is set to READY but it remains
unlinked. So, in order for decodebin3 to potentially reuse the context later on,
the whole playbin3 needs to have it internally stored.

gst/playback/gstplaybin3.c

index 12eaf72..f269fb5 100644 (file)
@@ -3691,6 +3691,13 @@ activate_sink_bus_handler (GstBus * bus, GstMessage * msg,
       gst_element_post_message (GST_ELEMENT_CAST (playbin), msg);
     else
       gst_message_unref (msg);
+  } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_HAVE_CONTEXT) {
+    GstContext *context;
+
+    gst_message_parse_have_context (msg, &context);
+    gst_element_set_context (GST_ELEMENT_CAST (playbin), context);
+    gst_context_unref (context);
+    gst_element_post_message (GST_ELEMENT_CAST (playbin), msg);
   } else {
     gst_element_post_message (GST_ELEMENT_CAST (playbin), msg);
   }