summaryrefslogtreecommitdiff
path: root/xc/lib/Xv/Xv.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/lib/Xv/Xv.c')
-rw-r--r--xc/lib/Xv/Xv.c873
1 files changed, 0 insertions, 873 deletions
diff --git a/xc/lib/Xv/Xv.c b/xc/lib/Xv/Xv.c
deleted file mode 100644
index 0b14d55a0..000000000
--- a/xc/lib/Xv/Xv.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/***********************************************************
-Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts,
-and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the names of Digital or MIT not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $XFree86: xc/lib/Xv/Xv.c,v 1.8 1999/05/23 06:33:31 dawes Exp $ */
-/*
-** File:
-**
-** Xv.c --- Xv library extension module.
-**
-** Author:
-**
-** David Carver (Digital Workstation Engineering/Project Athena)
-**
-** Revisions:
-**
-** 26.06.91 Carver
-** - changed XvFreeAdaptors to XvFreeAdaptorInfo
-** - changed XvFreeEncodings to XvFreeEncodingInfo
-**
-** 11.06.91 Carver
-** - changed SetPortControl to SetPortAttribute
-** - changed GetPortControl to GetPortAttribute
-** - changed QueryBestSize
-**
-** 15.05.91 Carver
-** - version 2.0 upgrade
-**
-** 240.01.91 Carver
-** - version 1.4 upgrade
-**
-*/
-
-#include "Xvlibint.h"
-#include "extutil.h"
-
-static XExtCodes *_XvCodes;
-static Bool (* _XvOldWireToEventVideo)();
-static Bool (* _XvOldWireToEventPort)();
-static char *(* _XvOldErrorString)();
-
-static Bool _XvWireToEvent();
-static char *_XvErrorString();
-
-#define PREAMBLE(stat) \
- LockDisplay(dpy); \
- if ((!_XvCodes) && (!_XvInitExtension(dpy))) \
- { \
- UnlockDisplay(dpy); SyncHandle(); return (stat); \
- }
-
-#define POSTAMBLE \
- UnlockDisplay(dpy); \
- SyncHandle()
-
-int
-XvQueryExtension(
- Display *dpy,
- unsigned int *p_version,
- unsigned int *p_revision,
- unsigned int *p_requestBase,
- unsigned int *p_eventBase,
- unsigned int *p_errorBase
-){
- xvQueryExtensionReq *req;
- xvQueryExtensionReply rep;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(QueryExtension, req);
-
- /* READ THE REPLY */
-
- if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0)
- {
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadExtension);
- }
-
- *p_version = rep.version;
- *p_revision = rep.revision;
- *p_requestBase = _XvCodes->major_opcode;
- *p_eventBase = _XvCodes->first_event;
- *p_errorBase = _XvCodes->first_error;
-
- return Success;
-}
-
-int
-XvQueryAdaptors(
- Display *dpy,
- Window window,
- unsigned int *p_nAdaptors,
- XvAdaptorInfo **p_pAdaptors
-){
- xvQueryAdaptorsReq *req;
- xvQueryAdaptorsReply rep;
- int size,ii,jj;
- char *name;
- XvAdaptorInfo *pas, *pa;
- XvFormat *pfs, *pf;
- char *buffer;
- union
- {
- char *buffer;
- char *string;
- xvAdaptorInfo *pa;
- xvFormat *pf;
- } u;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(QueryAdaptors, req);
- req->window = window;
-
- /* READ THE REPLY */
-
- if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0)
- {
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadReply);
- }
-
- size = rep.length << 2;
- if ( (buffer = (char *)Xmalloc ((unsigned) size)) == NULL)
- {
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadAlloc);
- }
- _XRead (dpy, buffer, size);
-
- u.buffer = buffer;
-
- /* GET INPUT ADAPTORS */
-
- size = rep.num_adaptors*sizeof(XvAdaptorInfo);
- if ((pas=(XvAdaptorInfo *)Xmalloc(size))==NULL)
- {
- Xfree(buffer);
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadAlloc);
- }
-
- /* INIT ADAPTOR FIELDS */
-
- pa = pas;
- for (ii=0; ii<rep.num_adaptors; ii++)
- {
- pa->num_adaptors = 0;
- pa->name = (char *)NULL;
- pa->formats = (XvFormat *)NULL;
- }
-
- pa = pas;
- for (ii=0; ii<rep.num_adaptors; ii++)
- {
- pa->type = u.pa->type;
- pa->base_id = u.pa->base_id;
- pa->num_ports = u.pa->num_ports;
- pa->num_formats = u.pa->num_formats;
- pa->num_adaptors = rep.num_adaptors - ii;
-
- /* GET ADAPTOR NAME */
-
- size = u.pa->name_size;
- u.buffer += (sz_xvAdaptorInfo + 3) & ~3;
-
- if ( (name = (char *)Xmalloc(size+1)) == NULL)
- {
- XvFreeAdaptorInfo(pas);
- Xfree(buffer);
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadAlloc);
- }
- (void)strncpy(name, u.string, size);
- name[size] = '\0';
- pa->name = name;
-
- u.buffer += (size + 3) & ~3;
-
- /* GET FORMATS */
-
- size = pa->num_formats*sizeof(XvFormat);
- if ((pfs=(XvFormat *)Xmalloc(size))==NULL)
- {
- XvFreeAdaptorInfo(pas);
- Xfree(buffer);
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadAlloc);
- }
-
- pf = pfs;
- for (jj=0; jj<pa->num_formats; jj++)
- {
- pf->depth = u.pf->depth;
- pf->visual_id = u.pf->visual;
- pf++;
-
- u.buffer += (sz_xvFormat + 3) & ~3;
- }
-
- pa->formats = pfs;
-
- pa++;
-
- }
-
- *p_nAdaptors = rep.num_adaptors;
- *p_pAdaptors = pas;
-
- POSTAMBLE;
-
- return (Success);
-}
-
-
-void
-XvFreeAdaptorInfo(XvAdaptorInfo *pAdaptors)
-{
-
- XvAdaptorInfo *pa;
- int ii;
-
- if (!pAdaptors) return;
-
- pa = pAdaptors;
-
- for (ii=0; ii<pAdaptors->num_adaptors; ii++, pa++)
- {
- if (pa->name)
- {
- Xfree(pa->name);
- }
- if (pa->formats)
- {
- Xfree(pa->formats);
- }
- }
-
- Xfree(pAdaptors);
-}
-
-int
-XvQueryEncodings(
- Display *dpy,
- XvPortID port,
- unsigned int *p_nEncodings,
- XvEncodingInfo **p_pEncodings
-){
- xvQueryEncodingsReq *req;
- xvQueryEncodingsReply rep;
- int size, jj;
- char *name;
- XvEncodingInfo *pes, *pe;
- char *buffer;
- union
- {
- char *buffer;
- char *string;
- xvEncodingInfo *pe;
- } u;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(QueryEncodings, req);
- req->port = port;
-
- /* READ THE REPLY */
-
- if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0)
- {
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadReply);
- }
-
- size = rep.length << 2;
- if ( (buffer = (char *)Xmalloc ((unsigned) size)) == NULL)
- {
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadAlloc);
- }
- _XRead (dpy, buffer, size);
-
- u.buffer = buffer;
-
- /* GET ENCODINGS */
-
- size = rep.num_encodings*sizeof(XvEncodingInfo);
- if ( (pes = (XvEncodingInfo *)Xmalloc(size)) == NULL)
- {
- Xfree(buffer);
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadAlloc);
- }
-
- /* INITIALIZE THE ENCODING POINTER */
-
- pe = pes;
- for (jj=0; jj<rep.num_encodings; jj++)
- {
- pe->name = (char *)NULL;
- pe->num_encodings = 0;
- pe++;
- }
-
- pe = pes;
- for (jj=0; jj<rep.num_encodings; jj++)
- {
- pe->encoding_id = u.pe->encoding;
- pe->width = u.pe->width;
- pe->height = u.pe->height;
- pe->rate.numerator = u.pe->rate.numerator;
- pe->rate.denominator = u.pe->rate.denominator;
- pe->num_encodings = rep.num_encodings - jj;
-
- size = u.pe->name_size;
- u.buffer += (sz_xvEncodingInfo + 3) & ~3;
-
- if ( (name = (char *)Xmalloc(size+1)) == NULL)
- {
- Xfree(buffer);
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadAlloc);
- }
- strncpy(name, u.string, size);
- name[size] = '\0';
- pe->name = name;
- pe++;
-
- u.buffer += (size + 3) & ~3;
-
- }
-
- *p_nEncodings = rep.num_encodings;
- *p_pEncodings = pes;
-
- POSTAMBLE;
-
- return (Success);
-}
-
-void
-XvFreeEncodingInfo(XvEncodingInfo *pEncodings)
-{
-
- XvEncodingInfo *pe;
- int ii;
-
- if (!pEncodings) return;
-
- pe = pEncodings;
-
- for (ii=0; ii<pEncodings->num_encodings; ii++, pe++)
- {
- if (pe->name) Xfree(pe->name);
- }
-
- Xfree(pEncodings);
-
-}
-
-int
-XvPutVideo(
- Display *dpy,
- XvPortID port,
- Drawable d,
- GC gc,
- int vx, int vy,
- unsigned int vw, unsigned int vh,
- int dx, int dy,
- unsigned int dw, unsigned int dh
-){
- xvPutVideoReq *req;
-
- PREAMBLE(XvBadExtension);
-
- FlushGC(dpy, gc);
-
- XvGetReq(PutVideo, req);
-
- req->port = port;
- req->drawable = d;
- req->gc = gc->gid;
- req->vid_x = vx;
- req->vid_y = vy;
- req->vid_w = vw;
- req->vid_h = vh;
- req->drw_x = dx;
- req->drw_y = dy;
- req->drw_w = dw;
- req->drw_h = dh;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvPutStill(
- Display *dpy,
- XvPortID port,
- Drawable d,
- GC gc,
- int vx, int vy,
- unsigned int vw, unsigned int vh,
- int dx, int dy,
- unsigned int dw, unsigned int dh
-){
- xvPutStillReq *req;
-
- PREAMBLE(XvBadExtension);
-
- FlushGC(dpy, gc);
-
- XvGetReq(PutStill, req);
- req->port = port;
- req->drawable = d;
- req->gc = gc->gid;
- req->vid_x = vx;
- req->vid_y = vy;
- req->vid_w = vw;
- req->vid_h = vh;
- req->drw_x = dx;
- req->drw_y = dy;
- req->drw_w = dw;
- req->drw_h = dh;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvGetVideo(
- Display *dpy,
- XvPortID port,
- Drawable d,
- GC gc,
- int vx, int vy,
- unsigned int vw, unsigned int vh,
- int dx, int dy,
- unsigned int dw, unsigned int dh
-){
- xvGetVideoReq *req;
-
- PREAMBLE(XvBadExtension);
-
- FlushGC(dpy, gc);
-
- XvGetReq(GetVideo, req);
- req->port = port;
- req->drawable = d;
- req->gc = gc->gid;
- req->vid_x = vx;
- req->vid_y = vy;
- req->vid_w = vw;
- req->vid_h = vh;
- req->drw_x = dx;
- req->drw_y = dy;
- req->drw_w = dw;
- req->drw_h = dh;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvGetStill(
- Display *dpy,
- XvPortID port,
- Drawable d,
- GC gc,
- int vx, int vy,
- unsigned int vw, unsigned int vh,
- int dx, int dy,
- unsigned int dw, unsigned int dh
-){
- xvGetStillReq *req;
-
- PREAMBLE(XvBadExtension);
-
- FlushGC(dpy, gc);
-
- XvGetReq(GetStill, req);
- req->port = port;
- req->drawable = d;
- req->gc = gc->gid;
- req->vid_x = vx;
- req->vid_y = vy;
- req->vid_w = vw;
- req->vid_h = vh;
- req->drw_x = dx;
- req->drw_y = dy;
- req->drw_w = dw;
- req->drw_h = dh;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvStopVideo(
- Display *dpy,
- XvPortID port,
- Drawable draw
-){
- xvStopVideoReq *req;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(StopVideo, req);
- req->port = port;
- req->drawable = draw;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvGrabPort(
- Display *dpy,
- XvPortID port,
- Time time
-){
- int result;
- xvGrabPortReply rep;
- xvGrabPortReq *req;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(GrabPort, req);
- req->port = port;
- req->time = time;
-
- if (_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0)
- rep.result = GrabSuccess;
-
- result = rep.result;
-
- POSTAMBLE;
-
- return result;
-}
-
-int
-XvUngrabPort(
- Display *dpy,
- XvPortID port,
- Time time
-){
- xvUngrabPortReq *req;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(UngrabPort, req);
- req->port = port;
- req->time = time;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvSelectVideoNotify(
- Display *dpy,
- Drawable drawable,
- Bool onoff
-){
- register xvSelectVideoNotifyReq *req;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(SelectVideoNotify, req);
- req->drawable = drawable;
- req->onoff = onoff;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvSelectPortNotify(
- Display *dpy,
- XvPortID port,
- Bool onoff
-){
- xvSelectPortNotifyReq *req;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(SelectPortNotify, req);
- req->port = port;
- req->onoff = onoff;
-
- POSTAMBLE;
-
- return Success;
-}
-
-int
-XvSetPortAttribute (dpy, port, attribute, value)
- register Display *dpy;
- XvPortID port;
- Atom attribute;
- int value;
-{
- register xvSetPortAttributeReq *req;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(SetPortAttribute, req);
- req->port = port;
- req->attribute = attribute;
- req->value = value;
-
- POSTAMBLE;
-
- return (Success);
-}
-
-int
-XvGetPortAttribute (dpy, port, attribute, p_value)
- register Display *dpy;
- XvPortID port;
- Atom attribute;
- int *p_value;
-{
- register xvGetPortAttributeReq *req;
- xvGetPortAttributeReply rep;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(GetPortAttribute, req);
- req->port = port;
- req->attribute = attribute;
-
- /* READ THE REPLY */
-
- if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0)
- {
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadReply);
- }
-
- *p_value = rep.value;
-
- POSTAMBLE;
-
- return (Success);
-}
-
-int
-XvQueryBestSize(dpy, port, motion, vid_w, vid_h, drw_w, drw_h,
- p_actual_width, p_actual_height)
- register Display *dpy;
- XvPortID port;
- Bool motion;
- unsigned int vid_w, vid_h;
- unsigned int drw_w, drw_h;
- unsigned int *p_actual_width, *p_actual_height;
-{
- register xvQueryBestSizeReq *req;
- xvQueryBestSizeReply rep;
-
- PREAMBLE(XvBadExtension);
-
- XvGetReq(QueryBestSize, req);
- req->port = port;
- req->motion = motion;
- req->vid_w = vid_w;
- req->vid_h = vid_h;
- req->drw_w = drw_w;
- req->drw_h = drw_h;
-
- /* READ THE REPLY */
-
- if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0)
- {
- UnlockDisplay(dpy);
- SyncHandle();
- return(XvBadReply);
- }
-
- *p_actual_width = rep.actual_width;
- *p_actual_height = rep.actual_height;
-
- POSTAMBLE;
-
- return (Success);
-}
-
-
-XvAttribute*
-XvQueryPortAttributes(Display *dpy, XvPortID port, int *num)
-{
- xvQueryPortAttributesReq *req;
- xvQueryPortAttributesReply rep;
- XvAttribute *ret = NULL;
-
- *num = 0;
-
- PREAMBLE(NULL);
-
- XvGetReq(QueryPortAttributes, req);
- req->port = port;
-
- /* READ THE REPLY */
-
- if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
- UnlockDisplay(dpy);
- SyncHandle();
- return ret;
- }
-
- if(rep.num_attributes) {
- int size = (rep.num_attributes * sizeof(XvAttribute)) + rep.text_size;
-
- if((ret = Xmalloc(size))) {
- char* marker = (char*)(&ret[rep.num_attributes]);
- xvAttributeInfo Info;
- int i;
-
- for(i = 0; i < rep.num_attributes; i++) {
- _XRead(dpy, (char*)(&Info), sz_xvAttributeInfo);
- ret[i].flags = (int)Info.flags;
- ret[i].name = marker;
- _XRead(dpy, marker, Info.size);
- marker += Info.size;
- (*num)++;
- }
- } else
- _XEatData(dpy, rep.length << 2);
- }
-
- POSTAMBLE;
-
- return ret;
-}
-
-static Bool
-_XvWireToEvent(Display *dpy, XvEvent *re, xvEvent *event)
-{
-
- if (event->u.u.type == _XvCodes->first_event+XvVideoNotify)
- {
- re->xvvideo.type = event->u.u.type & 0x7f;
- re->xvvideo.serial =
- _XSetLastRequestRead(dpy, (xGenericReply *)event);
- re->xvvideo.send_event = ((event->u.u.type & 0x80) != 0);
- re->xvvideo.display = dpy;
- re->xvvideo.time = event->u.videoNotify.time;
- re->xvvideo.reason = event->u.videoNotify.reason;
- re->xvvideo.drawable = event->u.videoNotify.drawable;
- re->xvvideo.port_id = event->u.videoNotify.port;
- if (_XvOldWireToEventVideo)
- {
- (void)(* _XvOldWireToEventVideo)(dpy, re, event);
- }
- }
- else if (event->u.u.type == _XvCodes->first_event+XvPortNotify)
- {
- re->xvport.type = event->u.u.type & 0x7f;
- re->xvport.serial =
- _XSetLastRequestRead(dpy, (xGenericReply *)event);
- re->xvport.send_event = ((event->u.u.type & 0x80) != 0);
- re->xvport.display = dpy;
- re->xvport.time = event->u.portNotify.time;
- re->xvport.port_id = event->u.portNotify.port;
- re->xvport.attribute = event->u.portNotify.attribute;
- re->xvport.value = event->u.portNotify.value;
- if (_XvOldWireToEventPort)
- {
- (void)(* _XvOldWireToEventPort)(dpy, re, event);
- }
- }
- else
- {
- return (False);
- }
-
- return (True);
-}
-
-Bool
-_XvInitExtension(Display *dpy)
-{
- if (!(_XvCodes = XInitExtension (dpy, XvName)))
- {
- return False;
- }
-
- _XvOldWireToEventVideo =
- XESetWireToEvent(dpy,
- _XvCodes->first_event + XvVideoNotify,
- _XvWireToEvent);
-
- _XvOldWireToEventPort =
- XESetWireToEvent(dpy,
- _XvCodes->first_event + XvPortNotify,
- _XvWireToEvent);
-
- _XvOldErrorString = XESetErrorString(dpy, _XvCodes->extension,
- _XvErrorString);
-
- return True;
-}
-
-static char *
-_XvErrorString(
- Display *dpy,
- int code,
- XExtCodes *ecodes,
- char *buffer,
- int size
-){
-
- if (size < strlen("Encoding") + 1)
- {
- if (_XvOldErrorString)
- return (* _XvOldErrorString)(dpy, code, ecodes, buffer, size);
- }
-
- if (code - ecodes->first_error == XvBadPort)
- {
- strcpy(buffer, "Port");
- }
- else if (code - ecodes->first_error == XvBadEncoding)
- {
- strcpy(buffer, "Encoding");
- }
- else
- {
- if (_XvOldErrorString)
- return (* _XvOldErrorString)(dpy, code, ecodes, buffer, size);
- }
-
- return (char *)NULL;
-}