#include #include #include Status XvMCCreateSubpicture(Display *dpy, XvMCContext *context, XvMCSubpicture *subpicture, unsigned short width, unsigned short height, int xvimage_id) { assert(dpy); if (!context) return XvMCBadContext; assert(subpicture); /*if (width > || height > ) return BadValue;*/ /*if (xvimage_id != ) return BadMatch;*/ subpicture->subpicture_id = XAllocID(dpy); subpicture->context_id = context->context_id; subpicture->xvimage_id = xvimage_id; subpicture->width = width; subpicture->height = height; subpicture->num_palette_entries = 0; subpicture->entry_bytes = 0; subpicture->component_order[0] = 0; subpicture->component_order[1] = 0; subpicture->component_order[2] = 0; subpicture->component_order[3] = 0; /* TODO: subpicture->privData = ;*/ SyncHandle(); return Success; } Status XvMCClearSubpicture(Display *dpy, XvMCSubpicture *subpicture, short x, short y, unsigned short width, unsigned short height, unsigned int color) { assert(dpy); if (!subpicture) return XvMCBadSubpicture; /* TODO: Assert clear rect is within bounds? Or clip? */ return Success; } Status XvMCCompositeSubpicture(Display *dpy, XvMCSubpicture *subpicture, XvImage *image, short srcx, short srcy, unsigned short width, unsigned short height, short dstx, short dsty) { assert(dpy); if (!subpicture) return XvMCBadSubpicture; assert(image); if (subpicture->xvimage_id != image->id) return BadMatch; /* TODO: Assert rects are within bounds? Or clip? */ return Success; } Status XvMCDestroySubpicture(Display *dpy, XvMCSubpicture *subpicture) { assert(dpy); if (!subpicture) return XvMCBadSubpicture; return BadImplementation; } Status XvMCSetSubpicturePalette(Display *dpy, XvMCSubpicture *subpicture, unsigned char *palette) { assert(dpy); if (!subpicture) return XvMCBadSubpicture; assert(palette); /* We don't support paletted subpictures */ return BadMatch; } Status XvMCBlendSubpicture(Display *dpy, 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) { assert(dpy); if (!target_surface) return XvMCBadSurface; if (!subpicture) return XvMCBadSubpicture; if (target_surface->context_id != subpicture->context_id) return BadMatch; /* TODO: Assert rects are within bounds? Or clip? */ return Success; } Status XvMCBlendSubpicture2(Display *dpy, 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) { assert(dpy); if (!source_surface || !target_surface) return XvMCBadSurface; if (!subpicture) return XvMCBadSubpicture; if (source_surface->context_id != subpicture->context_id) return BadMatch; if (source_surface->context_id != subpicture->context_id) return BadMatch; /* TODO: Assert rects are within bounds? Or clip? */ return Success; } Status XvMCSyncSubpicture(Display *dpy, XvMCSubpicture *subpicture) { assert(dpy); if (!subpicture) return XvMCBadSubpicture; return Success; } Status XvMCFlushSubpicture(Display *dpy, XvMCSubpicture *subpicture) { assert(dpy); if (!subpicture) return XvMCBadSubpicture; return Success; } Status XvMCGetSubpictureStatus(Display *dpy, XvMCSubpicture *subpicture, int *status) { assert(dpy); if (!subpicture) return XvMCBadSubpicture; assert(status); /* TODO */ *status = 0; return Success; }