From ea802072d1329cafdb2e4e1d6105afbbda8d4cd3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Thu, 5 Nov 2015 12:39:55 +0100 Subject: [PATCH] vaapiencode: use pad query vmethods MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 https://bugzilla.gnome.org/show_bug.cgi?id=757629 --- gst/vaapi/gstvaapiencode.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/gst/vaapi/gstvaapiencode.c b/gst/vaapi/gstvaapiencode.c index 1415441..a9b8b3d 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 * -- 2.7.4