summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>2015-11-05 12:39:55 +0100
committerVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>2015-11-09 16:18:44 +0100
commitea802072d1329cafdb2e4e1d6105afbbda8d4cd3 (patch)
treecbac3f90ebd15720911257d5fedfff8bc7daee8a /gst
parent75e7a0a36ce5288cb1d6c24f0c8a97aae33c546d (diff)
downloadgst-vaapi-ea802072d1329cafdb2e4e1d6105afbbda8d4cd3.tar.gz
vaapiencode: use pad query vmethods
GstVideoEncoder, the base class of vaapiencode, added support for pad queries as virtual methods since gstreamer 1.4. This patch enables those vmethods, while keeps support for previous versions of gstreamer. This patch is relevant since GstVideoEncoder takes care of other queries that we are currently ignoring. Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com> https://bugzilla.gnome.org/show_bug.cgi?id=757629
Diffstat (limited to 'gst')
-rw-r--r--gst/vaapi/gstvaapiencode.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/gst/vaapi/gstvaapiencode.c b/gst/vaapi/gstvaapiencode.c
index 14154418..a9b8b3d6 100644
--- a/gst/vaapi/gstvaapiencode.c
+++ b/gst/vaapi/gstvaapiencode.c
@@ -57,6 +57,45 @@ ensure_display (GstVaapiEncode * encode)
return gst_vaapi_plugin_base_ensure_display (GST_VAAPI_PLUGIN_BASE (encode));
}
+#if GST_CHECK_VERSION(1,4,0)
+static gboolean
+gst_vaapiencode_sink_query (GstVideoEncoder * encoder, GstQuery * query)
+{
+ gboolean ret = TRUE;
+ GstVaapiPluginBase *const plugin = GST_VAAPI_PLUGIN_BASE (encoder);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CONTEXT:
+ ret = gst_vaapi_handle_context_query (query, plugin->display);
+ break;
+ default:
+ ret = GST_VIDEO_ENCODER_CLASS (gst_vaapiencode_parent_class)->sink_query
+ (encoder, query);
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_vaapiencode_src_query (GstVideoEncoder * encoder, GstQuery * query)
+{
+ gboolean ret = TRUE;
+ GstVaapiPluginBase *const plugin = GST_VAAPI_PLUGIN_BASE (encoder);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CONTEXT:
+ ret = gst_vaapi_handle_context_query (query, plugin->display);
+ break;
+ default:
+ ret = GST_VIDEO_ENCODER_CLASS (gst_vaapiencode_parent_class)->src_query
+ (encoder, query);
+ break;
+ }
+
+ return ret;
+}
+#else
static gboolean
gst_vaapiencode_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
@@ -76,6 +115,7 @@ gst_vaapiencode_query (GstPad * pad, GstObject * parent, GstQuery * query)
gst_object_unref (plugin);
return success;
}
+#endif
typedef struct
{
@@ -610,8 +650,10 @@ gst_vaapiencode_init (GstVaapiEncode * encode)
gst_vaapi_plugin_base_init (GST_VAAPI_PLUGIN_BASE (encode), GST_CAT_DEFAULT);
+#if !GST_CHECK_VERSION(1,4,0)
gst_pad_set_query_function (plugin->sinkpad, gst_vaapiencode_query);
gst_pad_set_query_function (plugin->srcpad, gst_vaapiencode_query);
+#endif
gst_pad_use_fixed_caps (plugin->srcpad);
}
@@ -645,8 +687,13 @@ gst_vaapiencode_class_init (GstVaapiEncodeClass * klass)
klass->set_property = gst_vaapiencode_default_set_property;
klass->alloc_buffer = gst_vaapiencode_default_alloc_buffer;
+#if GST_CHECK_VERSION(1,4,0)
+ venc_class->src_query = GST_DEBUG_FUNCPTR (gst_vaapiencode_src_query);
+ venc_class->sink_query = GST_DEBUG_FUNCPTR (gst_vaapiencode_sink_query);
+#else
/* Registering debug symbols for function pointers */
GST_DEBUG_REGISTER_FUNCPTR (gst_vaapiencode_query);
+#endif
}
static inline GPtrArray *