srt: Accepts URIs without host to go into listener mode
authorOlivier Crête <olivier.crete@collabora.com>
Tue, 22 Jan 2019 19:34:23 +0000 (14:34 -0500)
committerOlivier Crête <olivier.crete@ocrete.ca>
Wed, 23 Jan 2019 19:14:30 +0000 (19:14 +0000)
Just setting a URI without a hostname should directly go into listener mode.

ext/srt/gstsrtobject.c
ext/srt/gstsrtsink.c
ext/srt/gstsrtsrc.c

index 9b4483e..aa201ad 100644 (file)
@@ -440,8 +440,8 @@ gst_srt_object_install_properties_helper (GObjectClass * gobject_class)
 }
 
 static void
-gst_srt_object_set_enum_value (GstStructure * s, GType enum_type, gpointer key,
-    gpointer value)
+gst_srt_object_set_enum_value (GstStructure * s, GType enum_type,
+    gconstpointer key, gconstpointer value)
 {
   GEnumClass *enum_class;
   GEnumValue *enum_value;
@@ -517,6 +517,7 @@ gst_srt_object_set_uri (GstSRTObject * srtobject, const gchar * uri,
   GHashTable *query_table = NULL;
   GHashTableIter iter;
   gpointer key, value;
+  const char *addr_str;
 
   if (srtobject->opened) {
     g_warning
@@ -544,29 +545,34 @@ gst_srt_object_set_uri (GstSRTObject * srtobject, const gchar * uri,
       gst_uri_get_host (srtobject->uri), gst_uri_get_port (srtobject->uri),
       query_table == NULL ? 0 : g_hash_table_size (query_table));
 
-  if (!query_table) {
-    GST_DEBUG_OBJECT (srtobject->element, "No parameters from uri");
-    return TRUE;
-  }
-
-  g_hash_table_iter_init (&iter, query_table);
-  while (g_hash_table_iter_next (&iter, &key, &value)) {
-    if (!g_strcmp0 ("mode", key)) {
-      gst_srt_object_set_enum_value (srtobject->parameters,
-          GST_TYPE_SRT_CONNECTION_MODE, key, value);
-    } else if (!g_strcmp0 ("localaddress", key)) {
-      gst_srt_object_set_string_value (srtobject->parameters, key, value);
-    } else if (!g_strcmp0 ("localport", key)) {
-      gst_srt_object_set_uint_value (srtobject->parameters, key, value);
-    } else if (!g_strcmp0 ("passphrase", key)) {
-      gst_srt_object_set_string_value (srtobject->parameters, key, value);
-    } else if (!g_strcmp0 ("pbkeylen", key)) {
-      gst_srt_object_set_enum_value (srtobject->parameters,
-          GST_TYPE_SRT_KEY_LENGTH_BITS, key, value);
+  addr_str = gst_uri_get_host (srtobject->uri);
+  if (addr_str)
+    gst_srt_object_set_enum_value (srtobject->parameters,
+        GST_TYPE_SRT_CONNECTION_MODE, "mode", "caller");
+  else
+    gst_srt_object_set_enum_value (srtobject->parameters,
+        GST_TYPE_SRT_CONNECTION_MODE, "mode", "listener");
+
+  if (query_table) {
+    g_hash_table_iter_init (&iter, query_table);
+    while (g_hash_table_iter_next (&iter, &key, &value)) {
+      if (!g_strcmp0 ("mode", key)) {
+        gst_srt_object_set_enum_value (srtobject->parameters,
+            GST_TYPE_SRT_CONNECTION_MODE, key, value);
+      } else if (!g_strcmp0 ("localaddress", key)) {
+        gst_srt_object_set_string_value (srtobject->parameters, key, value);
+      } else if (!g_strcmp0 ("localport", key)) {
+        gst_srt_object_set_uint_value (srtobject->parameters, key, value);
+      } else if (!g_strcmp0 ("passphrase", key)) {
+        gst_srt_object_set_string_value (srtobject->parameters, key, value);
+      } else if (!g_strcmp0 ("pbkeylen", key)) {
+        gst_srt_object_set_enum_value (srtobject->parameters,
+            GST_TYPE_SRT_KEY_LENGTH_BITS, key, value);
+      }
     }
-  }
 
-  g_hash_table_unref (query_table);
+    g_hash_table_unref (query_table);
+  }
 
   gst_srt_object_validate_parameters (srtobject->parameters, srtobject->uri);
 
@@ -954,10 +960,10 @@ gst_srt_object_open_full (GstSRTObject * srtobject,
   addr_str = gst_uri_get_host (srtobject->uri);
 
   if (addr_str == NULL) {
-    addr_str = GST_SRT_DEFAULT_LOCALADDRESS;
-    GST_WARNING_OBJECT (srtobject->element,
-        "Given uri doesn't have hostname or address. Use default localaddress (%s)",
-        addr_str);
+    addr_str = "0.0.0.0";
+    GST_DEBUG_OBJECT (srtobject->element,
+        "Given uri doesn't have hostname or address. Use any (%s) and"
+        " setting listener mode", addr_str);
   }
 
   socket_address =
index 14a4452..074bd0f 100644 (file)
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch-1.0 -v audiotestsrc ! srtsink uri://host?mode=caller
+ * gst-launch-1.0 -v audiotestsrc ! srtsink uri=srt://host
  * ]| This pipeline shows how to serve SRT packets through the default port.
  *
  * |[
- * gst-launch-1.0 -v audiotestsrc ! srtsink uri://host:port?mode=listener
+ * gst-launch-1.0 -v audiotestsrc ! srtsink uri=srt://:port
  * ]| This pipeline shows how to wait SRT callers.
  * </refsect2>
  * 
index 3931bfc..cfaa7ba 100644 (file)
@@ -33,7 +33,7 @@
  * ]| This pipeline shows how to connect SRT server by setting #GstSRTSrc:uri property.
  *
  * |[
- * gst-launch-1.0 -v srtsrc uri="srt://127.0.0.1:7001?mode=listener" ! fakesink
+ * gst-launch-1.0 -v srtsrc uri="srt://:7001?mode=listener" ! fakesink
  * ]| This pipeline shows how to wait SRT connection by setting #GstSRTSrc:uri property.
  *
  * |[