]> git.pld-linux.org Git - packages/gstreamer.git/commitdiff
- add rpm provides output format to gst-inspect auto/th/gstreamer-0_10_21-3
authorPatryk Zawadzki <patrys@room-303.com>
Sun, 7 Dec 2008 14:37:29 +0000 (14:37 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
- patch from http://cvs.fedoraproject.org/viewvc/devel/gstreamer/gstreamer-inspect-rpm-format.patch

Changed files:
    gstreamer-inspect-rpm-format.patch -> 1.1
    gstreamer.spec -> 1.109

gstreamer-inspect-rpm-format.patch [new file with mode: 0644]
gstreamer.spec

diff --git a/gstreamer-inspect-rpm-format.patch b/gstreamer-inspect-rpm-format.patch
new file mode 100644 (file)
index 0000000..3a3567b
--- /dev/null
@@ -0,0 +1,339 @@
+diff -u -p -r1.142 tools/gst-inspect.c
+--- tools/gst-inspect.c        31 Jul 2008 15:20:31 -0000      1.142
++++ tools/gst-inspect.c        11 Sep 2008 23:47:16 -0000
+@@ -1188,9 +1188,219 @@ print_element_info (GstElementFactory * 
+   return 0;
+ }
++static void
++print_gst_structure_append_field (GList *strings, const char *field)
++{
++      GList *s;
++
++      //g_message ("adding '%s' to the string", field);
++
++      for (s = strings; s != NULL; s = s->next) {
++              g_string_append (s->data, field);
++      }
++}
++
++static void
++print_gst_structure_append_field_index (GList *strings, const char *field, guint num_items, guint offset)
++{
++      GList *s;
++      guint i;
++
++      //g_message ("adding '%s' to the string (num: %d offset: %d)", field, num_items, offset);
++
++      for (s = strings, i = 0; s != NULL; s = s->next, i++) {
++              if (i == offset) {
++                      //g_message ("adding '%s' at '%d'", field, i);
++                      g_string_append (s->data, field);
++              }
++              if (i == num_items)
++                      i = 0;
++      }
++
++}
++
++static GList *
++print_gst_structure_dup_fields (GList *strings, guint num_items)
++{
++      guint new_items, i;
++
++      if (num_items == 1)
++              return strings;
++
++      //g_message ("creating %d new items", num_items);
++
++      new_items = g_list_length (strings) * (num_items - 1);
++      for (i = 0; i < new_items; i++) {
++              GString *s, *first;
++
++              first = strings->data;
++              s = g_string_new_len (first->str, first->len);
++              strings = g_list_prepend (strings, s);
++      }
++
++      return strings;
++}
++
++enum {
++      FIELD_VERSION = 0,
++      FIELD_LAYER,
++      FIELD_VARIANT,
++      FIELD_SYSTEMSTREAM
++};
++
++static int
++field_get_type (const char *field_name)
++{
++      if (strstr (field_name, "version") != NULL)
++              return FIELD_VERSION;
++      if (strcmp (field_name, "layer") == 0)
++              return FIELD_LAYER;
++      if (strcmp (field_name, "systemstream") == 0)
++              return FIELD_SYSTEMSTREAM;
++      if (strcmp (field_name, "variant") == 0)
++              return FIELD_VARIANT;
++
++      return -1;
++}
++
++static gint
++fields_type_compare (const char *a, const char *b)
++{
++      gint a_type, b_type;
++
++      a_type = field_get_type (a);
++      b_type = field_get_type (b);
++      if (a_type < b_type)
++              return -1;
++      if (b_type < a_type)
++              return 1;
++      return 0;
++}
++
++static void
++print_gst_structure_for_rpm (const char *type_name, GstStructure *s)
++{
++  guint i, num_fields;
++  const char *name;
++  GList *fields, *l, *strings;
++  GString *string;
++
++  name = gst_structure_get_name (s);
++  strings = NULL;
++  num_fields = gst_structure_n_fields (s);
++  fields = NULL;
++
++  for (i = 0; i < num_fields; i++) {
++    const char *field_name;
++
++    field_name = gst_structure_nth_field_name (s, i);
++    if (field_get_type (field_name) < 0) {
++      //g_message ("ignoring field named %s", field_name);
++      continue;
++    }
++
++    fields = g_list_insert_sorted (fields, g_strdup (field_name), (GCompareFunc) fields_type_compare);
++  }
++
++  /* Example:
++   * gstreamer0.10(decoder-video/mpeg)(mpegversion=1)()(64bit) */
++  string = g_string_new ("gstreamer0.10");
++  g_string_append_c (string, '(');
++  g_string_append (string, type_name);
++  g_string_append_c (string, '-');
++  g_string_append (string, name);
++  g_string_append_c (string, ')');
++
++  strings = g_list_append (strings, string);
++
++  for (l = fields; l != NULL; l = l->next) {
++    char *field_name;
++    GType type;
++
++    field_name = l->data;
++
++    type = gst_structure_get_field_type (s, field_name);
++    //g_message ("field is: %s, type: %s", field_name, g_type_name (type));
++
++    if (type == G_TYPE_INT) {
++      char *field;
++      int value;
++
++      gst_structure_get_int (s, field_name, &value);
++      field = g_strdup_printf ("(%s=%d)", field_name, value);
++      print_gst_structure_append_field (strings, field);
++      g_free (field);
++    } else if (type == G_TYPE_BOOLEAN) {
++      char *field;
++      int value;
++
++      gst_structure_get_boolean (s, field_name, &value);
++      field = g_strdup_printf ("(%s=%s)", field_name, value ? "true" : "false");
++      print_gst_structure_append_field (strings, field);
++      g_free (field);
++    } else if (type == GST_TYPE_INT_RANGE) {
++      const GValue *value;
++      int min, max;
++
++      value = gst_structure_get_value (s, field_name);
++      min = gst_value_get_int_range_min (value);
++      max = gst_value_get_int_range_max (value);
++
++      strings = print_gst_structure_dup_fields (strings, max - min + 1);
++
++      for (i = min; i <= max; i++) {
++        char *field;
++
++        field = g_strdup_printf ("(%s=%d)", field_name, i);
++        print_gst_structure_append_field_index (strings, field, max - min + 1, i - min);
++        g_free (field);
++      }
++    } else if (type == GST_TYPE_LIST) {
++      const GValue *value;
++      int num_items;
++
++      value = gst_structure_get_value (s, field_name);
++      num_items = gst_value_list_get_size (value);
++
++      strings = print_gst_structure_dup_fields (strings, num_items);
++
++      for (i = 0; i < num_items; i++) {
++        char *field;
++        const GValue *item_value;
++
++      item_value = gst_value_list_get_value (value, i);
++        field = g_strdup_printf ("(%s=%d)", field_name,
++                               g_value_get_int (item_value));
++        print_gst_structure_append_field_index (strings, field, num_items, i);
++        g_free (field);
++      }
++    } else if (type == G_TYPE_STRING) {
++      char *field;
++      const char *value;
++
++      value = gst_structure_get_string (s, field_name);
++      field = g_strdup_printf ("(%s=%s)", field_name, value);
++      print_gst_structure_append_field (strings, field);
++      g_free (field);
++    } else {
++      g_warning ("unhandled type! %s", g_type_name (type));
++    }
++
++    g_free (field_name);
++  }
++
++  g_list_free (fields);
++
++  for (l = strings; l != NULL; l = l->next) {
++    string = l->data;
++    g_print ("%s\n", string->str);
++    g_string_free (string, TRUE);
++  }
++  g_list_free (strings);
++}
+ static void
+-print_plugin_automatic_install_info_codecs (GstElementFactory * factory)
++print_plugin_automatic_install_info_codecs (GstElementFactory * factory, gboolean rpm_format)
+ {
+   GstPadDirection direction;
+   const gchar *type_name;
+@@ -1251,15 +1461,19 @@ print_plugin_automatic_install_info_code
+     gst_structure_remove_field (s, "rate");
+     gst_structure_remove_field (s, "depth");
+     gst_structure_remove_field (s, "clock-rate");
+-    s_str = gst_structure_to_string (s);
+-    g_print ("%s-%s\n", type_name, s_str);
+-    g_free (s_str);
++    if (!rpm_format) {
++      s_str = gst_structure_to_string (s);
++      g_print ("%s-%s\n", type_name, s_str);
++      g_free (s_str);
++    } else {
++      print_gst_structure_for_rpm (type_name, s);
++    }
+   }
+   gst_caps_unref (caps);
+ }
+ static void
+-print_plugin_automatic_install_info_protocols (GstElementFactory * factory)
++print_plugin_automatic_install_info_protocols (GstElementFactory * factory, gboolean rpm_format)
+ {
+   gchar **protocols, **p;
+@@ -1268,11 +1482,17 @@ print_plugin_automatic_install_info_prot
+     switch (gst_element_factory_get_uri_type (factory)) {
+       case GST_URI_SINK:
+         for (p = protocols; *p != NULL; ++p)
+-          g_print ("urisink-%s\n", *p);
++          if (!rpm_format)
++            g_print ("urisink-%s\n", *p);
++          else
++            g_print ("gstreamer0.10(urisink-%s)\n", *p);
+         break;
+       case GST_URI_SRC:
+         for (p = protocols; *p != NULL; ++p)
+-          g_print ("urisource-%s\n", *p);
++          if (!rpm_format)
++            g_print ("urisource-%s\n", *p);
++          else
++            g_print ("gstreamer0.10(urisource-%s)\n", *p);
+         break;
+       default:
+         break;
+@@ -1282,7 +1502,7 @@ print_plugin_automatic_install_info_prot
+ }
+ static void
+-print_plugin_automatic_install_info (GstPlugin * plugin)
++print_plugin_automatic_install_info (GstPlugin * plugin, gboolean rpm_format)
+ {
+   const gchar *plugin_name;
+   GList *features, *l;
+@@ -1302,11 +1522,12 @@ print_plugin_automatic_install_info (Gst
+     if (g_str_equal (plugin_name, feature->plugin_name)) {
+       GstElementFactory *factory;
+-      g_print ("element-%s\n", gst_plugin_feature_get_name (feature));
++      if (!rpm_format)
++        g_print ("element-%s\n", gst_plugin_feature_get_name (feature));
+       factory = GST_ELEMENT_FACTORY (feature);
+-      print_plugin_automatic_install_info_protocols (factory);
+-      print_plugin_automatic_install_info_codecs (factory);
++      print_plugin_automatic_install_info_protocols (factory, rpm_format);
++      print_plugin_automatic_install_info_codecs (factory, rpm_format);
+     }
+   }
+@@ -1319,6 +1540,7 @@ main (int argc, char *argv[])
+ {
+   gboolean print_all = FALSE;
+   gboolean print_aii = FALSE;
++  gboolean print_aii_rpm = FALSE;
+   GOptionEntry options[] = {
+     {"print-all", 'a', 0, G_OPTION_ARG_NONE, &print_all,
+         N_("Print all elements"), NULL},
+@@ -1327,6 +1549,9 @@ main (int argc, char *argv[])
+               "provides.\n                                       "
+               "Useful in connection with external automatic plugin "
+               "installation mechanisms"), NULL},
++    {"rpm", '\0', 0, G_OPTION_ARG_NONE, &print_aii_rpm,
++       N_("Print the machine-parsable list of features of a plugin in RPM "
++                "Provides compatible-format"), NULL},
+     GST_TOOLS_GOPTION_VERSION,
+     {NULL}
+   };
+@@ -1384,7 +1609,7 @@ main (int argc, char *argv[])
+       /* if there is such a plugin, print out info */
+       if (plugin) {
+         if (print_aii) {
+-          print_plugin_automatic_install_info (plugin);
++          print_plugin_automatic_install_info (plugin, print_aii_rpm);
+         } else {
+           print_plugin_info (plugin);
+           print_plugin_features (plugin);
+@@ -1397,13 +1622,16 @@ main (int argc, char *argv[])
+           if (plugin) {
+             if (print_aii) {
+-              print_plugin_automatic_install_info (plugin);
++              print_plugin_automatic_install_info (plugin, print_aii_rpm);
+             } else {
+               print_plugin_info (plugin);
+               print_plugin_features (plugin);
+             }
+           } else {
+-            g_print (_("Could not load plugin file: %s\n"), error->message);
++            if (!print_aii_rpm)
++              g_print (_("Could not load plugin file: %s\n"), error->message);
++          else
++              g_printerr (_("Could not load plugin file: %s\n"), error->message);
+             g_error_free (error);
+             return -1;
+           }
index f7eed140ff5f5054a4fde93f06d2d4ad863a2459..76292a9870901fa3f86141c2f794d01ef8c084ba 100644 (file)
@@ -2,13 +2,14 @@ Summary:      GStreamer Streaming-media framework runtime
 Summary(pl.UTF-8):     GStreamer - biblioteki środowiska do obróbki strumieni
 Name:          gstreamer
 Version:       0.10.21
-Release:       2
+Release:       3
 License:       LGPL v2+
 Group:         Libraries
 Source0:       http://gstreamer.freedesktop.org/src/gstreamer/%{name}-%{version}.tar.bz2
 # Source0-md5: 7bad90af3fd81a1535363cf85359125c
 Patch0:                %{name}-without_ps_pdf.patch
 Patch1:                %{name}-eps.patch
+Patch2:                %{name}-inspect-rpm-format.patch
 URL:           http://gstreamer.net/
 BuildRequires: autoconf >= 2.52
 BuildRequires: automake >= 1.6
@@ -97,6 +98,7 @@ Dokumentacja API Gstreamera.
 %setup -q
 %patch0 -p1
 %patch1 -p1
+%patch2 -p0
 
 %build
 # po/Makefile.in.in is modified
This page took 0.050281 seconds and 4 git commands to generate.