structure: API: Add gst_structure_fixate_field_string()

This commit is contained in:
Sebastian Dröge 2010-05-22 10:01:44 +02:00
parent a2e1c0b994
commit e35fe4ef9c
4 changed files with 60 additions and 0 deletions

View file

@ -2085,6 +2085,7 @@ gst_structure_fixate_field_nearest_int
gst_structure_fixate_field_nearest_double
gst_structure_fixate_field_nearest_fraction
gst_structure_fixate_field_boolean
gst_structure_fixate_field_string
<SUBSECTION Standard>
GST_STRUCTURE
GST_IS_STRUCTURE

View file

@ -2344,6 +2344,61 @@ gst_structure_fixate_field_boolean (GstStructure * structure,
return FALSE;
}
/**
* gst_structure_fixate_field_string:
* @structure: a #GstStructure
* @field_name: a field in @structure
* @target: the target value of the fixation
*
* Fixates a #GstStructure by changing the given @field_name field to the given
* @target string if that field is not fixed yet.
*
* Returns: TRUE if the structure could be fixated
*
* Since: 0.10.30
*/
gboolean
gst_structure_fixate_field_string (GstStructure * structure,
const gchar * field_name, const gchar * target)
{
const GValue *value;
g_return_val_if_fail (gst_structure_has_field (structure, field_name), FALSE);
g_return_val_if_fail (IS_MUTABLE (structure), FALSE);
value = gst_structure_get_value (structure, field_name);
if (G_VALUE_TYPE (value) == G_TYPE_STRING) {
/* already fixed */
return FALSE;
} else if (G_VALUE_TYPE (value) == GST_TYPE_LIST) {
const GValue *list_value;
int i, n;
const gchar *best = NULL;
int best_index = -1;
n = gst_value_list_get_size (value);
for (i = 0; i < n; i++) {
list_value = gst_value_list_get_value (value, i);
if (G_VALUE_TYPE (list_value) == G_TYPE_STRING) {
const gchar *x = g_value_get_string (list_value);
if (best_index == -1 || g_str_equal (x, target)) {
best_index = i;
best = x;
}
}
}
if (best_index != -1) {
gst_structure_set (structure, field_name, G_TYPE_STRING, best, NULL);
return TRUE;
}
return FALSE;
}
return FALSE;
}
/**
* gst_structure_fixate_field_nearest_fraction:
* @structure: a #GstStructure

View file

@ -230,6 +230,9 @@ gboolean gst_structure_fixate_field_nearest_double (GstStructure
gboolean gst_structure_fixate_field_boolean (GstStructure *structure,
const char *field_name,
gboolean target);
gboolean gst_structure_fixate_field_string (GstStructure *structure,
const char *field_name,
const gchar *target);
gboolean gst_structure_fixate_field_nearest_fraction (GstStructure *structure,
const char *field_name,
const gint target_numerator,

View file

@ -884,6 +884,7 @@ EXPORTS
gst_structure_fixate_field_nearest_double
gst_structure_fixate_field_nearest_fraction
gst_structure_fixate_field_nearest_int
gst_structure_fixate_field_string
gst_structure_foreach
gst_structure_free
gst_structure_from_string