ges-launch: Use standard GstEncodingProfile deserialization function
authorThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 23 Dec 2016 18:08:06 +0000 (15:08 -0300)
committerThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 23 Dec 2016 18:08:06 +0000 (15:08 -0300)
tools/utils.c

index 0a95082..23d7e42 100644 (file)
@@ -113,129 +113,21 @@ ensure_uri (const gchar * location)
 GstEncodingProfile *
 parse_encoding_profile (const gchar * format)
 {
-  GstCaps *caps;
-  GstEncodingProfile *encoding_profile = NULL;
-  gchar **restriction_format, **preset_v;
-
-  guint i = 1, presence = 0;
-  GstCaps *restrictioncaps = NULL;
-  gchar **strpresence_v, **strcaps_v = g_strsplit (format, ":", 0);
-
-  if (strcaps_v[0] && *strcaps_v[0]) {
-    if (strcaps_v[1] == NULL) {
-      /* Only 1 profile which means no container used */
-      i = 0;
-    } else {
-      caps = gst_caps_from_string (strcaps_v[0]);
-      if (caps == NULL) {
-        g_printerr ("Could not parse caps %s", strcaps_v[0]);
-        return FALSE;
-      }
-      encoding_profile =
-          GST_ENCODING_PROFILE (gst_encoding_container_profile_new
-          ("User profile", "User profile", caps, NULL));
-      gst_caps_unref (caps);
-    }
-  }
-
-  for (; strcaps_v[i]; i++) {
-    gchar *strcaps, *strpresence;
-    char *preset_name = NULL;
-    GstEncodingProfile *profile = NULL;
-
-    restriction_format = g_strsplit (strcaps_v[i], "->", 0);
-    if (restriction_format[1]) {
-      restrictioncaps = gst_caps_from_string (restriction_format[0]);
-      strcaps = g_strdup (restriction_format[1]);
-    } else {
-      restrictioncaps = NULL;
-      strcaps = g_strdup (restriction_format[0]);
-    }
-    g_strfreev (restriction_format);
-
-    preset_v = g_strsplit (strcaps, "+", 0);
-    if (preset_v[1]) {
-      strpresence = preset_v[1];
-      g_free (strcaps);
-      strcaps = g_strdup (preset_v[0]);
-    } else {
-      strpresence = preset_v[0];
-    }
-
-    strpresence_v = g_strsplit (strpresence, "|", 0);
-    if (strpresence_v[1]) {     /* We have a presence */
-      gchar *endptr;
-
-      if (preset_v[1]) {        /* We have preset and presence */
-        preset_name = g_strdup (strpresence_v[0]);
-      } else {                  /* We have a presence but no preset */
-        g_free (strcaps);
-        strcaps = g_strdup (strpresence_v[0]);
-      }
-
-      presence = strtoll (strpresence_v[1], &endptr, 10);
-      if (endptr == strpresence_v[1]) {
-        g_printerr ("Wrong presence %s\n", strpresence_v[1]);
-
-        return FALSE;
-      }
-    } else {                    /* We have no presence */
-      if (preset_v[1]) {        /* Not presence but preset */
-        preset_name = g_strdup (preset_v[1]);
-        g_free (strcaps);
-        strcaps = g_strdup (preset_v[0]);
-      }                         /* Else we have no presence nor preset */
-    }
-    g_strfreev (strpresence_v);
-    g_strfreev (preset_v);
-
-    GST_DEBUG ("Creating preset with restrictions: %" GST_PTR_FORMAT
-        ", caps: %s, preset %s, presence %d", restrictioncaps, strcaps,
-        preset_name ? preset_name : "none", presence);
-
-    caps = gst_caps_from_string (strcaps);
-    g_free (strcaps);
-    if (caps == NULL) {
-      g_warning ("Could not create caps for %s", strcaps_v[i]);
+  GstEncodingProfile *profile;
+  GValue value = G_VALUE_INIT;
 
-      return FALSE;
-    }
-
-    if (g_str_has_prefix (strcaps_v[i], "audio/")) {
-      profile = GST_ENCODING_PROFILE (gst_encoding_audio_profile_new (caps,
-              preset_name, restrictioncaps, presence));
-    } else if (g_str_has_prefix (strcaps_v[i], "video/") ||
-        g_str_has_prefix (strcaps_v[i], "image/")) {
-      profile = GST_ENCODING_PROFILE (gst_encoding_video_profile_new (caps,
-              preset_name, restrictioncaps, presence));
-    }
+  g_value_init (&value, GST_TYPE_ENCODING_PROFILE);
 
-    g_free (preset_name);
-    gst_caps_unref (caps);
-    if (restrictioncaps)
-      gst_caps_unref (restrictioncaps);
+  if (!gst_value_deserialize (&value, format)) {
+    g_value_reset (&value);
 
-    if (profile == NULL) {
-      g_warning ("No way to create a preset for caps: %s", strcaps_v[i]);
-
-      return NULL;
-    }
-
-    if (encoding_profile) {
-      if (gst_encoding_container_profile_add_profile
-          (GST_ENCODING_CONTAINER_PROFILE (encoding_profile),
-              profile) == FALSE) {
-        g_warning ("Can not create a preset for caps: %s", strcaps_v[i]);
-
-        return NULL;
-      }
-    } else {
-      encoding_profile = profile;
-    }
+    return NULL;
   }
-  g_strfreev (strcaps_v);
 
-  return encoding_profile;
+  profile = g_value_dup_object (&value);
+  g_value_reset (&value);
+
+  return profile;
 }
 
 void