1706f2543Smrg
2706f2543Smrg#ifndef _XVMC_H
3706f2543Smrg#define _XVMC_H
4706f2543Smrg#include <X11/extensions/Xv.h>
5706f2543Smrg#include "xvdix.h"
6706f2543Smrg
7706f2543Smrgtypedef struct {
8706f2543Smrg  int num_xvimages;
9706f2543Smrg  int *xvimage_ids;
10706f2543Smrg} XvMCImageIDList;
11706f2543Smrg
12706f2543Smrgtypedef struct {
13706f2543Smrg  int surface_type_id;
14706f2543Smrg  int chroma_format;
15706f2543Smrg  int color_description;
16706f2543Smrg  unsigned short max_width;
17706f2543Smrg  unsigned short max_height;
18706f2543Smrg  unsigned short subpicture_max_width;
19706f2543Smrg  unsigned short subpicture_max_height;
20706f2543Smrg  int mc_type;
21706f2543Smrg  int flags;
22706f2543Smrg  XvMCImageIDList *compatible_subpictures;
23706f2543Smrg} XvMCSurfaceInfoRec, *XvMCSurfaceInfoPtr;
24706f2543Smrg
25706f2543Smrgtypedef struct {
26706f2543Smrg  XID context_id;
27706f2543Smrg  ScreenPtr pScreen;
28706f2543Smrg  int adapt_num;
29706f2543Smrg  int surface_type_id;
30706f2543Smrg  unsigned short width;
31706f2543Smrg  unsigned short height;
32706f2543Smrg  CARD32 flags;
33706f2543Smrg  int refcnt;
34706f2543Smrg  pointer port_priv;
35706f2543Smrg  pointer driver_priv;
36706f2543Smrg} XvMCContextRec, *XvMCContextPtr;
37706f2543Smrg
38706f2543Smrgtypedef struct {
39706f2543Smrg  XID surface_id;
40706f2543Smrg  int surface_type_id;
41706f2543Smrg  XvMCContextPtr context;
42706f2543Smrg  pointer driver_priv;
43706f2543Smrg} XvMCSurfaceRec, *XvMCSurfacePtr;
44706f2543Smrg
45706f2543Smrg
46706f2543Smrgtypedef struct {
47706f2543Smrg  XID subpicture_id;
48706f2543Smrg  int xvimage_id;
49706f2543Smrg  unsigned short width;
50706f2543Smrg  unsigned short height;
51706f2543Smrg  int num_palette_entries;
52706f2543Smrg  int entry_bytes;
53706f2543Smrg  char component_order[4];
54706f2543Smrg  XvMCContextPtr context;
55706f2543Smrg  pointer driver_priv;
56706f2543Smrg} XvMCSubpictureRec, *XvMCSubpicturePtr;
57706f2543Smrg
58706f2543Smrgtypedef int (*XvMCCreateContextProcPtr) (
59706f2543Smrg  XvPortPtr port,
60706f2543Smrg  XvMCContextPtr context,
61706f2543Smrg  int *num_priv,
62706f2543Smrg  CARD32 **priv
63706f2543Smrg);
64706f2543Smrg
65706f2543Smrgtypedef void (*XvMCDestroyContextProcPtr) (
66706f2543Smrg  XvMCContextPtr context
67706f2543Smrg);
68706f2543Smrg
69706f2543Smrgtypedef int (*XvMCCreateSurfaceProcPtr) (
70706f2543Smrg  XvMCSurfacePtr surface,
71706f2543Smrg  int *num_priv,
72706f2543Smrg  CARD32 **priv
73706f2543Smrg);
74706f2543Smrg
75706f2543Smrgtypedef void (*XvMCDestroySurfaceProcPtr) (
76706f2543Smrg  XvMCSurfacePtr surface
77706f2543Smrg);
78706f2543Smrg
79706f2543Smrgtypedef int (*XvMCCreateSubpictureProcPtr) (
80706f2543Smrg  XvMCSubpicturePtr subpicture,
81706f2543Smrg  int *num_priv,
82706f2543Smrg  CARD32 **priv
83706f2543Smrg);
84706f2543Smrg
85706f2543Smrgtypedef void (*XvMCDestroySubpictureProcPtr) (
86706f2543Smrg  XvMCSubpicturePtr subpicture
87706f2543Smrg);
88706f2543Smrg
89706f2543Smrg
90706f2543Smrgtypedef struct {
91706f2543Smrg  XvAdaptorPtr			    xv_adaptor;
92706f2543Smrg  int				    num_surfaces;
93706f2543Smrg  XvMCSurfaceInfoPtr		    *surfaces;
94706f2543Smrg  int				    num_subpictures;
95706f2543Smrg  XvImagePtr			    *subpictures;
96706f2543Smrg  XvMCCreateContextProcPtr          CreateContext;
97706f2543Smrg  XvMCDestroyContextProcPtr         DestroyContext;
98706f2543Smrg  XvMCCreateSurfaceProcPtr          CreateSurface;
99706f2543Smrg  XvMCDestroySurfaceProcPtr         DestroySurface;
100706f2543Smrg  XvMCCreateSubpictureProcPtr       CreateSubpicture;
101706f2543Smrg  XvMCDestroySubpictureProcPtr      DestroySubpicture;
102706f2543Smrg} XvMCAdaptorRec, *XvMCAdaptorPtr;
103706f2543Smrg
104706f2543Smrg#ifndef XorgLoader
105706f2543Smrgextern _X_EXPORT void XvMCExtensionInit(void);
106706f2543Smrg
107706f2543Smrgextern _X_EXPORT int XvMCScreenInit(ScreenPtr pScreen,
108706f2543Smrg				    int num,
109706f2543Smrg				    XvMCAdaptorPtr adapt);
110706f2543Smrg
111706f2543Smrgextern _X_EXPORT XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id);
112706f2543Smrg
113706f2543Smrgextern _X_EXPORT int xf86XvMCRegisterDRInfo(ScreenPtr pScreen, char *name,
114706f2543Smrg			   char *busID, int major, int minor,
115706f2543Smrg			   int patchLevel);
116706f2543Smrg#endif
117706f2543Smrg
118706f2543Smrg#endif /* _XVMC_H */
119