From 5a2f9d510f4fa4f250bd6374b413940df8e2920e Mon Sep 17 00:00:00 2001 From: Vivia Nikolaidou Date: Fri, 13 Nov 2020 14:58:44 +0200 Subject: [PATCH] aacparse: Fix caps change handling In baseparse we set the fixed caps flag on all src pads, therefore the source pad caps query in get_allowed_caps will return the current caps. Current caps won't necessarily intersect with the new caps (e.g. sample rate change). Replace get_allowed_caps with peer_query_caps. Part-of: --- gst/audioparsers/gstaacparse.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gst/audioparsers/gstaacparse.c b/gst/audioparsers/gstaacparse.c index 3b10462..2b54a53 100644 --- a/gst/audioparsers/gstaacparse.c +++ b/gst/audioparsers/gstaacparse.c @@ -173,7 +173,7 @@ static gboolean gst_aac_parse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps) { GstStructure *s; - GstCaps *src_caps = NULL, *allowed; + GstCaps *src_caps = NULL, *peercaps; gboolean res = FALSE; const gchar *stream_format; guint8 codec_data[2]; @@ -226,8 +226,8 @@ gst_aac_parse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps) if (stream_format) gst_structure_set (s, "stream-format", G_TYPE_STRING, stream_format, NULL); - allowed = gst_pad_get_allowed_caps (GST_BASE_PARSE (aacparse)->srcpad); - if (allowed && !gst_caps_can_intersect (src_caps, allowed)) { + peercaps = gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (aacparse), NULL); + if (peercaps && !gst_caps_can_intersect (src_caps, peercaps)) { GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad, "Caps can not intersect"); if (aacparse->header_type == DSPAAC_HEADER_ADTS) { @@ -235,7 +235,7 @@ gst_aac_parse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps) "Input is ADTS, trying raw"); gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING, "raw", NULL); - if (gst_caps_can_intersect (src_caps, allowed)) { + if (gst_caps_can_intersect (src_caps, peercaps)) { GstBuffer *codec_data_buffer; GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad, @@ -255,15 +255,15 @@ gst_aac_parse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps) "Input is raw, trying ADTS"); gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING, "adts", NULL); - if (gst_caps_can_intersect (src_caps, allowed)) { + if (gst_caps_can_intersect (src_caps, peercaps)) { GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad, "Caps can intersect, we will prepend ADTS headers"); aacparse->output_header_type = DSPAAC_HEADER_ADTS; } } } - if (allowed) - gst_caps_unref (allowed); + if (peercaps) + gst_caps_unref (peercaps); aacparse->last_parsed_channels = 0; aacparse->last_parsed_sample_rate = 0; -- 2.7.4