h264parse: try the current caps before querying downstream

If we have a stream that contains an unchanging SPS/PPS for every video frame,
we don't need to to constantly query downstream for it's supported caps if the
current caps are compatible with the negotiated caps.

https://bugzilla.gnome.org/show_bug.cgi?id=761014
This commit is contained in:
Matthew Waters 2016-02-04 15:34:04 +11:00
parent 4bbe16bb7f
commit f352691a04

View file

@ -1499,11 +1499,20 @@ get_compatible_profile_caps (GstH264SPS * sps)
static void static void
ensure_caps_profile (GstH264Parse * h264parse, GstCaps * caps, GstH264SPS * sps) ensure_caps_profile (GstH264Parse * h264parse, GstCaps * caps, GstH264SPS * sps)
{ {
GstCaps *filter_caps, *peer_caps, *compat_caps; GstCaps *peer_caps, *compat_caps;
filter_caps = gst_caps_new_empty_simple ("video/x-h264"); peer_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (h264parse));
if (!peer_caps || !gst_caps_can_intersect (caps, peer_caps)) {
GstCaps *filter_caps = gst_caps_new_empty_simple ("video/x-h264");
if (peer_caps)
gst_caps_unref (peer_caps);
peer_caps = peer_caps =
gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse), filter_caps); gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse),
filter_caps);
gst_caps_unref (filter_caps);
}
if (peer_caps && !gst_caps_can_intersect (caps, peer_caps)) { if (peer_caps && !gst_caps_can_intersect (caps, peer_caps)) {
GstStructure *structure; GstStructure *structure;
@ -1534,7 +1543,6 @@ ensure_caps_profile (GstH264Parse * h264parse, GstCaps * caps, GstH264SPS * sps)
} }
if (peer_caps) if (peer_caps)
gst_caps_unref (peer_caps); gst_caps_unref (peer_caps);
gst_caps_unref (filter_caps);
} }
static const gchar * static const gchar *