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:40:06 +0200
commitef00cd12053558133921f99b8046952d81c30aff (patch)
tree59487b03df9ed49ef1558bcaeb4fb0b54dbfa3d9
parent90628f1f465f6a832c9dff78c96c884a93d45a78 (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.
-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 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));
+ }
}
}
}