Exemple #1
0
/**
 * gst_plugin_feature_check_version:
 * @feature: a feature
 * @min_major: minimum required major version
 * @min_minor: minimum required minor version
 * @min_micro: minimum required micro version
 *
 * Checks whether the given plugin feature is at least
 *  the required version
 *
 * Returns: #TRUE if the plugin feature has at least
 *  the required version, otherwise #FALSE.
 */
gboolean
gst_plugin_feature_check_version (GstPluginFeature * feature,
    guint min_major, guint min_minor, guint min_micro)
{
  GstRegistry *registry;
  GstPlugin *plugin;
  gboolean ret = FALSE;

  g_return_val_if_fail (feature != NULL, FALSE);
  g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), FALSE);

  GST_DEBUG ("Looking up plugin '%s' containing plugin feature '%s'",
      feature->plugin_name, GST_OBJECT_NAME (feature));

  registry = gst_registry_get ();
  plugin = gst_registry_find_plugin (registry, feature->plugin_name);

  if (plugin) {
    const gchar *ver_str;
    guint major, minor, micro, nano;
    gint nscan;

    ver_str = gst_plugin_get_version (plugin);
    g_return_val_if_fail (ver_str != NULL, FALSE);

    nscan = sscanf (ver_str, "%u.%u.%u.%u", &major, &minor, &micro, &nano);
    GST_DEBUG ("version string '%s' parsed to %d values", ver_str, nscan);

    if (nscan >= 3) {
      if (major > min_major)
        ret = TRUE;
      else if (major < min_major)
        ret = FALSE;
      else if (minor > min_minor)
        ret = TRUE;
      else if (minor < min_minor)
        ret = FALSE;
      else if (micro > min_micro)
        ret = TRUE;
      /* micro is 1 smaller but we have a nano version, this is the upcoming
       * release of the requested version and we're ok then */
      else if (nscan == 4 && nano > 0 && (micro + 1 == min_micro))
        ret = TRUE;
      else
        ret = (micro == min_micro);

      GST_DEBUG ("Checking whether %u.%u.%u >= %u.%u.%u? %s", major, minor,
          micro, min_major, min_minor, min_micro, (ret) ? "yes" : "no");
    } else {
      GST_WARNING ("Could not parse version string '%s' of plugin '%s'",
          ver_str, feature->plugin_name);
    }

    gst_object_unref (plugin);
  } else {
    GST_DEBUG ("Could not find plugin '%s'", feature->plugin_name);
  }

  return ret;
}
EXPORT_C
#endif

gboolean
gst_plugin_feature_check_version (GstPluginFeature * feature,
                                  guint min_major, guint min_minor, guint min_micro)
{
    GstRegistry *registry;
    GstPlugin *plugin;
    gboolean ret = FALSE;

    g_return_val_if_fail (feature != NULL, FALSE);
    g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), FALSE);

    GST_DEBUG ("Looking up plugin '%s' containing plugin feature '%s'",
               feature->plugin_name, feature->name);

    registry = gst_registry_get_default ();
    plugin = gst_registry_find_plugin (registry, feature->plugin_name);

    if (plugin) {
        const gchar *ver_str;
        guint major, minor, micro;

        ver_str = gst_plugin_get_version (plugin);
        g_return_val_if_fail (ver_str != NULL, FALSE);

        if (sscanf (ver_str, "%u.%u.%u", &major, &minor, &micro) == 3) {
            if (major > min_major)
                ret = TRUE;
            else if (major < min_major)
                ret = FALSE;
            else if (minor > min_minor)
                ret = TRUE;
            else if (minor < min_minor)
                ret = FALSE;
            else if (micro > min_micro)
                ret = TRUE;
            else
                ret = (micro == min_micro);

            GST_DEBUG ("Checking whether %u.%u.%u >= %u.%u.%u? %s", major, minor,
                       micro, min_major, min_minor, min_micro, (ret) ? "yes" : "no");
        } else {
            GST_WARNING ("Could not parse version string '%s' of plugin '%s'",
                         ver_str, feature->plugin_name);
        }

        gst_object_unref (plugin);
    } else {
        GST_DEBUG ("Could not find plugin '%s'", feature->plugin_name);
    }

    return ret;
}
Exemple #3
0
static void
print_plugin_info (GstPlugin * plugin)
{
  const gchar *release_date = gst_plugin_get_release_date_string (plugin);
  const gchar *filename = gst_plugin_get_filename (plugin);

  n_print ("Plugin Details:\n");
  n_print ("  %-25s%s\n", "Name", gst_plugin_get_name (plugin));
  n_print ("  %-25s%s\n", "Description", gst_plugin_get_description (plugin));
  n_print ("  %-25s%s\n", "Filename", (filename != NULL) ? filename : "(null)");
  n_print ("  %-25s%s\n", "Version", gst_plugin_get_version (plugin));
  n_print ("  %-25s%s\n", "License", gst_plugin_get_license (plugin));
  n_print ("  %-25s%s\n", "Source module", gst_plugin_get_source (plugin));

  if (release_date != NULL) {
    const gchar *tz = "(UTC)";
    gchar *str, *sep;

    /* may be: YYYY-MM-DD or YYYY-MM-DDTHH:MMZ */
    /* YYYY-MM-DDTHH:MMZ => YYYY-MM-DD HH:MM (UTC) */
    str = g_strdup (release_date);
    sep = strstr (str, "T");
    if (sep != NULL) {
      *sep = ' ';
      sep = strstr (sep + 1, "Z");
      if (sep != NULL)
        *sep = ' ';
    } else {
      tz = "";
    }
    n_print ("  %-25s%s%s\n", "Source release date", str, tz);
    g_free (str);
  }
  n_print ("  %-25s%s\n", "Binary package", gst_plugin_get_package (plugin));
  n_print ("  %-25s%s\n", "Origin URL", gst_plugin_get_origin (plugin));
  n_print ("\n");
}