ms_debug("<===== end of the callback");
}
+static void __decodebin_element_added_cb(GstElement *decodebin, GstElement *element, gpointer user_data)
+{
+ const gchar *klass = NULL;
+ gchar *factory_name = NULL;
+ gboolean wait_for_keyframe = DEFAULT_WAIT_FOR_KEYFRAME;
+
+ ms_retm_if(decodebin == NULL, "decodebin is NULL");
+ ms_retm_if(element == NULL, "element is NULL");
+
+ klass = gst_element_factory_get_metadata(gst_element_get_factory(element), GST_ELEMENT_METADATA_KLASS);
+ factory_name = GST_OBJECT_NAME(gst_element_get_factory(element));
+
+ ms_debug("klass: %s, factory_name: %s, element name : %s", klass, factory_name, GST_ELEMENT_NAME(element));
+
+ if (g_strrstr(klass, "Codec/Depayloader/Network/RTP") && g_strrstr(factory_name, "rtpvp8depay")) {
+ wait_for_keyframe = ms_ini_get_boolean("general:wait for keyframe", DEFAULT_WAIT_FOR_KEYFRAME);
+ ms_debug("set wait-for-keyframe[%s] to rtpvp8depay", (wait_for_keyframe) ? "TRUE" : "FALSE");
+ g_object_set(G_OBJECT(element), "wait-for-keyframe", wait_for_keyframe, NULL);
+ }
+}
+
static void __decodebin_pad_added_cb(GstElement *decodebin, GstPad *new_pad, gpointer user_data)
{
media_streamer_node_s *webrtc_node = (media_streamer_node_s *)user_data;
g_signal_connect(decodebin, "pad-added", G_CALLBACK(__decodebin_pad_added_cb), webrtc_node);
g_signal_connect(decodebin, "autoplug-select", G_CALLBACK(ms_decodebin_autoplug_select_cb), webrtc_node->parent_streamer);
+ g_signal_connect(decodebin, "element-added", G_CALLBACK(__decodebin_element_added_cb), NULL);
sink_pad = gst_element_get_static_pad(decodebin, "sink");
ms_retm_if(sink_pad == NULL, "sink_pad is NULL");