mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-29 15:22:17 +00:00
base{sink,src}: Don't try to fixate ANY caps
This commit is contained in:
parent
5020738a6d
commit
1cff66d587
2 changed files with 23 additions and 17 deletions
|
@ -4313,10 +4313,8 @@ gst_base_sink_negotiate_pull (GstBaseSink * basesink)
|
||||||
caps = gst_caps_make_writable (caps);
|
caps = gst_caps_make_writable (caps);
|
||||||
/* get the first (prefered) format */
|
/* get the first (prefered) format */
|
||||||
gst_caps_truncate (caps);
|
gst_caps_truncate (caps);
|
||||||
/* try to fixate */
|
|
||||||
gst_pad_fixate_caps (GST_BASE_SINK_PAD (basesink), caps);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (basesink, "fixated to: %" GST_PTR_FORMAT, caps);
|
GST_DEBUG_OBJECT (basesink, "have caps: %" GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
if (gst_caps_is_any (caps)) {
|
if (gst_caps_is_any (caps)) {
|
||||||
GST_DEBUG_OBJECT (basesink, "caps were ANY after fixating, "
|
GST_DEBUG_OBJECT (basesink, "caps were ANY after fixating, "
|
||||||
|
@ -4324,15 +4322,21 @@ gst_base_sink_negotiate_pull (GstBaseSink * basesink)
|
||||||
/* neither side has template caps in this case, so they are prepared for
|
/* neither side has template caps in this case, so they are prepared for
|
||||||
pull() without setcaps() */
|
pull() without setcaps() */
|
||||||
result = TRUE;
|
result = TRUE;
|
||||||
} else if (gst_caps_is_fixed (caps)) {
|
} else {
|
||||||
if (!gst_pad_set_caps (GST_BASE_SINK_PAD (basesink), caps))
|
/* try to fixate */
|
||||||
goto could_not_set_caps;
|
gst_pad_fixate_caps (GST_BASE_SINK_PAD (basesink), caps);
|
||||||
|
GST_DEBUG_OBJECT (basesink, "fixated to: %" GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
GST_OBJECT_LOCK (basesink);
|
if (gst_caps_is_fixed (caps)) {
|
||||||
gst_caps_replace (&basesink->priv->pull_caps, caps);
|
if (!gst_pad_set_caps (GST_BASE_SINK_PAD (basesink), caps))
|
||||||
GST_OBJECT_UNLOCK (basesink);
|
goto could_not_set_caps;
|
||||||
|
|
||||||
result = TRUE;
|
GST_OBJECT_LOCK (basesink);
|
||||||
|
gst_caps_replace (&basesink->priv->pull_caps, caps);
|
||||||
|
GST_OBJECT_UNLOCK (basesink);
|
||||||
|
|
||||||
|
result = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (caps);
|
||||||
|
|
|
@ -2632,17 +2632,19 @@ gst_base_src_default_negotiate (GstBaseSrc * basesrc)
|
||||||
|
|
||||||
/* now fixate */
|
/* now fixate */
|
||||||
if (!gst_caps_is_empty (caps)) {
|
if (!gst_caps_is_empty (caps)) {
|
||||||
gst_pad_fixate_caps (GST_BASE_SRC_PAD (basesrc), caps);
|
GST_DEBUG_OBJECT (basesrc, "have caps: %" GST_PTR_FORMAT, caps);
|
||||||
GST_DEBUG_OBJECT (basesrc, "fixated to: %" GST_PTR_FORMAT, caps);
|
|
||||||
|
|
||||||
if (gst_caps_is_any (caps)) {
|
if (gst_caps_is_any (caps)) {
|
||||||
/* hmm, still anything, so element can do anything and
|
/* hmm, still anything, so element can do anything and
|
||||||
* nego is not needed */
|
* nego is not needed */
|
||||||
result = TRUE;
|
result = TRUE;
|
||||||
} else if (gst_caps_is_fixed (caps)) {
|
} else {
|
||||||
/* yay, fixed caps, use those then, it's possible that the subclass does
|
gst_pad_fixate_caps (GST_BASE_SRC_PAD (basesrc), caps);
|
||||||
* not accept this caps after all and we have to fail. */
|
GST_DEBUG_OBJECT (basesrc, "fixated to: %" GST_PTR_FORMAT, caps);
|
||||||
result = gst_pad_set_caps (GST_BASE_SRC_PAD (basesrc), caps);
|
if (gst_caps_is_fixed (caps)) {
|
||||||
|
/* yay, fixed caps, use those then, it's possible that the subclass does
|
||||||
|
* not accept this caps after all and we have to fail. */
|
||||||
|
result = gst_pad_set_caps (GST_BASE_SRC_PAD (basesrc), caps);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (caps);
|
||||||
|
|
Loading…
Reference in a new issue