mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
dvbsuboverlay: Check if downstream supports GstVideoOverlayComposition.
Fix the negotiation of GstVideoOverlayComposition by checking intersection with the peer caps, rather than just accept-caps, which might only check the pad template. https://bugzilla.gnome.org/show_bug.cgi?id=755113
This commit is contained in:
parent
50400fa2a6
commit
86a8ff50c0
1 changed files with 13 additions and 3 deletions
|
@ -686,6 +686,7 @@ gst_dvbsub_overlay_negotiate (GstDVBSubOverlay * overlay, GstCaps * caps)
|
||||||
|| !gst_caps_features_contains (f,
|
|| !gst_caps_features_contains (f,
|
||||||
GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION)) {
|
GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION)) {
|
||||||
GstCaps *overlay_caps;
|
GstCaps *overlay_caps;
|
||||||
|
GstCaps *peercaps;
|
||||||
|
|
||||||
/* In this case we added the meta, but we can work without it
|
/* In this case we added the meta, but we can work without it
|
||||||
* so preserve the original caps so we can use it as a fallback */
|
* so preserve the original caps so we can use it as a fallback */
|
||||||
|
@ -695,9 +696,18 @@ gst_dvbsub_overlay_negotiate (GstDVBSubOverlay * overlay, GstCaps * caps)
|
||||||
gst_caps_features_add (f,
|
gst_caps_features_add (f,
|
||||||
GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
|
GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
|
||||||
|
|
||||||
ret = gst_pad_peer_query_accept_caps (overlay->srcpad, overlay_caps);
|
/* FIXME: We should probably check if downstream *prefers* the
|
||||||
GST_DEBUG_OBJECT (overlay, "Downstream accepts the overlay meta: %d", ret);
|
* overlay meta, and only enforce usage of it if we can't handle
|
||||||
if (ret) {
|
* the format ourselves and thus would have to drop the overlays.
|
||||||
|
* Otherwise we should prefer what downstream wants here.
|
||||||
|
*/
|
||||||
|
peercaps = gst_pad_peer_query_caps (overlay->srcpad, NULL);
|
||||||
|
caps_has_meta = gst_caps_can_intersect (peercaps, overlay_caps);
|
||||||
|
gst_caps_unref (peercaps);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (overlay, "Downstream accepts the overlay meta: %d",
|
||||||
|
caps_has_meta);
|
||||||
|
if (caps_has_meta) {
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (caps);
|
||||||
caps = overlay_caps;
|
caps = overlay_caps;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue