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:33:34 +0200 |
commit | bfeaaa4b577b86c1d98432c640db31e02a9b3ee7 (patch) | |
tree | abf5bd6273e0a93a3e6d70d1c8ae366e4b4af349 | |
parent | 643d425f51f81b56deec16c01162637546708ee5 (diff) |
capssetter: update to 1.0 transform_caps sematics1.0
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.
-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 dcfabe2bb..c970f6950 100644 --- a/gst/debugutils/gstcapssetter.c +++ b/gst/debugutils/gstcapssetter.c @@ -195,7 +195,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, @@ -212,33 +212,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)); + } } } } |