Commit 76d26a60 authored by Thiago Santos's avatar Thiago Santos

playsinkconvertbin: implement accept-caps handler

The default one will just go through the internal elements which might
just be identity when it is in passthrough which will lead to the query
being handled by the downstream sink, ignoring all that playsinkconvertbin
could actually handle and convert.

https://bugzilla.gnome.org/show_bug.cgi?id=754235
parent c95d809a
......@@ -350,6 +350,42 @@ gst_play_sink_convert_bin_sink_setcaps (GstPlaySinkConvertBin * self,
} \
} G_STMT_END
static gboolean
gst_play_sink_convert_bin_acceptcaps (GstPad * pad, GstCaps * caps)
{
GstPlaySinkConvertBin *self =
GST_PLAY_SINK_CONVERT_BIN (gst_pad_get_parent (pad));
gboolean ret;
GstPad *otherpad;
GST_PLAY_SINK_CONVERT_BIN_LOCK (self);
if (pad == self->srcpad) {
otherpad = self->sinkpad;
} else if (pad == self->sinkpad) {
otherpad = self->srcpad;
} else {
GST_ERROR_OBJECT (pad, "Not one of our pads");
otherpad = NULL;
}
if (otherpad) {
ret = gst_pad_peer_query_accept_caps (otherpad, caps);
if (!ret && self->converter_caps) {
/* maybe we can convert */
ret = gst_caps_can_intersect (caps, self->converter_caps);
}
} else {
ret = TRUE;
}
GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self);
gst_object_unref (self);
GST_DEBUG_OBJECT (pad, "Accept caps: '%" GST_PTR_FORMAT "' %d", caps, ret);
return ret;
}
static GstCaps *
gst_play_sink_convert_bin_getcaps (GstPad * pad, GstCaps * filter)
{
......@@ -474,6 +510,17 @@ gst_play_sink_convert_bin_query (GstPad * pad, GstObject * parent,
res = TRUE;
break;
}
case GST_QUERY_ACCEPT_CAPS:
{
gboolean ret;
GstCaps *caps;
gst_query_parse_accept_caps (query, &caps);
ret = gst_play_sink_convert_bin_acceptcaps (pad, caps);
gst_query_set_accept_caps_result (query, ret);
res = TRUE;
break;
}
default:
res = gst_pad_query_default (pad, parent, query);
break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment