[gst-cvs] gstreamer: basetransform: use new _caps_can_intersect()
Stefan Kost
ensonic at kemper.freedesktop.org
Thu Aug 6 05:40:05 PDT 2009
Module: gstreamer
Branch: master
Commit: 04470fc794e738d45b4218f653bf81831b467bde
URL: http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=04470fc794e738d45b4218f653bf81831b467bde
Author: Stefan Kost <ensonic at users.sf.net>
Date: Wed Jul 22 09:54:55 2009 +0300
basetransform: use new _caps_can_intersect()
---
libs/gst/base/gstbasetransform.c | 71 +++++++++++++------------------------
1 files changed, 25 insertions(+), 46 deletions(-)
diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c
index 4a46041..179c103 100644
--- a/libs/gst/base/gstbasetransform.c
+++ b/libs/gst/base/gstbasetransform.c
@@ -719,7 +719,7 @@ gst_base_transform_can_transform (GstBaseTransform * trans, GstPad * pad,
goto no_transform;
/* check if the out caps is a subset of the othercaps */
- if (!gst_caps_is_subset (out, othercaps))
+ if (!gst_caps_can_intersect (out, othercaps))
goto no_subset;
if (othercaps)
@@ -814,43 +814,36 @@ gst_base_transform_find_transform (GstBaseTransform * trans, GstPad * pad,
* fixed caps */
is_fixed = gst_caps_is_fixed (othercaps);
if (!is_fixed) {
- GstCaps *temp;
-
GST_DEBUG_OBJECT (trans,
"transform returned non fixed %" GST_PTR_FORMAT, othercaps);
/* see if the target caps are a superset of the source caps, in this
* case we can try to perform passthrough */
- temp = gst_caps_intersect (othercaps, caps);
- GST_DEBUG_OBJECT (trans, "intersect returned %" GST_PTR_FORMAT, temp);
- if (temp) {
- if (!gst_caps_is_empty (temp)) {
- GST_DEBUG_OBJECT (trans, "try passthrough with %" GST_PTR_FORMAT, caps);
- if (otherpeer) {
- /* try passthrough. we know it's fixed, because caps is fixed */
- if (gst_pad_accept_caps (otherpeer, caps)) {
- GST_DEBUG_OBJECT (trans, "peer accepted %" GST_PTR_FORMAT, caps);
- /* peer accepted unmodified caps, we free the original non-fixed
- * caps and work with the passthrough caps */
- gst_caps_unref (othercaps);
- othercaps = gst_caps_ref (caps);
- is_fixed = TRUE;
- /* mark that we checked othercaps with the peer, this
- * makes sure we don't call accept_caps again with these same
- * caps */
- peer_checked = TRUE;
- } else {
- GST_DEBUG_OBJECT (trans,
- "peer did not accept %" GST_PTR_FORMAT, caps);
- }
- } else {
- GST_DEBUG_OBJECT (trans, "no peer, doing passthrough");
+ if (gst_caps_can_intersect (othercaps, caps)) {
+ GST_DEBUG_OBJECT (trans, "try passthrough with %" GST_PTR_FORMAT, caps);
+ if (otherpeer) {
+ /* try passthrough. we know it's fixed, because caps is fixed */
+ if (gst_pad_accept_caps (otherpeer, caps)) {
+ GST_DEBUG_OBJECT (trans, "peer accepted %" GST_PTR_FORMAT, caps);
+ /* peer accepted unmodified caps, we free the original non-fixed
+ * caps and work with the passthrough caps */
gst_caps_unref (othercaps);
othercaps = gst_caps_ref (caps);
is_fixed = TRUE;
+ /* mark that we checked othercaps with the peer, this
+ * makes sure we don't call accept_caps again with these same
+ * caps */
+ peer_checked = TRUE;
+ } else {
+ GST_DEBUG_OBJECT (trans,
+ "peer did not accept %" GST_PTR_FORMAT, caps);
}
+ } else {
+ GST_DEBUG_OBJECT (trans, "no peer, doing passthrough");
+ gst_caps_unref (othercaps);
+ othercaps = gst_caps_ref (caps);
+ is_fixed = TRUE;
}
- gst_caps_unref (temp);
}
}
@@ -1004,7 +997,7 @@ gst_base_transform_acceptcaps (GstPad * pad, GstCaps * caps)
if (!gst_caps_is_fixed (caps))
#endif
{
- GstCaps *allowed, *intersect;
+ GstCaps *allowed;
GST_DEBUG_OBJECT (pad, "non fixed accept caps %" GST_PTR_FORMAT, caps);
@@ -1018,13 +1011,7 @@ gst_base_transform_acceptcaps (GstPad * pad, GstCaps * caps)
GST_DEBUG_OBJECT (pad, "allowed caps %" GST_PTR_FORMAT, allowed);
/* intersect with the requested format */
- intersect = gst_caps_intersect (allowed, caps);
-
- GST_DEBUG_OBJECT (pad, "intersection %" GST_PTR_FORMAT, intersect);
-
- /* we can accept if the intersection is not empty */
- ret = !gst_caps_is_empty (intersect);
- gst_caps_unref (intersect);
+ ret = gst_caps_can_intersect (allowed, caps);
gst_caps_unref (allowed);
if (!ret)
@@ -1560,10 +1547,6 @@ gst_base_transform_buffer_alloc (GstPad * pad, guint64 offset, guint size,
size_suggest = size;
suggest = FALSE;
} else {
- GstCaps *temp;
- const GstCaps *templ;
- gboolean empty;
-
GST_DEBUG_OBJECT (trans, "new format %p %" GST_PTR_FORMAT, caps, caps);
/* if we have a suggestion, pretend we got these as input */
@@ -1588,13 +1571,9 @@ gst_base_transform_buffer_alloc (GstPad * pad, guint64 offset, guint size,
/* check if we actually handle this format on the sinkpad */
if (sink_suggest) {
- templ = gst_pad_get_pad_template_caps (pad);
- temp = gst_caps_intersect (sink_suggest, templ);
-
- empty = gst_caps_is_empty (temp);
- gst_caps_unref (temp);
+ const GstCaps *templ = gst_pad_get_pad_template_caps (pad);
- if (empty)
+ if (!gst_caps_can_intersect (sink_suggest, templ))
goto not_supported;
}
More information about the Gstreamer-commits
mailing list