1147d00b335f0df0936c1a225e36b18f41b36311
[platform/upstream/gstreamer-vaapi.git] / gst-libs / gst / vaapi / gstvaapidisplay.h
1 /*
2  *  gstvaapidisplay.h - VA display abstraction
3  *
4  *  gstreamer-vaapi (C) 2010 Splitted-Desktop Systems
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19  */
20
21 #ifndef GST_VAAPI_DISPLAY_H
22 #define GST_VAAPI_DISPLAY_H
23
24 #ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
25 # include <va.h>
26 #else
27 # include <va/va.h>
28 #endif
29
30 #include <gst/gst.h>
31 #include <gst/vaapi/gstvaapiimageformat.h>
32
33 G_BEGIN_DECLS
34
35 #define GST_VAAPI_TYPE_DISPLAY \
36     (gst_vaapi_display_get_type())
37
38 #define GST_VAAPI_DISPLAY(obj)                          \
39     (G_TYPE_CHECK_INSTANCE_CAST((obj),                  \
40                                 GST_VAAPI_TYPE_DISPLAY, \
41                                 GstVaapiDisplay))
42
43 #define GST_VAAPI_DISPLAY_CLASS(klass)                  \
44     (G_TYPE_CHECK_CLASS_CAST((klass),                   \
45                              GST_VAAPI_TYPE_DISPLAY,    \
46                              GstVaapiDisplayClass))
47
48 #define GST_VAAPI_IS_DISPLAY(obj) \
49     (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_VAAPI_TYPE_DISPLAY))
50
51 #define GST_VAAPI_IS_DISPLAY_CLASS(klass) \
52     (G_TYPE_CHECK_CLASS_TYPE((klass), GST_VAAPI_TYPE_DISPLAY))
53
54 #define GST_VAAPI_DISPLAY_GET_CLASS(obj)                \
55     (G_TYPE_INSTANCE_GET_CLASS((obj),                   \
56                                GST_VAAPI_TYPE_DISPLAY,  \
57                                GstVaapiDisplayClass))
58
59 /**
60  * GST_VAAPI_DISPLAY_VADISPLAY:
61  * @display: a #GstVaapiDisplay
62  *
63  * Macro that evaluates to the #VADisplay bound to @display
64  */
65 #define GST_VAAPI_DISPLAY_VADISPLAY(display) \
66     gst_vaapi_display_get_display(display)
67
68 /**
69  * GST_VAAPI_DISPLAY_LOCK:
70  * @display: a #GstVaapiDisplay
71  *
72  * Locks @display
73  */
74 #define GST_VAAPI_DISPLAY_LOCK(display) \
75     gst_vaapi_display_lock(display)
76
77 /**
78  * GST_VAAPI_DISPLAY_UNLOCK:
79  * @display: a #GstVaapiDisplay
80  *
81  * Unlocks @display
82  */
83 #define GST_VAAPI_DISPLAY_UNLOCK(display) \
84     gst_vaapi_display_unlock(display)
85
86 typedef struct _GstVaapiDisplay                 GstVaapiDisplay;
87 typedef struct _GstVaapiDisplayPrivate          GstVaapiDisplayPrivate;
88 typedef struct _GstVaapiDisplayClass            GstVaapiDisplayClass;
89
90 /**
91  * GstVaapiDisplay:
92  *
93  * Base class for VA displays.
94  */
95 struct _GstVaapiDisplay {
96     /*< private >*/
97     GObject parent_instance;
98
99     GstVaapiDisplayPrivate *priv;
100 };
101
102 /**
103  * GstVaapiDisplayClass:
104  * @open_display: virtual function to open a display
105  * @close_display: virtual function to close a display
106  * @lock: virtual function to lock a display
107  * @unlock: virtual function to unlock a display
108  * @get_display: virtual function to retrieve the #VADisplay
109  * @get_size: virtual function to retrieve the display dimensions, in pixels
110  * @get_size_mm: virtual function to retrieve the display dimensions, in millimeters
111  *
112  * Base class for VA displays.
113  */
114 struct _GstVaapiDisplayClass {
115     /*< private >*/
116     GObjectClass parent_class;
117
118     /*< public >*/
119     gboolean   (*open_display)  (GstVaapiDisplay *display);
120     void       (*close_display) (GstVaapiDisplay *display);
121     void       (*lock)          (GstVaapiDisplay *display);
122     void       (*unlock)        (GstVaapiDisplay *display);
123     VADisplay  (*get_display)   (GstVaapiDisplay *display);
124     void       (*get_size)      (GstVaapiDisplay *display,
125                                  guint *pwidth, guint *pheight);
126     void       (*get_size_mm)   (GstVaapiDisplay *display,
127                                  guint *pwidth, guint *pheight);
128 };
129
130 GType
131 gst_vaapi_display_get_type(void);
132
133 GstVaapiDisplay *
134 gst_vaapi_display_new_with_display(VADisplay va_display);
135
136 void
137 gst_vaapi_display_lock(GstVaapiDisplay *display);
138
139 void
140 gst_vaapi_display_unlock(GstVaapiDisplay *display);
141
142 VADisplay
143 gst_vaapi_display_get_display(GstVaapiDisplay *display);
144
145 guint
146 gst_vaapi_display_get_width(GstVaapiDisplay *display);
147
148 guint
149 gst_vaapi_display_get_height(GstVaapiDisplay *display);
150
151 void
152 gst_vaapi_display_get_size(GstVaapiDisplay *display, guint *pwidth, guint *pheight);
153
154 void
155 gst_vaapi_display_get_pixel_aspect_ratio(
156     GstVaapiDisplay *display,
157     guint           *par_n,
158     guint           *par_d
159 );
160
161 gboolean
162 gst_vaapi_display_has_profile(GstVaapiDisplay *display, VAProfile profile);
163
164 GstCaps *
165 gst_vaapi_display_get_image_caps(GstVaapiDisplay *display);
166
167 gboolean
168 gst_vaapi_display_has_image_format(
169     GstVaapiDisplay    *display,
170     GstVaapiImageFormat format
171 );
172
173 GstCaps *
174 gst_vaapi_display_get_subpicture_caps(GstVaapiDisplay *display);
175
176 gboolean
177 gst_vaapi_display_has_subpicture_format(
178     GstVaapiDisplay    *display,
179     GstVaapiImageFormat format
180 );
181
182 G_END_DECLS
183
184 #endif /* GST_VAAPI_DISPLAY_H */