summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Santos <thiagoss@osg.samsung.com>2015-08-15 07:20:25 -0300
committerThiago Santos <thiagoss@osg.samsung.com>2015-08-15 13:44:34 -0300
commit4982188cf706a1a581afaabdcedb16f5c4f537bb (patch)
treee6fc68cf89513e8fa39f3490c081cd75f841df70
parent95eb6418215b49163b326d3d5bf89078b5cbe5c5 (diff)
videodecoder: add option to use default pad accept-caps handling
Add gst_video_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_video_decoder_set_use_default_pad_acceptcaps
-rw-r--r--gst-libs/gst/video/gstvideodecoder.c62
-rw-r--r--gst-libs/gst/video/gstvideodecoder.h3
-rw-r--r--win32/common/libgstvideo.def1
3 files changed, 50 insertions, 16 deletions
diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
index c680722a9..99dd4ee0f 100644
--- a/gst-libs/gst/video/gstvideodecoder.c
+++ b/gst-libs/gst/video/gstvideodecoder.c
@@ -421,6 +421,9 @@ struct _GstVideoDecoderPrivate
GstTagList *tags;
gboolean tags_changed;
+
+ /* flags */
+ gboolean use_default_pad_acceptcaps;
};
static GstElementClass *parent_class = NULL;
@@ -1862,28 +1865,34 @@ gst_video_decoder_sink_query_default (GstVideoDecoder * decoder,
break;
}
case GST_QUERY_ACCEPT_CAPS:{
- GstCaps *caps;
- GstCaps *allowed_caps;
- GstCaps *template_caps;
- gboolean accept;
+ if (decoder->priv->use_default_pad_acceptcaps) {
+ res =
+ gst_pad_query_default (GST_VIDEO_DECODER_SINK_PAD (decoder),
+ GST_OBJECT_CAST (decoder), 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_VIDEO_DECODER_SINK_PAD (decoder),
- caps);
+ if (accept) {
+ allowed_caps =
+ gst_pad_query_caps (GST_VIDEO_DECODER_SINK_PAD (decoder), 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;
}
default:
@@ -4293,3 +4302,24 @@ gst_video_decoder_get_allocator (GstVideoDecoder * decoder,
if (params)
*params = decoder->priv->params;
}
+
+/**
+ * gst_video_decoder_set_use_default_pad_acceptcaps:
+ * @decoder: a #GstVideoDecoder
+ * @use: if the default pad accept-caps query handling should be used
+ *
+ * Lets #GstVideoDecoder 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_video_decoder_set_use_default_pad_acceptcaps (GstVideoDecoder * decoder,
+ gboolean use)
+{
+ decoder->priv->use_default_pad_acceptcaps = use;
+}
diff --git a/gst-libs/gst/video/gstvideodecoder.h b/gst-libs/gst/video/gstvideodecoder.h
index 779048e06..9497255b1 100644
--- a/gst-libs/gst/video/gstvideodecoder.h
+++ b/gst-libs/gst/video/gstvideodecoder.h
@@ -427,6 +427,9 @@ GstCaps * gst_video_decoder_proxy_getcaps (GstVideoDecoder * decoder,
gboolean gst_video_decoder_sink_query_default (GstVideoDecoder * decoder,
GstQuery * query);
+void gst_video_decoder_set_use_default_pad_acceptcaps (GstVideoDecoder * decoder,
+ gboolean use);
+
G_END_DECLS
diff --git a/win32/common/libgstvideo.def b/win32/common/libgstvideo.def
index ef5d6501b..65ee98458 100644
--- a/win32/common/libgstvideo.def
+++ b/win32/common/libgstvideo.def
@@ -129,6 +129,7 @@ EXPORTS
gst_video_decoder_set_needs_format
gst_video_decoder_set_output_state
gst_video_decoder_set_packetized
+ gst_video_decoder_set_use_default_pad_acceptcaps
gst_video_decoder_sink_query_default
gst_video_dither_flags_get_type
gst_video_dither_free