summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Santos <thiagoss@osg.samsung.com>2015-08-15 07:31:54 -0300
committerThiago Santos <thiagoss@osg.samsung.com>2015-08-15 13:44:34 -0300
commit33b1da7b802346550bb4b44ed1eba8865b49612c (patch)
treeb0efb0c53b106861d84a10fdb3ff176fe5d1b68d
parent4982188cf706a1a581afaabdcedb16f5c4f537bb (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.c62
-rw-r--r--gst-libs/gst/audio/gstaudiodecoder.h3
-rw-r--r--win32/common/libgstaudio.def1
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