diff options
author | Thibault Saunier <tsaunier@gnome.org> | 2014-04-22 11:21:34 +0200 |
---|---|---|
committer | Thibault Saunier <tsaunier@gnome.org> | 2014-04-22 16:57:21 +0200 |
commit | 8527d91737adb076ca7d9297d1c2157757040285 (patch) | |
tree | 145b26bef26a3352a21d9f987e91f3a09461b158 | |
parent | 279625a541bb7c53df68eb9b7b5b535fbe6cddb7 (diff) |
validate: PAR is not a mandatory field
Also make it possible to check other not mandatory fields in the future
-rw-r--r-- | validate/gst/validate/gst-validate-pad-monitor.c | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/validate/gst/validate/gst-validate-pad-monitor.c b/validate/gst/validate/gst-validate-pad-monitor.c index f90ca54..4f5e6b8 100644 --- a/validate/gst/validate/gst-validate-pad-monitor.c +++ b/validate/gst/validate/gst-validate-pad-monitor.c @@ -165,8 +165,8 @@ _get_event_string (GstEvent *event) } static void -_check_field_type (GstValidatePadMonitor * monitor, GstStructure * structure, - const gchar * field, ...) +_check_field_type (GstValidatePadMonitor * monitor, + GstStructure * structure, gboolean mandatory, const gchar * field, ...) { va_list var_args; GType type; @@ -176,11 +176,16 @@ _check_field_type (GstValidatePadMonitor * monitor, GstStructure * structure, gchar *struct_str; if (!gst_structure_has_field (structure, field)) { - gchar *str = gst_structure_to_string (structure); + if (mandatory) { + gchar *str = gst_structure_to_string (structure); - GST_VALIDATE_REPORT (monitor, CAPS_IS_MISSING_FIELD, - "Field '%s' is missing from structure: %s", field, str); - g_free (str); + GST_VALIDATE_REPORT (monitor, CAPS_IS_MISSING_FIELD, + "Field '%s' is missing from structure: %s", field, str); + g_free (str); + } else { + GST_DEBUG_OBJECT (monitor, "Field %s is missing but is not mandatory", + field); + } return; } @@ -209,15 +214,15 @@ static void gst_validate_pad_monitor_check_raw_video_caps_complete (GstValidatePadMonitor * monitor, GstStructure * structure) { - _check_field_type (monitor, structure, "width", G_TYPE_INT, + _check_field_type (monitor, structure, TRUE, "width", G_TYPE_INT, GST_TYPE_INT_RANGE, 0); - _check_field_type (monitor, structure, "height", G_TYPE_INT, + _check_field_type (monitor, structure, TRUE, "height", G_TYPE_INT, GST_TYPE_INT_RANGE, 0); - _check_field_type (monitor, structure, "framerate", GST_TYPE_FRACTION, + _check_field_type (monitor, structure, TRUE, "framerate", GST_TYPE_FRACTION, GST_TYPE_FRACTION_RANGE, 0); - _check_field_type (monitor, structure, "pixel-aspect-ratio", + _check_field_type (monitor, structure, FALSE, "pixel-aspect-ratio", GST_TYPE_FRACTION, GST_TYPE_FRACTION_RANGE, 0); - _check_field_type (monitor, structure, "format", G_TYPE_STRING, + _check_field_type (monitor, structure, TRUE, "format", G_TYPE_STRING, GST_TYPE_LIST); } @@ -226,18 +231,18 @@ gst_validate_pad_monitor_check_raw_audio_caps_complete (GstValidatePadMonitor * monitor, GstStructure * structure) { gint channels; - _check_field_type (monitor, structure, "format", G_TYPE_STRING, GST_TYPE_LIST, - 0); - _check_field_type (monitor, structure, "layout", G_TYPE_STRING, GST_TYPE_LIST, - 0); - _check_field_type (monitor, structure, "rate", G_TYPE_INT, GST_TYPE_LIST, - GST_TYPE_INT_RANGE, 0); - _check_field_type (monitor, structure, "channels", G_TYPE_INT, GST_TYPE_LIST, - GST_TYPE_INT_RANGE, 0); + _check_field_type (monitor, structure, TRUE, "format", G_TYPE_STRING, + GST_TYPE_LIST, 0); + _check_field_type (monitor, structure, TRUE, "layout", G_TYPE_STRING, + GST_TYPE_LIST, 0); + _check_field_type (monitor, structure, TRUE, "rate", G_TYPE_INT, + GST_TYPE_LIST, GST_TYPE_INT_RANGE, 0); + _check_field_type (monitor, structure, TRUE, "channels", G_TYPE_INT, + GST_TYPE_LIST, GST_TYPE_INT_RANGE, 0); if (gst_structure_get_int (structure, "channels", &channels)) { if (channels > 2) - _check_field_type (monitor, structure, "channel-mask", GST_TYPE_BITMASK, - GST_TYPE_LIST, 0); + _check_field_type (monitor, structure, TRUE, "channel-mask", + GST_TYPE_BITMASK, GST_TYPE_LIST, 0); } } @@ -349,7 +354,7 @@ gst_validate_pad_monitor_pad_should_proxy_othercaps (GstValidatePadMonitor * */ static gboolean _structures_field_is_contained (GstStructure * s1, GstStructure * s2, - const gchar * f) + gboolean mandatory, const gchar * f) { const GValue *v1; const GValue *v2; @@ -360,7 +365,7 @@ _structures_field_is_contained (GstStructure * s1, GstStructure * s2, v1 = gst_structure_get_value (s1, f); if (!v1) - return FALSE; + return !mandatory; if (!gst_value_is_fixed (v1) && !gst_value_is_fixed (v2)) return TRUE; @@ -449,14 +454,14 @@ gst_validate_pad_monitor_check_caps_fields_proxied (GstValidatePadMonitor * structure = gst_caps_get_structure (caps, j); if (_structure_is_video (structure)) { type_match = TRUE; - if (_structures_field_is_contained (structure, otherstructure, + if (_structures_field_is_contained (structure, otherstructure, TRUE, "width") && _structures_field_is_contained (structure, otherstructure, - "height") + TRUE, "height") && _structures_field_is_contained (structure, otherstructure, - "framerate") + TRUE, "framerate") && _structures_field_is_contained (structure, otherstructure, - "pixel-aspect-ratio")) { + FALSE, "pixel-aspect-ratio")) { found = TRUE; break; } @@ -467,9 +472,10 @@ gst_validate_pad_monitor_check_caps_fields_proxied (GstValidatePadMonitor * structure = gst_caps_get_structure (caps, j); if (_structure_is_audio (structure)) { type_match = TRUE; - if (_structures_field_is_contained (structure, otherstructure, "rate") + if (_structures_field_is_contained (structure, otherstructure, TRUE, + "rate") && _structures_field_is_contained (structure, otherstructure, - "channels")) { + TRUE, "channels")) { found = TRUE; break; } |