vaapi: add support for global-alpha subpictures.
[hwdecode-demos:vj-hwdecode-demos.git] / src / common.h
1 /*
2  *  common.h - Common code
3  *
4  *  hwdecode-demos (C) 2009-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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #ifndef HWDECODE_DEMOS_COMMON_H
22 #define HWDECODE_DEMOS_COMMON_H
23
24 #include "image.h"
25
26 enum HWAccelType {
27     HWACCEL_NONE,
28     HWACCEL_VAAPI,
29     HWACCEL_VDPAU,
30     HWACCEL_XVBA
31 };
32
33 enum DisplayType {
34     DISPLAY_X11 = 1,
35     DISPLAY_GLX
36 };
37
38 enum RotationMode {
39     ROTATION_NONE = 0,
40     ROTATION_90,
41     ROTATION_180,
42     ROTATION_270
43 };
44
45 enum GenImageType {
46     GENIMAGE_AUTO = 0,  /* automatic selection   */
47     GENIMAGE_RECTS,     /* random rectangles     */
48     GENIMAGE_RGB_RECTS, /* R/G/B rectangles      */
49     GENIMAGE_FLOWERS    /* flowers (needs Cairo) */
50 };
51
52 enum GetImageMode {
53     GETIMAGE_NONE = 0,
54     GETIMAGE_FROM_VIDEO,
55     GETIMAGE_FROM_OUTPUT,
56     GETIMAGE_FROM_PIXMAP
57 };
58
59 enum PutImageMode {
60     PUTIMAGE_NONE = 0,
61     PUTIMAGE_OVERRIDE,
62     PUTIMAGE_BLEND
63 };
64
65 enum TextureTarget {
66     TEXTURE_TARGET_2D = 1,
67     TEXTURE_TARGET_RECT
68 };
69
70 typedef struct _Size Size;
71
72 struct _Size {
73     unsigned int        width;
74     unsigned int        height;
75 };
76
77 typedef struct _Rectangle Rectangle;
78
79 struct _Rectangle {
80     int                 x;
81     int                 y;
82     unsigned int        width;
83     unsigned int        height;
84 };
85
86 typedef struct _CommonContext CommonContext;
87
88 struct _CommonContext {
89     enum HWAccelType    hwaccel_type;
90     enum DisplayType    display_type;
91     Size                window_size;
92     unsigned int        use_subwindow_rect;
93     Rectangle           subwindow_rect;
94     enum RotationMode   rotation;
95
96     Image              *image;
97     enum GenImageType   genimage_type;
98     enum GetImageMode   getimage_mode;
99     uint32_t            getimage_format;
100     unsigned int        use_getimage_rect;
101     Rectangle           getimage_rect;
102     enum PutImageMode   putimage_mode;
103     uint32_t            putimage_format;
104     Size                putimage_size;
105
106     Rectangle          *cliprects;
107     unsigned int        cliprects_size;
108     unsigned int        cliprects_count;
109     Image              *cliprects_image;
110
111     unsigned int        use_clipping;
112     unsigned int        multi_rendering;
113     unsigned int        vaapi_derive_image;
114     unsigned int        use_vaapi_putsurface_source_rect;
115     Rectangle           vaapi_putsurface_source_rect;
116     unsigned int        use_vaapi_putsurface_target_rect;
117     Rectangle           vaapi_putsurface_target_rect;
118     unsigned int        use_vaapi_putsurface_flags;
119     unsigned int        vaapi_putsurface_flags;
120     unsigned int        use_vaapi_subpicture_source_rect;
121     Rectangle           vaapi_subpicture_source_rect;
122     unsigned int        use_vaapi_subpicture_target_rect;
123     Rectangle           vaapi_subpicture_target_rect;
124     unsigned int        use_vaapi_subpicture_flags;
125     unsigned int        vaapi_subpicture_flags;
126     float               vaapi_subpicture_alpha;
127     unsigned int        vaapi_putimage_scaled;
128     unsigned int        use_vaapi_background_color;
129     unsigned int        vaapi_background_color;
130     unsigned int        vaapi_multi_subpictures;
131     unsigned int        vaapi_glx_use_copy;
132     unsigned int        vdpau_layers;
133     unsigned int        vdpau_hqscaling;
134     unsigned int        vdpau_glx_video_surface;
135     unsigned int        vdpau_glx_output_surface;
136     enum TextureTarget  glx_texture_target;
137     unsigned int        glx_texture_format;
138     Size                glx_texture_size;
139     unsigned int        use_glx_texture_size;
140     unsigned int        glx_use_fbo;
141     unsigned int        glx_use_reflection;
142     unsigned int        crystalhd_output_nocopy;
143     unsigned int        crystalhd_flush;
144 };
145
146 CommonContext *common_get_context(void);
147
148 int common_init_decoder(unsigned int picture_width, unsigned int picture_height);
149 int common_display(void);
150
151 int pre(void);
152 int post(void);
153 int decode(void);
154 int display(void);
155
156 enum HWAccelType hwaccel_type(void);
157 enum DisplayType display_type(void);
158 enum GetImageMode getimage_mode(void);
159 uint32_t getimage_format(void);
160 enum PutImageMode putimage_mode(void);
161 uint32_t putimage_format(void);
162
163 #endif /* HWDECODE_DEMOS_COMMON_H */