};
static GstElementClass *parent_class = NULL;
+GST_VAAPI_PLUGIN_BASE_DEFINE_SET_CONTEXT (parent_class);
static gboolean gst_vaapidecode_update_sink_caps (GstVaapiDecode * decode,
GstCaps * caps);
longname = g_strdup ("VA-API decoder");
}
+ element_class->set_context = gst_vaapi_base_set_context;
gst_element_class_set_static_metadata (element_class, longname,
"Codec/Decoder/Video", GST_PLUGIN_DESC,
"Gwenole Beauchesne <gwenole.beauchesne@intel.com>, "
gst_vaapiencode, GST_TYPE_VIDEO_ENCODER,
GST_VAAPI_PLUGIN_BASE_INIT_INTERFACES);
+GST_VAAPI_PLUGIN_BASE_DEFINE_SET_CONTEXT (gst_vaapiencode_parent_class);
+
enum
{
PROP_0,
object_class->finalize = gst_vaapiencode_finalize;
+ element_class->set_context = gst_vaapi_base_set_context;
element_class->change_state =
GST_DEBUG_FUNCPTR (gst_vaapiencode_change_state);
/* Default debug category is from the subclass */
#define GST_CAT_DEFAULT (plugin->debug_category)
-static gpointer plugin_parent_class = NULL;
-
/* GstVideoContext interface */
static void
plugin_set_display (GstVaapiPluginBase * plugin, GstVaapiDisplay * display)
gst_vaapi_display_unref (display);
}
-static void
-plugin_set_context (GstElement * element, GstContext * context)
+/**
+ * gst_vaapi_plugin_base_set_context:
+ * @plugin: a #GstVaapiPluginBase instance
+ * @context: a #GstContext to set
+ *
+ * This is a common set_context() element's vmethod for all the
+ * GStreamer VA-API elements.
+ *
+ * It normally should be used through the macro
+ * #GST_VAAPI_PLUGIN_BASE_DEFINE_SET_CONTEXT()
+ **/
+void
+gst_vaapi_plugin_base_set_context (GstVaapiPluginBase * plugin,
+ GstContext * context)
{
- GstVaapiPluginBase *const plugin = GST_VAAPI_PLUGIN_BASE (element);
- GstElementClass *element_class = GST_ELEMENT_CLASS (plugin_parent_class);
GstVaapiDisplay *display = NULL;
if (gst_vaapi_video_context_get_display (context, &display))
plugin_set_display (plugin, display);
-
- if (element_class->set_context)
- element_class->set_context (element, context);
}
void
void
gst_vaapi_plugin_base_class_init (GstVaapiPluginBaseClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
klass->has_interface = default_has_interface;
klass->display_changed = default_display_changed;
-
- plugin_parent_class = g_type_class_peek_parent (klass);
-
- element_class->set_context = GST_DEBUG_FUNCPTR (plugin_set_context);
}
void
(gst_vaapi_display_replace(&GST_VAAPI_PLUGIN_BASE_DISPLAY(plugin), \
(new_display)))
+#define GST_VAAPI_PLUGIN_BASE_DEFINE_SET_CONTEXT(parent_class) \
+ static void \
+ gst_vaapi_base_set_context (GstElement * element, GstContext * context) \
+ { \
+ GstVaapiPluginBase *const plugin = GST_VAAPI_PLUGIN_BASE (element); \
+ \
+ gst_vaapi_plugin_base_set_context (plugin, context); \
+ GST_ELEMENT_CLASS (parent_class)->set_context (element, context); \
+ }
+
struct _GstVaapiPluginBase
{
/*< private >*/
G_GNUC_INTERNAL
void
+gst_vaapi_plugin_base_set_context (GstVaapiPluginBase * plugin,
+ GstContext * context);
+
+G_GNUC_INTERNAL
+void
gst_vaapi_plugin_base_set_gl_context (GstVaapiPluginBase * plugin,
GstObject * object);
G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
gst_vaapipostproc_colorbalance_init));
+GST_VAAPI_PLUGIN_BASE_DEFINE_SET_CONTEXT (gst_vaapipostproc_parent_class);
+
static GstVideoFormat native_formats[] =
{ GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_I420 };
trans_class->prepare_output_buffer = gst_vaapipostproc_prepare_output_buffer;
+ element_class->set_context = gst_vaapi_base_set_context;
gst_element_class_set_static_metadata (element_class,
"VA-API video postprocessing",
"Filter/Converter/Video;Filter/Converter/Video/Scaler;"
G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION,
gst_vaapisink_navigation_iface_init));
+GST_VAAPI_PLUGIN_BASE_DEFINE_SET_CONTEXT (gst_vaapisink_parent_class);
+
enum
{
HANDOFF_SIGNAL,
videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_vaapisink_show_frame);
+ element_class->set_context = gst_vaapi_base_set_context;
element_class->set_bus = gst_vaapisink_set_bus;
gst_element_class_set_static_metadata (element_class,
"VA-API sink", "Sink/Video", GST_PLUGIN_DESC,