mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
glmixer: override the caps query in order to 'convert' capsfeatures
Otherwise, it is only possible for the sink pads and the src pads to have the exact same caps features. We can convert from any feature to another feature so support that.
This commit is contained in:
parent
7d9044cf05
commit
9ac74f6226
1 changed files with 42 additions and 0 deletions
|
@ -287,6 +287,37 @@ gst_gl_mixer_pad_sink_acceptcaps (GstPad * pad, GstGLMixer * mix,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstCaps *
|
||||||
|
gst_gl_mixer_pad_sink_getcaps (GstPad * pad, GstGLMixer * mix, GstCaps * filter)
|
||||||
|
{
|
||||||
|
GstCaps *srccaps;
|
||||||
|
GstCaps *template_caps;
|
||||||
|
GstCaps *filtered_caps;
|
||||||
|
GstCaps *returned_caps;
|
||||||
|
gboolean had_current_caps = TRUE;
|
||||||
|
|
||||||
|
template_caps = gst_pad_get_pad_template_caps (pad);
|
||||||
|
|
||||||
|
srccaps = gst_pad_get_current_caps (pad);
|
||||||
|
if (srccaps == NULL) {
|
||||||
|
had_current_caps = FALSE;
|
||||||
|
srccaps = template_caps;
|
||||||
|
}
|
||||||
|
|
||||||
|
filtered_caps = srccaps;
|
||||||
|
if (filter)
|
||||||
|
filtered_caps = gst_caps_intersect (srccaps, filter);
|
||||||
|
returned_caps = gst_caps_intersect (filtered_caps, template_caps);
|
||||||
|
|
||||||
|
gst_caps_unref (srccaps);
|
||||||
|
if (filter)
|
||||||
|
gst_caps_unref (filtered_caps);
|
||||||
|
if (had_current_caps)
|
||||||
|
gst_caps_unref (template_caps);
|
||||||
|
|
||||||
|
return returned_caps;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_gl_mixer_sink_query (GstAggregator * agg, GstAggregatorPad * bpad,
|
gst_gl_mixer_sink_query (GstAggregator * agg, GstAggregatorPad * bpad,
|
||||||
GstQuery * query)
|
GstQuery * query)
|
||||||
|
@ -297,6 +328,17 @@ gst_gl_mixer_sink_query (GstAggregator * agg, GstAggregatorPad * bpad,
|
||||||
GST_TRACE ("QUERY %" GST_PTR_FORMAT, query);
|
GST_TRACE ("QUERY %" GST_PTR_FORMAT, query);
|
||||||
|
|
||||||
switch (GST_QUERY_TYPE (query)) {
|
switch (GST_QUERY_TYPE (query)) {
|
||||||
|
case GST_QUERY_CAPS:
|
||||||
|
{
|
||||||
|
GstCaps *filter, *caps;
|
||||||
|
|
||||||
|
gst_query_parse_caps (query, &filter);
|
||||||
|
caps = gst_gl_mixer_pad_sink_getcaps (GST_PAD (bpad), mix, filter);
|
||||||
|
gst_query_set_caps_result (query, caps);
|
||||||
|
gst_caps_unref (caps);
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GST_QUERY_ACCEPT_CAPS:
|
case GST_QUERY_ACCEPT_CAPS:
|
||||||
{
|
{
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
|
|
Loading…
Reference in a new issue