Merge branch 'mesa_7_6_branch'
[mesa.git] / src / gallium / state_trackers / xorg / xvmc / subpicture.c
1 #include <assert.h>
2 #include <X11/Xlibint.h>
3 #include <X11/extensions/XvMClib.h>
4
5 Status XvMCCreateSubpicture(Display *dpy, XvMCContext *context, XvMCSubpicture *subpicture,
6 unsigned short width, unsigned short height, int xvimage_id)
7 {
8 assert(dpy);
9
10 if (!context)
11 return XvMCBadContext;
12
13 assert(subpicture);
14
15 /*if (width > || height > )
16 return BadValue;*/
17
18 /*if (xvimage_id != )
19 return BadMatch;*/
20
21 subpicture->subpicture_id = XAllocID(dpy);
22 subpicture->context_id = context->context_id;
23 subpicture->xvimage_id = xvimage_id;
24 subpicture->width = width;
25 subpicture->height = height;
26 subpicture->num_palette_entries = 0;
27 subpicture->entry_bytes = 0;
28 subpicture->component_order[0] = 0;
29 subpicture->component_order[1] = 0;
30 subpicture->component_order[2] = 0;
31 subpicture->component_order[3] = 0;
32 /* TODO: subpicture->privData = ;*/
33
34 SyncHandle();
35
36 return Success;
37 }
38
39 Status XvMCClearSubpicture(Display *dpy, XvMCSubpicture *subpicture, short x, short y,
40 unsigned short width, unsigned short height, unsigned int color)
41 {
42 assert(dpy);
43
44 if (!subpicture)
45 return XvMCBadSubpicture;
46
47 /* TODO: Assert clear rect is within bounds? Or clip? */
48
49 return Success;
50 }
51
52 Status XvMCCompositeSubpicture(Display *dpy, XvMCSubpicture *subpicture, XvImage *image,
53 short srcx, short srcy, unsigned short width, unsigned short height,
54 short dstx, short dsty)
55 {
56 assert(dpy);
57
58 if (!subpicture)
59 return XvMCBadSubpicture;
60
61 assert(image);
62
63 if (subpicture->xvimage_id != image->id)
64 return BadMatch;
65
66 /* TODO: Assert rects are within bounds? Or clip? */
67
68 return Success;
69 }
70
71 Status XvMCDestroySubpicture(Display *dpy, XvMCSubpicture *subpicture)
72 {
73 assert(dpy);
74
75 if (!subpicture)
76 return XvMCBadSubpicture;
77
78 return BadImplementation;
79 }
80
81 Status XvMCSetSubpicturePalette(Display *dpy, XvMCSubpicture *subpicture, unsigned char *palette)
82 {
83 assert(dpy);
84
85 if (!subpicture)
86 return XvMCBadSubpicture;
87
88 assert(palette);
89
90 /* We don't support paletted subpictures */
91 return BadMatch;
92 }
93
94 Status XvMCBlendSubpicture(Display *dpy, XvMCSurface *target_surface, XvMCSubpicture *subpicture,
95 short subx, short suby, unsigned short subw, unsigned short subh,
96 short surfx, short surfy, unsigned short surfw, unsigned short surfh)
97 {
98 assert(dpy);
99
100 if (!target_surface)
101 return XvMCBadSurface;
102
103 if (!subpicture)
104 return XvMCBadSubpicture;
105
106 if (target_surface->context_id != subpicture->context_id)
107 return BadMatch;
108
109 /* TODO: Assert rects are within bounds? Or clip? */
110 return Success;
111 }
112
113 Status XvMCBlendSubpicture2(Display *dpy, XvMCSurface *source_surface, XvMCSurface *target_surface,
114 XvMCSubpicture *subpicture, short subx, short suby, unsigned short subw, unsigned short subh,
115 short surfx, short surfy, unsigned short surfw, unsigned short surfh)
116 {
117 assert(dpy);
118
119 if (!source_surface || !target_surface)
120 return XvMCBadSurface;
121
122 if (!subpicture)
123 return XvMCBadSubpicture;
124
125 if (source_surface->context_id != subpicture->context_id)
126 return BadMatch;
127
128 if (source_surface->context_id != subpicture->context_id)
129 return BadMatch;
130
131 /* TODO: Assert rects are within bounds? Or clip? */
132 return Success;
133 }
134
135 Status XvMCSyncSubpicture(Display *dpy, XvMCSubpicture *subpicture)
136 {
137 assert(dpy);
138
139 if (!subpicture)
140 return XvMCBadSubpicture;
141
142 return Success;
143 }
144
145 Status XvMCFlushSubpicture(Display *dpy, XvMCSubpicture *subpicture)
146 {
147 assert(dpy);
148
149 if (!subpicture)
150 return XvMCBadSubpicture;
151
152 return Success;
153 }
154
155 Status XvMCGetSubpictureStatus(Display *dpy, XvMCSubpicture *subpicture, int *status)
156 {
157 assert(dpy);
158
159 if (!subpicture)
160 return XvMCBadSubpicture;
161
162 assert(status);
163
164 /* TODO */
165 *status = 0;
166
167 return Success;
168 }