gst/elements/gsttee.c: I think this is actually moer correct...

Original commit message from CVS:
* gst/elements/gsttee.c: (gst_tee_getcaps), (gst_tee_link):
I think this is actually moer correct...
This commit is contained in:
Ronald S. Bultje 2005-01-17 10:12:40 +00:00
parent 7e75b2b0f0
commit c0ea459eae
3 changed files with 75 additions and 88 deletions

View file

@ -1,3 +1,8 @@
2005-01-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* gst/elements/gsttee.c: (gst_tee_getcaps), (gst_tee_link):
I think this is actually moer correct...
2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net> 2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* gst/gstprobe.c: (gst_probe_dispatcher_dispatch): * gst/gstprobe.c: (gst_probe_dispatcher_dispatch):

View file

@ -162,62 +162,53 @@ name_pad_compare (gconstpointer a, gconstpointer b)
} }
static GstCaps * static GstCaps *
gst_tee_getcaps (GstPad * pad) gst_tee_getcaps (GstPad * _pad)
{ {
GstTee *tee = GST_TEE (gst_pad_get_parent (pad)); GstTee *tee = GST_TEE (gst_pad_get_parent (_pad));
GstCaps *caps = gst_caps_new_any (), *tmp, *res;
GstPad *pad;
const GList *pads;
if (pad == tee->sinkpad) { for (pads = gst_element_get_pad_list (GST_ELEMENT (tee));
GstCaps *caps = gst_caps_new_any (), *tmp, *res; pads != NULL; pads = pads->next) {
const GList *pads; pad = GST_PAD (pads->data);
if (pad == _pad)
continue;
for (pads = gst_element_get_pad_list (GST_ELEMENT (tee)); tmp = gst_pad_get_allowed_caps (pad);
pads != NULL; pads = pads->next) { res = gst_caps_intersect (caps, tmp);
if (!GST_PAD_IS_SRC (pads->data)) gst_caps_free (tmp);
continue; gst_caps_free (caps);
caps = res;
tmp = gst_pad_get_allowed_caps (GST_PAD (pads->data));
res = gst_caps_intersect (caps, tmp);
gst_caps_free (tmp);
gst_caps_free (caps);
caps = res;
}
return caps;
} else {
return gst_pad_get_allowed_caps (tee->sinkpad);
} }
return caps;
} }
static GstPadLinkReturn static GstPadLinkReturn
gst_tee_link (GstPad * pad, const GstCaps * caps) gst_tee_link (GstPad * _pad, const GstCaps * caps)
{ {
GstTee *tee = GST_TEE (gst_pad_get_parent (pad)); GstTee *tee = GST_TEE (gst_pad_get_parent (_pad));
GstPadLinkReturn res;
GstPad *pad;
const GList *pads;
if (pad == tee->sinkpad) { GST_DEBUG_OBJECT (tee, "Forwarding link to all other pads");
GstPadLinkReturn res;
const GList *pads;
GST_DEBUG_OBJECT (tee, "Forwarding link to all source pads"); for (pads = gst_element_get_pad_list (GST_ELEMENT (tee));
pads != NULL; pads = pads->next) {
pad = GST_PAD (pads->data);
if (pad == _pad)
continue;
for (pads = gst_element_get_pad_list (GST_ELEMENT (tee)); res = gst_pad_try_set_caps (pad, caps);
pads != NULL; pads = pads->next) { GST_DEBUG_OBJECT (tee, "Pad %s:%s gave response %d",
if (!GST_PAD_IS_SRC (pads->data)) GST_DEBUG_PAD_NAME (pad), res);
continue; if (GST_PAD_LINK_FAILED (res))
return res;
res = gst_pad_try_set_caps (GST_PAD (pads->data), caps);
GST_DEBUG_OBJECT (tee, "Pad %s:%s gave response %d",
GST_DEBUG_PAD_NAME (GST_PAD (pads->data)), res);
if (GST_PAD_LINK_FAILED (res))
return res;
}
return GST_PAD_LINK_OK;
} else {
GST_DEBUG_OBJECT (tee, "Forwarding negotiation from source pad %s:%s",
GST_DEBUG_PAD_NAME (pad));
return gst_pad_try_set_caps (tee->sinkpad, caps);
} }
return GST_PAD_LINK_OK;
} }
static GstPad * static GstPad *

View file

@ -162,62 +162,53 @@ name_pad_compare (gconstpointer a, gconstpointer b)
} }
static GstCaps * static GstCaps *
gst_tee_getcaps (GstPad * pad) gst_tee_getcaps (GstPad * _pad)
{ {
GstTee *tee = GST_TEE (gst_pad_get_parent (pad)); GstTee *tee = GST_TEE (gst_pad_get_parent (_pad));
GstCaps *caps = gst_caps_new_any (), *tmp, *res;
GstPad *pad;
const GList *pads;
if (pad == tee->sinkpad) { for (pads = gst_element_get_pad_list (GST_ELEMENT (tee));
GstCaps *caps = gst_caps_new_any (), *tmp, *res; pads != NULL; pads = pads->next) {
const GList *pads; pad = GST_PAD (pads->data);
if (pad == _pad)
continue;
for (pads = gst_element_get_pad_list (GST_ELEMENT (tee)); tmp = gst_pad_get_allowed_caps (pad);
pads != NULL; pads = pads->next) { res = gst_caps_intersect (caps, tmp);
if (!GST_PAD_IS_SRC (pads->data)) gst_caps_free (tmp);
continue; gst_caps_free (caps);
caps = res;
tmp = gst_pad_get_allowed_caps (GST_PAD (pads->data));
res = gst_caps_intersect (caps, tmp);
gst_caps_free (tmp);
gst_caps_free (caps);
caps = res;
}
return caps;
} else {
return gst_pad_get_allowed_caps (tee->sinkpad);
} }
return caps;
} }
static GstPadLinkReturn static GstPadLinkReturn
gst_tee_link (GstPad * pad, const GstCaps * caps) gst_tee_link (GstPad * _pad, const GstCaps * caps)
{ {
GstTee *tee = GST_TEE (gst_pad_get_parent (pad)); GstTee *tee = GST_TEE (gst_pad_get_parent (_pad));
GstPadLinkReturn res;
GstPad *pad;
const GList *pads;
if (pad == tee->sinkpad) { GST_DEBUG_OBJECT (tee, "Forwarding link to all other pads");
GstPadLinkReturn res;
const GList *pads;
GST_DEBUG_OBJECT (tee, "Forwarding link to all source pads"); for (pads = gst_element_get_pad_list (GST_ELEMENT (tee));
pads != NULL; pads = pads->next) {
pad = GST_PAD (pads->data);
if (pad == _pad)
continue;
for (pads = gst_element_get_pad_list (GST_ELEMENT (tee)); res = gst_pad_try_set_caps (pad, caps);
pads != NULL; pads = pads->next) { GST_DEBUG_OBJECT (tee, "Pad %s:%s gave response %d",
if (!GST_PAD_IS_SRC (pads->data)) GST_DEBUG_PAD_NAME (pad), res);
continue; if (GST_PAD_LINK_FAILED (res))
return res;
res = gst_pad_try_set_caps (GST_PAD (pads->data), caps);
GST_DEBUG_OBJECT (tee, "Pad %s:%s gave response %d",
GST_DEBUG_PAD_NAME (GST_PAD (pads->data)), res);
if (GST_PAD_LINK_FAILED (res))
return res;
}
return GST_PAD_LINK_OK;
} else {
GST_DEBUG_OBJECT (tee, "Forwarding negotiation from source pad %s:%s",
GST_DEBUG_PAD_NAME (pad));
return gst_pad_try_set_caps (tee->sinkpad, caps);
} }
return GST_PAD_LINK_OK;
} }
static GstPad * static GstPad *