summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2014-09-15 18:11:37 +0200
committerWim Taymans <wtaymans@redhat.com>2014-09-15 18:33:34 +0200
commitbfeaaa4b577b86c1d98432c640db31e02a9b3ee7 (patch)
treeabf5bd6273e0a93a3e6d70d1c8ae366e4b4af349
parent643d425f51f81b56deec16c01162637546708ee5 (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.c38
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));
+ }
}
}
}