/** * gst_caps_features_is_equal: * @features1: a #GstCapsFeatures. * @features2: a #GstCapsFeatures. * * Check if @features1 and @features2 are equal. * * Returns: %TRUE if @features1 and @features2 are equal. * * Since: 1.2 */ gboolean gst_caps_features_is_equal (const GstCapsFeatures * features1, const GstCapsFeatures * features2) { guint i, n; g_return_val_if_fail (features1 != NULL, FALSE); g_return_val_if_fail (features2 != NULL, FALSE); if (features1->is_any || features2->is_any) return TRUE; /* Check for the sysmem==empty case */ if (features1->array->len == 0 && features2->array->len == 0) return TRUE; if (features1->array->len == 0 && features2->array->len == 1 && gst_caps_features_contains_id (features2, _gst_caps_feature_memory_system_memory)) return TRUE; if (features2->array->len == 0 && features1->array->len == 1 && gst_caps_features_contains_id (features1, _gst_caps_feature_memory_system_memory)) return TRUE; if (features1->array->len != features2->array->len) return FALSE; n = features1->array->len; for (i = 0; i < n; i++) if (!gst_caps_features_contains_id (features2, gst_caps_features_get_nth_id (features1, i))) return FALSE; return TRUE; }
static GstCaps * gst_gl_mixer_set_caps_features (const GstCaps * caps, const gchar * feature_name) { GstCaps *tmp = gst_caps_copy (caps); guint n = gst_caps_get_size (tmp); guint i = 0; for (i = 0; i < n; i++) { GstCapsFeatures *features = gst_caps_get_features (tmp, i); if (features) { guint n_f = gst_caps_features_get_size (features); guint j = 0; for (j = 0; j < n_f; j++) { gst_caps_features_remove_id (features, gst_caps_features_get_nth_id (features, j)); } } gst_caps_features_add (features, feature_name); gst_caps_set_simple (tmp, "format", G_TYPE_STRING, "RGBA", NULL); } return tmp; }
/** * gst_caps_features_get_nth: * @features: a #GstCapsFeatures. * @i: index of the feature * * Returns the @i-th feature of @features. * * Returns: The @i-th feature of @features. * * Since: 1.2 */ const gchar * gst_caps_features_get_nth (const GstCapsFeatures * features, guint i) { const gchar *feature; GQuark quark; g_return_val_if_fail (features != NULL, NULL); quark = gst_caps_features_get_nth_id (features, i); if (!quark) return NULL; feature = g_quark_to_string (quark); return feature; }
/** * gst_caps_features_copy: * @features: a #GstCapsFeatures to duplicate * * Duplicates a #GstCapsFeatures and all its values. * * Free-function: gst_caps_features_free * * Returns: (transfer full): a new #GstCapsFeatures. * * Since: 1.2 */ GstCapsFeatures * gst_caps_features_copy (const GstCapsFeatures * features) { GstCapsFeatures *copy; guint i, n; g_return_val_if_fail (features != NULL, NULL); copy = gst_caps_features_new_empty (); n = gst_caps_features_get_size (features); for (i = 0; i < n; i++) gst_caps_features_add_id (copy, gst_caps_features_get_nth_id (features, i)); copy->is_any = features->is_any; return copy; }
/** * gst_caps_features_remove_id: * @features: a #GstCapsFeatures. * @feature: a feature. * * Removes @feature from @features. * * Since: 1.2 */ void gst_caps_features_remove_id (GstCapsFeatures * features, GQuark feature) { guint i, n; g_return_if_fail (features != NULL); g_return_if_fail (IS_MUTABLE (features)); g_return_if_fail (feature != 0); n = features->array->len; for (i = 0; i < n; i++) { GQuark quark = gst_caps_features_get_nth_id (features, i); if (quark == feature) { g_array_remove_index_fast (features->array, i); return; } } }
/** * gst_caps_features_contains_id: * @features: a #GstCapsFeatures. * @feature: a feature * * Check if @features contains @feature. * * Returns: %TRUE if @features contains @feature. * * Since: 1.2 */ gboolean gst_caps_features_contains_id (const GstCapsFeatures * features, GQuark feature) { guint i, n; g_return_val_if_fail (features != NULL, FALSE); g_return_val_if_fail (feature != 0, FALSE); if (features->is_any) return TRUE; n = features->array->len; if (n == 0) return feature == _gst_caps_feature_memory_system_memory; for (i = 0; i < n; i++) { if (gst_caps_features_get_nth_id (features, i) == feature) return TRUE; } return FALSE; }
GstCaps * gst_gl_caps_replace_all_caps_features (const GstCaps * caps, const gchar * feature_name) { GstCaps *tmp = gst_caps_copy (caps); guint n = gst_caps_get_size (tmp); guint i = 0; for (i = 0; i < n; i++) { GstCapsFeatures *features = gst_caps_get_features (tmp, i); if (features) { guint n_f = gst_caps_features_get_size (features); guint j = 0; for (j = 0; j < n_f; j++) { gst_caps_features_remove_id (features, gst_caps_features_get_nth_id (features, j)); } } gst_caps_features_add (features, feature_name); } return tmp; }