diff options
author | Thiago Santos <thiagoss@osg.samsung.com> | 2015-08-15 07:31:54 -0300 |
---|---|---|
committer | Thiago Santos <thiagoss@osg.samsung.com> | 2015-08-15 13:44:34 -0300 |
commit | 33b1da7b802346550bb4b44ed1eba8865b49612c (patch) | |
tree | b0efb0c53b106861d84a10fdb3ff176fe5d1b68d | |
parent | 4982188cf706a1a581afaabdcedb16f5c4f537bb (diff) |
audiodecoder: add option to use default pad accept-caps handling
Add gst_audio_decoder_set_use_default_pad_acceptcaps() to allow
subclasses to make videodecoder use the default pad acceptcaps
handling instead of resorting to the caps query that is, usually,
less efficient and unecessary
API: gst_audio_decoder_set_use_default_pad_acceptcaps
-rw-r--r-- | gst-libs/gst/audio/gstaudiodecoder.c | 62 | ||||
-rw-r--r-- | gst-libs/gst/audio/gstaudiodecoder.h | 3 | ||||
-rw-r--r-- | win32/common/libgstaudio.def | 1 |
3 files changed, 50 insertions, 16 deletions
diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index e831be343..4515d2e33 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -279,6 +279,9 @@ struct _GstAudioDecoderPrivate /* pending serialized sink events, will be sent from finish_frame() */ GList *pending_events; + + /* flags */ + gboolean use_default_pad_acceptcaps; }; //* Default channel layouts taken from audioconvert */ @@ -2691,28 +2694,34 @@ gst_audio_decoder_sink_query_default (GstAudioDecoder * dec, GstQuery * query) break; } case GST_QUERY_ACCEPT_CAPS:{ - GstCaps *caps; - GstCaps *allowed_caps; - GstCaps *template_caps; - gboolean accept; + if (dec->priv->use_default_pad_acceptcaps) { + res = + gst_pad_query_default (GST_AUDIO_DECODER_SINK_PAD (dec), + GST_OBJECT_CAST (dec), query); + } else { + GstCaps *caps; + GstCaps *allowed_caps; + GstCaps *template_caps; + gboolean accept; - gst_query_parse_accept_caps (query, &caps); + gst_query_parse_accept_caps (query, &caps); - template_caps = gst_pad_get_pad_template_caps (pad); - accept = gst_caps_is_subset (caps, template_caps); - gst_caps_unref (template_caps); + template_caps = gst_pad_get_pad_template_caps (pad); + accept = gst_caps_is_subset (caps, template_caps); + gst_caps_unref (template_caps); - if (accept) { - allowed_caps = gst_pad_query_caps (GST_AUDIO_DECODER_SINK_PAD (dec), - caps); + if (accept) { + allowed_caps = gst_pad_query_caps (GST_AUDIO_DECODER_SINK_PAD (dec), + caps); - accept = gst_caps_can_intersect (caps, allowed_caps); + accept = gst_caps_can_intersect (caps, allowed_caps); - gst_caps_unref (allowed_caps); - } + gst_caps_unref (allowed_caps); + } - gst_query_set_accept_caps_result (query, accept); - res = TRUE; + gst_query_set_accept_caps_result (query, accept); + res = TRUE; + } break; } case GST_QUERY_SEEKING: @@ -3611,3 +3620,24 @@ gst_audio_decoder_get_allocator (GstAudioDecoder * dec, if (params) *params = dec->priv->ctx.params; } + +/** + * gst_audio_decoder_set_use_default_pad_acceptcaps: + * @decoder: a #GstAudioDecoder + * @use: if the default pad accept-caps query handling should be used + * + * Lets #GstAudioDecoder sub-classes decide if they want the sink pad + * to use the default pad query handler to reply to accept-caps queries. + * + * By setting this to true it is possible to further customize the default + * handler with %GST_PAD_SET_ACCEPT_INTERSECT and + * %GST_PAD_SET_ACCEPT_TEMPLATE + * + * Since: 1.6 + */ +void +gst_audio_decoder_set_use_default_pad_acceptcaps (GstAudioDecoder * decoder, + gboolean use) +{ + decoder->priv->use_default_pad_acceptcaps = use; +} diff --git a/gst-libs/gst/audio/gstaudiodecoder.h b/gst-libs/gst/audio/gstaudiodecoder.h index 3e9fa0332..cd65b2dbc 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.h +++ b/gst-libs/gst/audio/gstaudiodecoder.h @@ -397,6 +397,9 @@ void gst_audio_decoder_merge_tags (GstAudioDecoder * dec, gboolean gst_audio_decoder_sink_query_default (GstAudioDecoder * dec, GstQuery * query); +void gst_audio_decoder_set_use_default_pad_acceptcaps (GstAudioDecoder * decoder, + gboolean use); + G_END_DECLS #endif /* _GST_AUDIO_DECODER_H_ */ diff --git a/win32/common/libgstaudio.def b/win32/common/libgstaudio.def index 39e2742fc..8ef663ea4 100644 --- a/win32/common/libgstaudio.def +++ b/win32/common/libgstaudio.def @@ -67,6 +67,7 @@ EXPORTS gst_audio_decoder_set_plc gst_audio_decoder_set_plc_aware gst_audio_decoder_set_tolerance + gst_audio_decoder_set_use_default_pad_acceptcaps gst_audio_decoder_sink_query_default gst_audio_downmix_meta_api_get_type gst_audio_downmix_meta_get_info |