diff options
author | Thiago Santos <thiagoss@osg.samsung.com> | 2015-08-15 07:20:25 -0300 |
---|---|---|
committer | Thiago Santos <thiagoss@osg.samsung.com> | 2015-08-15 13:44:34 -0300 |
commit | 4982188cf706a1a581afaabdcedb16f5c4f537bb (patch) | |
tree | e6fc68cf89513e8fa39f3490c081cd75f841df70 | |
parent | 95eb6418215b49163b326d3d5bf89078b5cbe5c5 (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.c | 62 | ||||
-rw-r--r-- | gst-libs/gst/video/gstvideodecoder.h | 3 | ||||
-rw-r--r-- | win32/common/libgstvideo.def | 1 |
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 |