summaryrefslogtreecommitdiff
path: root/gst/dvbsuboverlay/gstdvbsuboverlay.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2011-11-15 16:34:13 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2011-11-15 16:34:13 +0100
commit03713e50459ba62d5b15e753907258b3ce0689c3 (patch)
tree9dc9f0614f99fe7c39d279268151fa5cdb06ee52 /gst/dvbsuboverlay/gstdvbsuboverlay.c
parentac9c7bbfefeaa66361e4817eec50eeb123e818d3 (diff)
downloadgstreamer-plugins-bad-03713e50459ba62d5b15e753907258b3ce0689c3.tar.gz
change getcaps to query
Diffstat (limited to 'gst/dvbsuboverlay/gstdvbsuboverlay.c')
-rw-r--r--gst/dvbsuboverlay/gstdvbsuboverlay.c52
1 files changed, 46 insertions, 6 deletions
diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c
index 7641f384c..a0948daf3 100644
--- a/gst/dvbsuboverlay/gstdvbsuboverlay.c
+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c
@@ -108,6 +108,7 @@ static gboolean gst_dvbsub_overlay_event_src (GstPad * pad, GstEvent * event);
static void new_dvb_subtitles_cb (DvbSub * dvb_sub, DVBSubtitles * subs,
gpointer user_data);
+static gboolean gst_dvbsub_overlay_query_video (GstPad * pad, GstQuery * query);
static gboolean gst_dvbsub_overlay_query_src (GstPad * pad, GstQuery * query);
/* initialize the plugin's class */
@@ -185,11 +186,6 @@ gst_dvbsub_overlay_init (GstDVBSubOverlay * render)
render->text_sinkpad =
gst_pad_new_from_static_template (&text_sink_factory, "text_sink");
- gst_pad_set_getcaps_function (render->srcpad,
- GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_getcaps));
- gst_pad_set_getcaps_function (render->video_sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_getcaps));
-
gst_pad_set_chain_function (render->video_sinkpad,
GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_chain_video));
gst_pad_set_chain_function (render->text_sinkpad,
@@ -202,6 +198,8 @@ gst_dvbsub_overlay_init (GstDVBSubOverlay * render)
gst_pad_set_event_function (render->srcpad,
GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_event_src));
+ gst_pad_set_query_function (render->video_sinkpad,
+ GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_query_video));
gst_pad_set_query_function (render->srcpad,
GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_query_src));
@@ -331,7 +329,22 @@ gst_dvbsub_overlay_query_src (GstPad * pad, GstQuery * query)
GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
gboolean ret;
- ret = gst_pad_peer_query (render->video_sinkpad, query);
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_dvbsub_overlay_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_peer_query (render->video_sinkpad, query);
+ break;
+ }
gst_object_unref (render);
return ret;
@@ -913,6 +926,33 @@ missing_timestamp:
}
static gboolean
+gst_dvbsub_overlay_query_video (GstPad * pad, GstQuery * query)
+{
+ GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
+ gboolean ret;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_dvbsub_overlay_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_query_default (pad, query);
+ break;
+ }
+
+ gst_object_unref (render);
+ return ret;
+}
+
+static gboolean
gst_dvbsub_overlay_event_video (GstPad * pad, GstEvent * event)
{
gboolean ret = FALSE;