#ifndef _XVMCLIB_H_
#define _XVMCLIB_H_

#include <X11/Xfuncproto.h>
#include <X11/extensions/Xvlib.h>
#include <X11/extensions/XvMC.h>

_XFUNCPROTOBEGIN

Bool XvMCQueryExtension (Display *display, int *eventBase, int *errBase);
Status XvMCQueryVersion (Display *display, int *major_versionp,
			 int *minor_versionp);
Status XvMCGetDRInfo(Display *dpy, XvPortID port,
		     char **name, char **busID,
		     int *major, int *minor,
		     int *patchLevel,
		     int *isLocal);


XvMCSurfaceInfo * XvMCListSurfaceTypes(Display *dpy, XvPortID port, int *num);

Status XvMCCreateContext (
   Display *display,
   XvPortID port,
   int surface_type_id,
   int width,
   int height,
   int flags,
   XvMCContext * context
);

Status XvMCDestroyContext (Display *display, XvMCContext * context);

Status
XvMCCreateSurface(
  Display *display,
  XvMCContext * context,
  XvMCSurface * surface
);

Status XvMCDestroySurface(Display *display, XvMCSurface *surface);

XvImageFormatValues * XvMCListSubpictureTypes (
  Display * display,
  XvPortID port,
  int surface_type_id,
  int *count_return
);

Status
XvMCPutSurface(
  Display *display,
  XvMCSurface *surface,
  Drawable draw,
  short srcx,
  short srcy,
  unsigned short srcw,
  unsigned short srch,
  short destx,
  short desty,
  unsigned short destw,
  unsigned short desth,
  int flags
);

Status XvMCHideSurface(Display *display, XvMCSurface *surface);

Status
XvMCCreateSubpicture (
   Display *display,
   XvMCContext *context,
   XvMCSubpicture *subpicture,
   unsigned short width,
   unsigned short height,
   int xvimage_id
);


Status
XvMCClearSubpicture (
  Display *display,
  XvMCSubpicture *subpicture,
  short x,
  short y,
  unsigned short width,
  unsigned short height,
  unsigned int color
);

Status
XvMCCompositeSubpicture (
   Display *display,
   XvMCSubpicture *subpicture,
   XvImage *image,
   short srcx,
   short srcy,
   unsigned short width,
   unsigned short height,
   short dstx,
   short dsty
);

Status
XvMCDestroySubpicture (Display *display, XvMCSubpicture *subpicture);

Status
XvMCSetSubpicturePalette (
  Display *display,
  XvMCSubpicture *subpicture,
  unsigned char *palette
);

Status
XvMCBlendSubpicture (
   Display *display,
   XvMCSurface *target_surface,
   XvMCSubpicture *subpicture,
   short subx,
   short suby,
   unsigned short subw,
   unsigned short subh,
   short surfx,
   short surfy,
   unsigned short surfw,
   unsigned short surfh
);

Status
XvMCBlendSubpicture2 (
   Display *display,
   XvMCSurface *source_surface,
   XvMCSurface *target_surface,
   XvMCSubpicture *subpicture,
   short subx,
   short suby,
   unsigned short subw,
   unsigned short subh,
   short surfx,
   short surfy,
   unsigned short surfw,
   unsigned short surfh
);

Status XvMCSyncSurface (Display *display, XvMCSurface *surface);
Status XvMCFlushSurface (Display *display, XvMCSurface *surface);
Status XvMCGetSurfaceStatus (Display *display, XvMCSurface *surface, int *stat);

Status XvMCRenderSurface (
   Display *display,
   XvMCContext *context,
   unsigned int picture_structure,
   XvMCSurface *target_surface,
   XvMCSurface *past_surface,
   XvMCSurface *future_surface,
   unsigned int flags,
   unsigned int num_macroblocks,
   unsigned int first_macroblock,
   XvMCMacroBlockArray *macroblock_array,
   XvMCBlockArray *blocks
);


Status XvMCSyncSubpicture (Display *display, XvMCSubpicture *subpicture);
Status XvMCFlushSubpicture (Display *display, XvMCSubpicture *subpicture);
Status
XvMCGetSubpictureStatus (Display *display, XvMCSubpicture *subpic, int *stat);

Status XvMCCreateBlocks (
   Display *display,
   XvMCContext *context,
   unsigned int num_blocks,
   XvMCBlockArray *block
);

Status XvMCDestroyBlocks (Display *display,XvMCBlockArray *block);

Status XvMCCreateMacroBlocks (
   Display *display,
   XvMCContext *context,
   unsigned int num_blocks,
   XvMCMacroBlockArray *blocks
);

Status XvMCDestroyMacroBlocks (
   Display *display,
   XvMCMacroBlockArray *block
);

XvAttribute *
XvMCQueryAttributes (
    Display *display,
    XvMCContext *context,
    int *number
);

Status
XvMCSetAttribute (
    Display *display,
    XvMCContext *context,
    Atom attribute,
    int value
);

Status
XvMCGetAttribute (
    Display *display,
    XvMCContext *context,
    Atom attribute,
    int *value
);

_XFUNCPROTOEND

#endif
