xvmc: Generate new resource ID in _XIDHandler, otherwise it's invalid.
[mesa.git] / src / xvmc / subpicture.c
1 #include <assert.h>
2 #include <X11/Xlib.h>
3 #include <X11/extensions/Xvlib.h>
4 #include <X11/extensions/XvMC.h>
5 #include <X11/Xlibint.h>
6
7 Status XvMCCreateSubpicture
8 (
9 Display *display,
10 XvMCContext *context,
11 XvMCSubpicture *subpicture,
12 unsigned short width,
13 unsigned short height,
14 int xvimage_id
15 )
16 {
17 Display *dpy = display;
18 assert(display);
19
20 if (!context)
21 return XvMCBadContext;
22
23 assert(subpicture);
24
25 if (width > 2048 || height > 2048)
26 return BadValue;
27
28 if (xvimage_id != 123)
29 return BadMatch;
30
31 subpicture->subpicture_id = XAllocID(display);
32 subpicture->context_id = context->context_id;
33 subpicture->xvimage_id = xvimage_id;
34 subpicture->width = width;
35 subpicture->height = height;
36 subpicture->num_palette_entries = 0;
37 subpicture->entry_bytes = 0;
38 subpicture->component_order[0] = 0;
39 subpicture->component_order[1] = 0;
40 subpicture->component_order[2] = 0;
41 subpicture->component_order[3] = 0;
42 /* TODO: subpicture->privData = ;*/
43
44 SyncHandle();
45 return Success;
46 }
47
48 Status XvMCClearSubpicture
49 (
50 Display *display,
51 XvMCSubpicture *subpicture,
52 short x,
53 short y,
54 unsigned short width,
55 unsigned short height,
56 unsigned int color
57 )
58 {
59 assert(display);
60
61 if (!subpicture)
62 return XvMCBadSubpicture;
63
64 /* TODO: Assert clear rect is within bounds? Or clip? */
65
66 return Success;
67 }
68
69 Status XvMCCompositeSubpicture
70 (
71 Display *display,
72 XvMCSubpicture *subpicture,
73 XvImage *image,
74 short srcx,
75 short srcy,
76 unsigned short width,
77 unsigned short height,
78 short dstx,
79 short dsty
80 )
81 {
82 assert(display);
83
84 if (!subpicture)
85 return XvMCBadSubpicture;
86
87 assert(image);
88
89 if (subpicture->xvimage_id != image->id)
90 return BadMatch;
91
92 /* TODO: Assert rects are within bounds? Or clip? */
93
94 return Success;
95 }
96
97 Status XvMCDestroySubpicture(Display *display, XvMCSubpicture *subpicture)
98 {
99 assert(display);
100
101 if (!subpicture)
102 return XvMCBadSubpicture;
103
104 return BadImplementation;
105 }
106
107 Status XvMCSetSubpicturePalette(Display *display, XvMCSubpicture *subpicture, unsigned char *palette)
108 {
109 assert(display);
110
111 if (!subpicture)
112 return XvMCBadSubpicture;
113
114 assert(palette);
115
116 /* We don't support paletted subpictures */
117 return BadMatch;
118 }
119
120 Status XvMCBlendSubpicture
121 (
122 Display *display,
123 XvMCSurface *target_surface,
124 XvMCSubpicture *subpicture,
125 short subx,
126 short suby,
127 unsigned short subw,
128 unsigned short subh,
129 short surfx,
130 short surfy,
131 unsigned short surfw,
132 unsigned short surfh
133 )
134 {
135 assert(display);
136
137 if (!target_surface)
138 return XvMCBadSurface;
139
140 if (!subpicture)
141 return XvMCBadSubpicture;
142
143 if (target_surface->context_id != subpicture->context_id)
144 return BadMatch;
145
146 /* TODO: Assert rects are within bounds? Or clip? */
147 return Success;
148 }
149
150 Status XvMCBlendSubpicture2
151 (
152 Display *display,
153 XvMCSurface *source_surface,
154 XvMCSurface *target_surface,
155 XvMCSubpicture *subpicture,
156 short subx,
157 short suby,
158 unsigned short subw,
159 unsigned short subh,
160 short surfx,
161 short surfy,
162 unsigned short surfw,
163 unsigned short surfh
164 )
165 {
166 assert(display);
167
168 if (!source_surface || !target_surface)
169 return XvMCBadSurface;
170
171 if (!subpicture)
172 return XvMCBadSubpicture;
173
174 if (source_surface->context_id != subpicture->context_id)
175 return BadMatch;
176
177 if (source_surface->context_id != subpicture->context_id)
178 return BadMatch;
179
180 /* TODO: Assert rects are within bounds? Or clip? */
181 return Success;
182 }
183
184 Status XvMCSyncSubpicture(Display *display, XvMCSubpicture *subpicture)
185 {
186 assert(display);
187
188 if (!subpicture)
189 return XvMCBadSubpicture;
190
191 return Success;
192 }
193
194 Status XvMCFlushSubpicture(Display *display, XvMCSubpicture *subpicture)
195 {
196 assert(display);
197
198 if (!subpicture)
199 return XvMCBadSubpicture;
200
201 return Success;
202 }
203
204 Status XvMCGetSubpictureStatus(Display *display, XvMCSubpicture *subpicture, int *status)
205 {
206 assert(display);
207
208 if (!subpicture)
209 return XvMCBadSubpicture;
210
211 assert(status);
212
213 /* TODO */
214 *status = 0;
215
216 return Success;
217 }
218