Merge commit 'origin/gallium-master-merge'
[mesa.git] / src / xvmc / block.c
1 #include <assert.h>
2 #include <X11/Xlib.h>
3 #include <X11/extensions/XvMC.h>
4 #include <util/u_memory.h>
5 #include <vl_display.h>
6 #include <vl_screen.h>
7 #include <vl_context.h>
8
9 #define BLOCK_SIZE (64 * 2)
10
11 Status XvMCCreateBlocks(Display *display, XvMCContext *context, unsigned int num_blocks, XvMCBlockArray *blocks)
12 {
13 struct vlContext *vl_ctx;
14
15 assert(display);
16
17 if (!context)
18 return XvMCBadContext;
19 if (num_blocks == 0)
20 return BadValue;
21
22 assert(blocks);
23
24 vl_ctx = context->privData;
25 assert(display == vlGetNativeDisplay(vlGetDisplay(vlContextGetScreen(vl_ctx))));
26
27 blocks->context_id = context->context_id;
28 blocks->num_blocks = num_blocks;
29 blocks->blocks = MALLOC(BLOCK_SIZE * num_blocks);
30 /* Since we don't have a VL type for blocks, set privData to the display so we can catch mismatches */
31 blocks->privData = display;
32
33 return Success;
34 }
35
36 Status XvMCDestroyBlocks(Display *display, XvMCBlockArray *blocks)
37 {
38 assert(display);
39 assert(blocks);
40 assert(display == blocks->privData);
41 FREE(blocks->blocks);
42
43 return Success;
44 }
45
46 Status XvMCCreateMacroBlocks(Display *display, XvMCContext *context, unsigned int num_blocks, XvMCMacroBlockArray *blocks)
47 {
48 struct vlContext *vl_ctx;
49
50 assert(display);
51
52 if (!context)
53 return XvMCBadContext;
54 if (num_blocks == 0)
55 return BadValue;
56
57 assert(blocks);
58
59 vl_ctx = context->privData;
60 assert(display == vlGetNativeDisplay(vlGetDisplay(vlContextGetScreen(vl_ctx))));
61
62 blocks->context_id = context->context_id;
63 blocks->num_blocks = num_blocks;
64 blocks->macro_blocks = MALLOC(sizeof(XvMCMacroBlock) * num_blocks);
65 /* Since we don't have a VL type for blocks, set privData to the display so we can catch mismatches */
66 blocks->privData = display;
67
68 return Success;
69 }
70
71 Status XvMCDestroyMacroBlocks(Display *display, XvMCMacroBlockArray *blocks)
72 {
73 assert(display);
74 assert(blocks);
75 assert(display == blocks->privData);
76 FREE(blocks->macro_blocks);
77
78 return Success;
79 }