mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
h264parse: decrease passthrough negotiation preference
Also ensure parsing fixed caps when negotiating rather than failing to handle non-fixed list cases. See #668471.
This commit is contained in:
parent
f8f4620451
commit
c36bb8b73d
1 changed files with 16 additions and 0 deletions
|
@ -293,6 +293,9 @@ gst_h264_parse_get_string (GstH264Parse * parse, gboolean format, gint code)
|
||||||
static void
|
static void
|
||||||
gst_h264_parse_format_from_caps (GstCaps * caps, guint * format, guint * align)
|
gst_h264_parse_format_from_caps (GstCaps * caps, guint * format, guint * align)
|
||||||
{
|
{
|
||||||
|
g_return_if_fail (gst_caps_is_fixed (caps));
|
||||||
|
|
||||||
|
GST_DEBUG ("parsing caps: %" GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
if (format)
|
if (format)
|
||||||
*format = GST_H264_PARSE_FORMAT_NONE;
|
*format = GST_H264_PARSE_FORMAT_NONE;
|
||||||
|
@ -332,9 +335,20 @@ gst_h264_parse_negotiate (GstH264Parse * h264parse, GstCaps * in_caps)
|
||||||
guint format = GST_H264_PARSE_FORMAT_NONE;
|
guint format = GST_H264_PARSE_FORMAT_NONE;
|
||||||
guint align = GST_H264_PARSE_ALIGN_NONE;
|
guint align = GST_H264_PARSE_ALIGN_NONE;
|
||||||
|
|
||||||
|
g_return_if_fail ((in_caps == NULL) || gst_caps_is_fixed (in_caps));
|
||||||
|
|
||||||
caps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (h264parse));
|
caps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (h264parse));
|
||||||
GST_DEBUG_OBJECT (h264parse, "allowed caps: %" GST_PTR_FORMAT, caps);
|
GST_DEBUG_OBJECT (h264parse, "allowed caps: %" GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
|
/* concentrate on leading structure, since decodebin2 parser
|
||||||
|
* capsfilter always includes parser template caps */
|
||||||
|
if (caps) {
|
||||||
|
caps = gst_caps_make_writable (caps);
|
||||||
|
gst_caps_truncate (caps);
|
||||||
|
GST_DEBUG_OBJECT (h264parse, "negotiating with caps: %" GST_PTR_FORMAT,
|
||||||
|
caps);
|
||||||
|
}
|
||||||
|
|
||||||
if (in_caps && caps) {
|
if (in_caps && caps) {
|
||||||
if (gst_caps_can_intersect (in_caps, caps)) {
|
if (gst_caps_can_intersect (in_caps, caps)) {
|
||||||
GST_DEBUG_OBJECT (h264parse, "downstream accepts upstream caps");
|
GST_DEBUG_OBJECT (h264parse, "downstream accepts upstream caps");
|
||||||
|
@ -345,6 +359,8 @@ gst_h264_parse_negotiate (GstH264Parse * h264parse, GstCaps * in_caps)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caps) {
|
if (caps) {
|
||||||
|
/* fixate to avoid ambiguity with lists when parsing */
|
||||||
|
gst_pad_fixate_caps (GST_BASE_PARSE_SRC_PAD (h264parse), caps);
|
||||||
gst_h264_parse_format_from_caps (caps, &format, &align);
|
gst_h264_parse_format_from_caps (caps, &format, &align);
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (caps);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue