Commit 15df3c81 authored by HoonHee Lee's avatar HoonHee Lee Committed by Sebastian Dröge

audio/videodecoder: use gst_pad_peer_query_caps to make output caps

gst_pad_get_allowed_caps() will return NULL if the srcpad has no peer.
In that case, use gst_pad_peer_query_caps() with template caps as filter
to have negotiated output caps properly before forwarding GAP event.

https://bugzilla.gnome.org/show_bug.cgi?id=761218
parent 135c6125
......@@ -1950,7 +1950,7 @@ gst_audio_decoder_do_byte (GstAudioDecoder * dec)
static gboolean
gst_audio_decoder_negotiate_default_caps (GstAudioDecoder * dec)
{
GstCaps *caps;
GstCaps *caps, *templcaps;
gint i;
gint channels = 0;
gint rate;
......@@ -1958,10 +1958,21 @@ gst_audio_decoder_negotiate_default_caps (GstAudioDecoder * dec)
gint caps_size;
GstStructure *structure;
caps = gst_pad_get_allowed_caps (dec->srcpad);
templcaps = gst_pad_get_pad_template_caps (dec->srcpad);
caps = gst_pad_peer_query_caps (dec->srcpad, templcaps);
if (caps) {
gst_caps_unref (templcaps);
templcaps = NULL;
} else {
caps = templcaps;
templcaps = NULL;
}
if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps))
goto caps_error;
GST_LOG_OBJECT (dec, "peer caps %" GST_PTR_FORMAT, caps);
/* before fixating, try to use whatever upstream provided */
caps = gst_caps_make_writable (caps);
caps_size = gst_caps_get_size (caps);
......
......@@ -1089,17 +1089,28 @@ _flush_events (GstPad * pad, GList * events)
static gboolean
gst_video_decoder_negotiate_default_caps (GstVideoDecoder * decoder)
{
GstCaps *caps;
GstCaps *caps, *templcaps;
GstVideoCodecState *state;
GstVideoInfo info;
gint i;
gint caps_size;
GstStructure *structure;
caps = gst_pad_get_allowed_caps (decoder->srcpad);
templcaps = gst_pad_get_pad_template_caps (decoder->srcpad);
caps = gst_pad_peer_query_caps (decoder->srcpad, templcaps);
if (caps) {
gst_caps_unref (templcaps);
templcaps = NULL;
} else {
caps = templcaps;
templcaps = NULL;
}
if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps))
goto caps_error;
GST_LOG_OBJECT (decoder, "peer caps %" GST_PTR_FORMAT, caps);
/* before fixating, try to use whatever upstream provided */
caps = gst_caps_make_writable (caps);
caps_size = gst_caps_get_size (caps);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment