mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-12 02:15:31 +00:00
subtitleoverlay: replace accept-caps with caps query
Those accept caps are actually checking if downstream supports some particular caps to check if it need to negotiate a different format. Checking only the next element with accept-caps is not enough to guarantee that it is supported. Using a caps query makes it obtain the supported caps for downstream as a whole instead of only the next element.
This commit is contained in:
parent
2f7cd8608a
commit
20f6af651b
1 changed files with 17 additions and 3 deletions
|
@ -157,6 +157,20 @@ unblock_subtitle (GstSubtitleOverlay * self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
pad_supports_caps (GstPad * pad, GstCaps * caps)
|
||||||
|
{
|
||||||
|
GstCaps *pad_caps;
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
|
||||||
|
pad_caps = gst_pad_query_caps (pad, NULL);
|
||||||
|
if (gst_caps_can_intersect (caps, pad_caps))
|
||||||
|
ret = TRUE;
|
||||||
|
gst_caps_unref (pad_caps);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_subtitle_overlay_finalize (GObject * object)
|
gst_subtitle_overlay_finalize (GObject * object)
|
||||||
{
|
{
|
||||||
|
@ -1063,7 +1077,7 @@ _pad_blocked_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
|
||||||
GstPad *target =
|
GstPad *target =
|
||||||
gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad));
|
gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad));
|
||||||
|
|
||||||
if (target && gst_pad_query_accept_caps (target, subcaps)) {
|
if (target && pad_supports_caps (target, subcaps)) {
|
||||||
GST_DEBUG_OBJECT (pad, "Target accepts caps");
|
GST_DEBUG_OBJECT (pad, "Target accepts caps");
|
||||||
|
|
||||||
gst_object_unref (target);
|
gst_object_unref (target);
|
||||||
|
@ -1673,7 +1687,7 @@ gst_subtitle_overlay_video_sink_setcaps (GstSubtitleOverlay * self,
|
||||||
|
|
||||||
GST_SUBTITLE_OVERLAY_LOCK (self);
|
GST_SUBTITLE_OVERLAY_LOCK (self);
|
||||||
|
|
||||||
if (!target || !gst_pad_query_accept_caps (target, caps)) {
|
if (!target || !pad_supports_caps (target, caps)) {
|
||||||
GST_DEBUG_OBJECT (target, "Target did not accept caps -- reconfiguring");
|
GST_DEBUG_OBJECT (target, "Target did not accept caps -- reconfiguring");
|
||||||
|
|
||||||
block_subtitle (self);
|
block_subtitle (self);
|
||||||
|
@ -1809,7 +1823,7 @@ gst_subtitle_overlay_subtitle_sink_setcaps (GstSubtitleOverlay * self,
|
||||||
GST_SUBTITLE_OVERLAY_LOCK (self);
|
GST_SUBTITLE_OVERLAY_LOCK (self);
|
||||||
gst_caps_replace (&self->subcaps, caps);
|
gst_caps_replace (&self->subcaps, caps);
|
||||||
|
|
||||||
if (target && gst_pad_query_accept_caps (target, caps)) {
|
if (target && pad_supports_caps (target, caps)) {
|
||||||
GST_DEBUG_OBJECT (self, "Target accepts caps");
|
GST_DEBUG_OBJECT (self, "Target accepts caps");
|
||||||
GST_SUBTITLE_OVERLAY_UNLOCK (self);
|
GST_SUBTITLE_OVERLAY_UNLOCK (self);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
Loading…
Reference in a new issue