mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
structure: API: Add gst_structure_fixate_field_string()
This commit is contained in:
parent
a2e1c0b994
commit
e35fe4ef9c
4 changed files with 60 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue