Ejemplo n.º 1
0
/**
 * gst_plugin_feature_get_rank:
 * @feature: a feature
 *
 * Gets the rank of a plugin feature.
 *
 * Returns: The rank of the feature
 */
guint
gst_plugin_feature_get_rank (GstPluginFeature * feature)
{
  g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), GST_RANK_NONE);

  return feature->rank;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
0
/**
 * gst_plugin_feature_get_name:
 * @feature: a feature
 *
 * Gets the name of a plugin feature.
 *
 * Returns: the name
 */
G_CONST_RETURN gchar *
gst_plugin_feature_get_name (GstPluginFeature * feature)
{
  g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), NULL);

  return feature->name;
}
Ejemplo n.º 4
0
/**
 * gst_plugin_feature_set_rank:
 * @feature: feature to rank
 * @rank: rank value - higher number means more priority rank
 *
 * Specifies a rank for a plugin feature, so that autoplugging uses
 * the most appropriate feature.
 */
void
gst_plugin_feature_set_rank (GstPluginFeature * feature, guint rank)
{
  g_return_if_fail (feature != NULL);
  g_return_if_fail (GST_IS_PLUGIN_FEATURE (feature));

  feature->rank = rank;
}
Ejemplo n.º 5
0
/**
 * gst_plugin_feature_get_plugin_name:
 * @feature: a feature
 *
 * Get the name of the plugin that provides this feature.
 *
 * Returns: the name of the plugin that provides this feature, or %NULL if
 *     the feature is not associated with a plugin.
 *
 * Since: 1.2.0
 */
const gchar *
gst_plugin_feature_get_plugin_name (GstPluginFeature * feature)
{
  g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), NULL);

  if (feature->plugin == NULL)
    return NULL;

  return gst_plugin_get_name (feature->plugin);
}
Ejemplo n.º 6
0
/**
 * gst_plugin_feature_get_plugin:
 * @feature: a feature
 *
 * Get the plugin that provides this feature.
 *
 * Returns: (transfer full): the plugin that provides this feature, or %NULL.
 *     Unref with gst_object_unref() when no longer needed.
 */
GstPlugin *
gst_plugin_feature_get_plugin (GstPluginFeature * feature)
{
  g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), NULL);

  if (feature->plugin == NULL)
    return NULL;

  return (GstPlugin *) gst_object_ref (feature->plugin);
}
Ejemplo n.º 7
0
EXPORT_C
#endif
GstPluginFeature *
gst_plugin_feature_load (GstPluginFeature * feature)
{
    GstPlugin *plugin;
    GstPluginFeature *real_feature;

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

    GST_DEBUG ("loading plugin for feature %p; '%s'", feature,
               GST_PLUGIN_FEATURE_NAME (feature));
    if (feature->loaded)
        return gst_object_ref (feature);

    GST_DEBUG ("loading plugin %s", feature->plugin_name);
    plugin = gst_plugin_load_by_name (feature->plugin_name);
    if (!plugin)
        goto load_failed;

    GST_DEBUG ("loaded plugin %s", feature->plugin_name);
    gst_object_unref (plugin);

    real_feature =
        gst_registry_lookup_feature (gst_registry_get_default (), feature->name);

    if (real_feature == NULL)
        goto disappeared;
    else if (!real_feature->loaded)
        goto not_found;

    return real_feature;

    /* ERRORS */
load_failed:
    {
        GST_WARNING ("Failed to load plugin containing feature '%s'.",
                     GST_PLUGIN_FEATURE_NAME (feature));
        return NULL;
    }
disappeared:
    {
        GST_INFO
        ("Loaded plugin containing feature '%s', but feature disappeared.",
         feature->name);
        return NULL;
    }
not_found:
    {
        GST_INFO ("Tried to load plugin containing feature '%s', but feature was "
                  "not found.", real_feature->name);
        return NULL;
    }
}
Ejemplo n.º 8
0
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;
}
Ejemplo n.º 9
0
/**
 * gst_plugin_feature_set_name:
 * @feature: a feature
 * @name: the name to set
 *
 * Sets the name of a plugin feature. The name uniquely identifies a feature
 * within all features of the same type. Renaming a plugin feature is not
 * allowed. A copy is made of the name so you should free the supplied @name
 * after calling this function.
 */
void
gst_plugin_feature_set_name (GstPluginFeature * feature, const gchar * name)
{
  g_return_if_fail (GST_IS_PLUGIN_FEATURE (feature));
  g_return_if_fail (name != NULL);

  if (feature->name) {
    g_return_if_fail (strcmp (feature->name, name) == 0);
  } else {
    feature->name = g_strdup (name);
  }
  gst_object_set_name (GST_OBJECT (feature), feature->name);
}