diff options
author | Wim Taymans <wtaymans@redhat.com> | 2014-09-15 18:11:37 +0200 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2014-09-15 18:40:06 +0200 |
commit | ef00cd12053558133921f99b8046952d81c30aff (patch) | |
tree | 59487b03df9ed49ef1558bcaeb4fb0b54dbfa3d9 /gst | |
parent | 90628f1f465f6a832c9dff78c96c884a93d45a78 (diff) |
capssetter: update to 1.0 transform_caps sematics
In 1.0, we pass the complete caps to transform_caps to allow for better
optimizations. Make this function actually work on non-simple caps
instead of just ignoring the configured filter caps.
Diffstat (limited to 'gst')
-rw-r--r-- | gst/debugutils/gstcapssetter.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/gst/debugutils/gstcapssetter.c b/gst/debugutils/gstcapssetter.c index e6573bb42..187adb73d 100644 --- a/gst/debugutils/gstcapssetter.c +++ b/gst/debugutils/gstcapssetter.c @@ -185,7 +185,7 @@ gst_caps_setter_transform_caps (GstBaseTransform * trans, GstCaps *ret = NULL, *filter_caps = NULL; GstStructure *structure, *merge; const gchar *name; - gint i, j; + gint i, j, k; GST_DEBUG_OBJECT (trans, "receiving caps: %" GST_PTR_FORMAT ", with filter: %" GST_PTR_FORMAT, @@ -202,33 +202,31 @@ gst_caps_setter_transform_caps (GstBaseTransform * trans, ret = gst_caps_copy (caps); - /* this function is always called with a simple caps */ - if (!GST_CAPS_IS_SIMPLE (ret)) - return ret; - - structure = gst_caps_get_structure (ret, 0); - name = gst_structure_get_name (structure); - GST_OBJECT_LOCK (filter); filter_caps = gst_caps_ref (filter->caps); GST_OBJECT_UNLOCK (filter); - for (i = 0; i < gst_caps_get_size (filter_caps); ++i) { - merge = gst_caps_get_structure (filter_caps, i); - if (gst_structure_has_name (merge, name) || !filter->join) { + for (k = 0; k < gst_caps_get_size (ret); k++) { + structure = gst_caps_get_structure (ret, k); + name = gst_structure_get_name (structure); - if (!filter->join) - gst_structure_set_name (structure, gst_structure_get_name (merge)); + for (i = 0; i < gst_caps_get_size (filter_caps); ++i) { + merge = gst_caps_get_structure (filter_caps, i); + if (gst_structure_has_name (merge, name) || !filter->join) { - if (filter->replace) - gst_structure_remove_all_fields (structure); + if (!filter->join) + gst_structure_set_name (structure, gst_structure_get_name (merge)); - for (j = 0; j < gst_structure_n_fields (merge); ++j) { - const gchar *fname; + if (filter->replace) + gst_structure_remove_all_fields (structure); - fname = gst_structure_nth_field_name (merge, j); - gst_structure_set_value (structure, fname, - gst_structure_get_value (merge, fname)); + for (j = 0; j < gst_structure_n_fields (merge); ++j) { + const gchar *fname; + + fname = gst_structure_nth_field_name (merge, j); + gst_structure_set_value (structure, fname, + gst_structure_get_value (merge, fname)); + } } } } |