/** * 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, µ, &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, µ) == 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; }
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"); }