mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
adder: Update for negotiation related API changes
This commit is contained in:
parent
2987ad9358
commit
48654cdacf
1 changed files with 22 additions and 13 deletions
|
@ -158,7 +158,7 @@ MAKE_FUNC_NC (add_float64, gdouble)
|
||||||
* if we have filtercaps set, use those to constrain the target caps.
|
* if we have filtercaps set, use those to constrain the target caps.
|
||||||
*/
|
*/
|
||||||
static GstCaps *
|
static GstCaps *
|
||||||
gst_adder_sink_getcaps (GstPad * pad)
|
gst_adder_sink_getcaps (GstPad * pad, GstCaps * filter)
|
||||||
{
|
{
|
||||||
GstAdder *adder;
|
GstAdder *adder;
|
||||||
GstCaps *result, *peercaps, *sinkcaps, *filter_caps;
|
GstCaps *result, *peercaps, *sinkcaps, *filter_caps;
|
||||||
|
@ -167,12 +167,25 @@ gst_adder_sink_getcaps (GstPad * pad)
|
||||||
|
|
||||||
GST_OBJECT_LOCK (adder);
|
GST_OBJECT_LOCK (adder);
|
||||||
/* take filter */
|
/* take filter */
|
||||||
if ((filter_caps = adder->filter_caps))
|
if ((filter_caps = adder->filter_caps)) {
|
||||||
gst_caps_ref (filter_caps);
|
if (filter)
|
||||||
|
filter_caps =
|
||||||
|
gst_caps_intersect_full (filter, filter_caps,
|
||||||
|
GST_CAPS_INTERSECT_FIRST);
|
||||||
|
else
|
||||||
|
gst_caps_ref (filter_caps);
|
||||||
|
} else {
|
||||||
|
filter_caps = gst_caps_ref (filter);
|
||||||
|
}
|
||||||
GST_OBJECT_UNLOCK (adder);
|
GST_OBJECT_UNLOCK (adder);
|
||||||
|
|
||||||
|
if (filter_caps && gst_caps_is_empty (filter_caps)) {
|
||||||
|
GST_WARNING_OBJECT (pad, "Empty filter caps");
|
||||||
|
return filter_caps;
|
||||||
|
}
|
||||||
|
|
||||||
/* get the downstream possible caps */
|
/* get the downstream possible caps */
|
||||||
peercaps = gst_pad_peer_get_caps (adder->srcpad);
|
peercaps = gst_pad_peer_get_caps (adder->srcpad, filter_caps);
|
||||||
|
|
||||||
/* get the allowed caps on this sinkpad */
|
/* get the allowed caps on this sinkpad */
|
||||||
sinkcaps = gst_pad_get_current_caps (pad);
|
sinkcaps = gst_pad_get_current_caps (pad);
|
||||||
|
@ -185,16 +198,10 @@ gst_adder_sink_getcaps (GstPad * pad)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (peercaps) {
|
if (peercaps) {
|
||||||
/* restrict with filter-caps if any */
|
|
||||||
if (filter_caps) {
|
|
||||||
GST_DEBUG_OBJECT (adder, "filtering peer caps");
|
|
||||||
result = gst_caps_intersect (peercaps, filter_caps);
|
|
||||||
gst_caps_unref (peercaps);
|
|
||||||
peercaps = result;
|
|
||||||
}
|
|
||||||
/* if the peer has caps, intersect */
|
/* if the peer has caps, intersect */
|
||||||
GST_DEBUG_OBJECT (adder, "intersecting peer and template caps");
|
GST_DEBUG_OBJECT (adder, "intersecting peer and template caps");
|
||||||
result = gst_caps_intersect (peercaps, sinkcaps);
|
result =
|
||||||
|
gst_caps_intersect_full (peercaps, sinkcaps, GST_CAPS_INTERSECT_FIRST);
|
||||||
gst_caps_unref (peercaps);
|
gst_caps_unref (peercaps);
|
||||||
gst_caps_unref (sinkcaps);
|
gst_caps_unref (sinkcaps);
|
||||||
} else {
|
} else {
|
||||||
|
@ -203,7 +210,9 @@ gst_adder_sink_getcaps (GstPad * pad)
|
||||||
/* restrict with filter-caps if any */
|
/* restrict with filter-caps if any */
|
||||||
if (filter_caps) {
|
if (filter_caps) {
|
||||||
GST_DEBUG_OBJECT (adder, "no peer caps, using filtered sinkcaps");
|
GST_DEBUG_OBJECT (adder, "no peer caps, using filtered sinkcaps");
|
||||||
result = gst_caps_intersect (sinkcaps, filter_caps);
|
result =
|
||||||
|
gst_caps_intersect_full (filter_caps, sinkcaps,
|
||||||
|
GST_CAPS_INTERSECT_FIRST);
|
||||||
gst_caps_unref (sinkcaps);
|
gst_caps_unref (sinkcaps);
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG_OBJECT (adder, "no peer caps, using sinkcaps");
|
GST_DEBUG_OBJECT (adder, "no peer caps, using sinkcaps");
|
||||||
|
|
Loading…
Reference in a new issue