From: Thiago Santos Date: Fri, 14 Aug 2015 11:21:51 +0000 (-0300) Subject: avauddec: use template caps intersection for accept-caps X-Git-Tag: 1.19.3~499^2~450 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2b387ba827313c6835e3877653ea9571bb9a9086;p=platform%2Fupstream%2Fgstreamer.git avauddec: use template caps intersection for accept-caps Avoid doing downstream caps queries when accept-caps should just do a shallow caps check on the element itself https://bugzilla.gnome.org/show_bug.cgi?id=753623 --- diff --git a/ext/libav/gstavauddec.c b/ext/libav/gstavauddec.c index 17eb773..fbce56f 100644 --- a/ext/libav/gstavauddec.c +++ b/ext/libav/gstavauddec.c @@ -53,6 +53,8 @@ static gboolean gst_ffmpegauddec_set_format (GstAudioDecoder * decoder, GstCaps * caps); static GstFlowReturn gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf); +static gboolean gst_ffmpegauddec_sink_query (GstAudioDecoder * decoder, + GstQuery * query); static gboolean gst_ffmpegauddec_negotiate (GstFFMpegAudDec * ffmpegdec, AVCodecContext * context, AVFrame * frame, gboolean force); @@ -133,6 +135,8 @@ gst_ffmpegauddec_class_init (GstFFMpegAudDecClass * klass) gstaudiodecoder_class->flush = GST_DEBUG_FUNCPTR (gst_ffmpegauddec_flush); gstaudiodecoder_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_ffmpegauddec_propose_allocation); + gstaudiodecoder_class->sink_query = + GST_DEBUG_FUNCPTR (gst_ffmpegauddec_sink_query); } static void @@ -148,6 +152,8 @@ gst_ffmpegauddec_init (GstFFMpegAudDec * ffmpegdec) ffmpegdec->frame = av_frame_alloc (); + GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_DECODER_SINK_PAD (ffmpegdec)); + gst_audio_decoder_set_drainable (GST_AUDIO_DECODER (ffmpegdec), TRUE); gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (ffmpegdec), TRUE); } @@ -202,6 +208,25 @@ gst_ffmpegauddec_close (GstFFMpegAudDec * ffmpegdec, gboolean reset) } static gboolean +gst_ffmpegauddec_sink_query (GstAudioDecoder * decoder, GstQuery * query) +{ + gboolean ret; + + switch (GST_QUERY_TYPE (query)) { + case GST_QUERY_ACCEPT_CAPS: + /* resort to the default accept-caps query handling to skip the videodecoder handling */ + ret = + gst_pad_query_default (GST_AUDIO_DECODER_SINK_PAD (decoder), + GST_OBJECT_CAST (decoder), query); + break; + default: + ret = gst_audio_decoder_sink_query_default (decoder, query); + break; + } + return ret; +} + +static gboolean gst_ffmpegauddec_start (GstAudioDecoder * decoder) { GstFFMpegAudDec *ffmpegdec = (GstFFMpegAudDec *) decoder;