mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-29 05:01:23 +00:00
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:
parent
7e75b2b0f0
commit
c0ea459eae
3 changed files with 75 additions and 88 deletions
|
@ -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):
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
Loading…
Reference in a new issue