+ if (G_VALUE_HOLDS_STRING (val)) {
+ const gchar *ext_uri = g_value_get_string (val);
+
+ if (g_strcmp0 (ext_uri, gst_rtp_header_extension_get_uri (ext)) != 0) {
+ /* incompatible extension uri for this instance */
+ goto error;
+ }
+ } else if (GST_VALUE_HOLDS_ARRAY (val)
+ && gst_value_array_get_size (val) == 3) {
+ const GValue *inner_val;
+
+ inner_val = gst_value_array_get_value (val, 1);
+ if (!G_VALUE_HOLDS_STRING (inner_val))
+ goto error;
+ if (g_strcmp0 (g_value_get_string (inner_val),
+ gst_rtp_header_extension_get_uri (ext)) != 0)
+ goto error;
+
+ inner_val = gst_value_array_get_value (val, 2);
+ if (!G_VALUE_HOLDS_STRING (inner_val))
+ goto error;
+ } else {
+ /* unknown caps format */
+ goto error;
+ }
+
+ if (klass->set_attributes_from_caps)
+ return klass->set_attributes_from_caps (ext, caps);
+ else
+ return TRUE;
+
+error:
+ return FALSE;