2 * gstvaapipluginbase.h - Base GStreamer VA-API Plugin element
4 * Copyright (C) 2010-2011 Splitted-Desktop Systems
5 * Author: Gwenole Beauchesne <gwenole.beauchesne@splitted-desktop.com>
6 * Copyright (C) 2011-2013 Intel Corporation
7 * Author: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public License
11 * as published by the Free Software Foundation; either version 2.1
12 * of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free
21 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301 USA
25 #ifndef GST_VAAPI_PLUGIN_BASE_H
26 #define GST_VAAPI_PLUGIN_BASE_H
28 #include <gst/base/gstbasetransform.h>
29 #include <gst/video/gstvideodecoder.h>
30 #include <gst/video/gstvideoencoder.h>
31 #include <gst/video/gstvideosink.h>
32 #include <gst/vaapi/gstvaapidisplay.h>
36 typedef struct _GstVaapiPluginBase GstVaapiPluginBase;
37 typedef struct _GstVaapiPluginBaseClass GstVaapiPluginBaseClass;
39 #define GST_VAAPI_PLUGIN_BASE(plugin) \
40 ((GstVaapiPluginBase *)(plugin))
41 #define GST_VAAPI_PLUGIN_BASE_CLASS(plugin) \
42 ((GstVaapiPluginBaseClass *)(plugin))
43 #define GST_VAAPI_PLUGIN_BASE_GET_CLASS(plugin) \
44 GST_VAAPI_PLUGIN_BASE_CLASS(GST_ELEMENT_GET_CLASS( \
45 GST_VAAPI_PLUGIN_BASE_ELEMENT(plugin)))
46 #define GST_VAAPI_PLUGIN_BASE_PARENT(plugin) \
47 (&GST_VAAPI_PLUGIN_BASE(plugin)->parent_instance)
48 #define GST_VAAPI_PLUGIN_BASE_PARENT_CLASS(plugin) \
49 (&GST_VAAPI_PLUGIN_BASE_CLASS(plugin)->parent_class)
50 #define GST_VAAPI_PLUGIN_BASE_ELEMENT(plugin) \
51 (&GST_VAAPI_PLUGIN_BASE_PARENT(plugin)->element)
52 #define GST_VAAPI_PLUGIN_BASE_ELEMENT_CLASS(plugin) \
53 (&GST_VAAPI_PLUGIN_BASE_PARENT_CLASS(plugin)->element)
54 #define GST_VAAPI_PLUGIN_BASE_DECODER(plugin) \
55 (&GST_VAAPI_PLUGIN_BASE_PARENT(plugin)->decoder)
56 #define GST_VAAPI_PLUGIN_BASE_DECODER_CLASS(plugin) \
57 (&GST_VAAPI_PLUGIN_BASE_PARENT_CLASS(plugin)->decoder)
58 #define GST_VAAPI_PLUGIN_BASE_ENCODER(plugin) \
59 (&GST_VAAPI_PLUGIN_BASE_PARENT(plugin)->encoder)
60 #define GST_VAAPI_PLUGIN_BASE_ENCODER_CLASS(plugin) \
61 (&GST_VAAPI_PLUGIN_BASE_PARENT_CLASS(plugin)->encoder)
62 #define GST_VAAPI_PLUGIN_BASE_TRANSFORM(plugin) \
63 (&GST_VAAPI_PLUGIN_BASE_PARENT(plugin)->transform)
64 #define GST_VAAPI_PLUGIN_BASE_TRANSFORM_CLASS(plugin) \
65 (&GST_VAAPI_PLUGIN_BASE_PARENT_CLASS(plugin)->transform)
66 #define GST_VAAPI_PLUGIN_BASE_SINK(plugin) \
67 (&GST_VAAPI_PLUGIN_BASE_PARENT(plugin)->sink)
68 #define GST_VAAPI_PLUGIN_BASE_SINK_CLASS(plugin) \
69 (&GST_VAAPI_PLUGIN_BASE_PARENT_CLASS(plugin)->sink)
71 #define GST_VAAPI_PLUGIN_BASE_DISPLAY(plugin) \
72 (GST_VAAPI_PLUGIN_BASE(plugin)->display)
73 #define GST_VAAPI_PLUGIN_BASE_DISPLAY_REPLACE(plugin, new_display) \
74 (gst_vaapi_display_replace(&GST_VAAPI_PLUGIN_BASE_DISPLAY(plugin), \
77 struct _GstVaapiPluginBase
83 GstVideoDecoder decoder;
84 GstVideoEncoder encoder;
85 GstBaseTransform transform;
89 GstDebugCategory *debug_category;
91 GstVaapiDisplay *display;
94 struct _GstVaapiPluginBaseClass
99 GstElementClass element;
100 GstVideoDecoderClass decoder;
101 GstVideoEncoderClass encoder;
102 GstBaseTransformClass transform;
103 GstVideoSinkClass sink;
109 gst_vaapi_plugin_base_class_init (GstVaapiPluginBaseClass * klass);
113 gst_vaapi_plugin_base_init (GstVaapiPluginBase * plugin,
114 GstDebugCategory * debug_category);
118 gst_vaapi_plugin_base_finalize (GstVaapiPluginBase * plugin);
122 gst_vaapi_plugin_base_open (GstVaapiPluginBase * plugin);
126 gst_vaapi_plugin_base_close (GstVaapiPluginBase * plugin);
130 #endif /* GST_VAAPI_PLUGIN_BASE_H */