summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYING63
-rwxr-xr-xChangeLog285
-rw-r--r--INSTALL0
-rwxr-xr-xMakefile.am25
-rwxr-xr-xREADME30
-rw-r--r--Xv.h128
-rw-r--r--XvMC.h138
-rw-r--r--XvMCproto.h226
-rw-r--r--Xvproto.h603
-rwxr-xr-xautogen.sh12
-rwxr-xr-xconfigure.ac13
-rw-r--r--packaging/xorg-x11-proto-video.spec47
-rw-r--r--videoproto.pc.in9
-rwxr-xr-xvldXvMC.h174
-rwxr-xr-xxv-protocol-v2.txt654
15 files changed, 2407 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..cfa79e7
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,63 @@
+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.
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the XFree86 Project shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the XFree86 Project.
+
+
+Copyright (c) 2004 The Unichrome Project. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/ChangeLog b/ChangeLog
new file mode 100755
index 0000000..c9d614e
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,285 @@
+commit 56a94402e9252879771ba42ee76990f132b56fca
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Mar 28 19:00:31 2010 -0400
+
+ config: remove the pkgconfig pc.in file from EXTRA_DIST
+
+ Automake always includes it in the tarball.
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 72a31b1b758c42faef518081a1a1c436c26add4f
+Author: Rémi Cardona <remi@gentoo.org>
+Date: Thu Dec 17 08:42:27 2009 +0100
+
+ require autoconf 2.60 because of $(docdir) use
+
+ Signed-off-by: Rémi Cardona <remi@gentoo.org>
+ Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@sun.com>
+ Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
+
+commit 38602c56dcf24bf7dbddfbac89a35c15e3d3f885
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 22 19:24:48 2009 -0500
+
+ Makefile.am: add ChangeLog and INSTALL on MAINTAINERCLEANFILES
+
+ Now that the INSTALL file is generated.
+ Allows running make maintainer-clean.
+
+commit 35734855fd913c7b743280346fc19471a39d88d4
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Mon Nov 16 11:13:30 2009 -0500
+
+ README: file created or updated #24206
+
+ Contains a set of URLs to freedesktop.org.
+
+commit 86b3515e9ea8dc6252db0ed31642ef314656c9bf
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 15 19:45:27 2009 -0500
+
+ Makefile.am: ChangeLog not required: EXTRA_DIST or *CLEANFILES #24432
+
+ ChangeLog filename is known to Automake and requires no further
+ coding in the makefile.
+
+commit ad23568d0d5d0c1cdfc54bfdb752e398ab881639
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 15 18:31:29 2009 -0500
+
+ Makefile.am: INSTALL file is missing or incorrect #24206
+
+ The standard GNU file on building/installing tarball is copied
+ using the XORG_INSTALL macro contained in XORG_DEFAULT_OPTIONS
+ Add INSTALL target
+
+commit 40310f285cdac70865ff342f874e2bd21d36ef8d
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 15 18:11:36 2009 -0500
+
+ configure.ac: deploy the new XORG_DEFAULT_OPTIONS #24242
+
+ This macro aggregate a number of existing macros that sets commmon
+ X.Org components configuration options. It shields the configuration file from
+ future changes.
+
+commit 69311c693daf6797646bce9b1c62bba54fed9343
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 15 13:55:25 2009 -0500
+
+ configure.ac: AM_MAINTAINER_MODE missing #24238
+
+ This turns off maintainer mode build rules in tarballs.
+ Works in conjunction with autogen.sh --enable-maintainer-mode
+
+commit a9fc831a64cab7c70aecee4f0f86ac01360e3d8f
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sat Nov 14 18:26:47 2009 -0500
+
+ .gitignore: use common defaults with custom section # 24239
+
+ Using common defaults will reduce errors and maintenance.
+ Only the very small or inexistent custom section need periodic maintenance
+ when the structure of the component changes. Do not edit defaults.
+
+commit 9190399907610486001f3676945958dbab4b837a
+Author: Luc Verhaegen <libv@skynet.be>
+Date: Mon Oct 19 23:59:20 2009 +0200
+
+ vldXvMC.h: stop uselessly including XvMClib.h.
+
+ Protocol header depending on client library header?
+
+ Only clients which depend on this header but which did not bother to
+ include it directly will run into trouble, but the fix is trivial,
+ general and backwards compatible.
+
+ Signed-off-by: Luc Verhaegen <libv@skynet.be>
+
+commit 56ea4c0c10bb23ae4b115b13c0052d1e808d2e75
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Sat Oct 10 16:35:12 2009 -0700
+
+ Move xv-protocol-v2.txt from xorg-docs to videoproto
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 20dc47bfb9e6627e8335c870a808fdab72e82061
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Aug 27 11:59:40 2009 +1000
+
+ videoproto 2.3.0
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit ed07cce6a0d54bf7ace0e672fe769a34fdac837a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Aug 27 11:55:47 2009 +1000
+
+ Remove RCS tags
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit cca2a3f1230bf21a1b4e4c255406b852c5c030c3
+Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
+Date: Tue Jan 27 20:06:28 2009 -0200
+
+ Janitor: Correct make distcheck and dont distribute autogen.sh
+
+commit 430e61ec31c975963a3495c81c360837584b0ef0
+Author: James Cloos <cloos@jhcloos.com>
+Date: Thu Dec 6 16:39:08 2007 -0500
+
+ Replace static ChangeLog with dist-hook to generate from git log
+
+commit 35cde03805a6e6c4665a42e5c1657a88624710e6
+Author: James Cloos <cloos@jhcloos.com>
+Date: Mon Sep 3 05:54:21 2007 -0400
+
+ Add *~ to .gitignore to skip patch/emacs droppings
+
+commit 82643400f8b91f5bb13313cac5954f3e13455379
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Jul 14 18:56:36 2006 -0700
+
+ renamed: .cvsignore -> .gitignore
+
+commit 1d8409f8b92026cf82b3c0356993ca3a5f18a1d1
+Author: Kevin E Martin <kem@kem.org>
+Date: Thu Dec 15 00:24:38 2005 +0000
+
+ Update package version number for final X11R7 release candidate.
+
+commit 7811bd17a495be2f42ffa66a399343ed2c54b7bd
+Author: Kevin E Martin <kem@kem.org>
+Date: Wed Oct 19 02:48:15 2005 +0000
+
+ Update package version number for RC1 release.
+
+commit 8404664358642cd90952acf07957a57b678b54fe
+Author: Eric Anholt <anholt@freebsd.org>
+Date: Tue Aug 2 19:19:39 2005 +0000
+
+ Add basic .cvsignore files for proto modules.
+
+commit 8a08c1ccf233d725e0a12fc87cb6807f6fbb6fb2
+Author: Kevin E Martin <kem@kem.org>
+Date: Fri Jul 29 21:22:57 2005 +0000
+
+ Various changes preparing packages for RC0:
+ - Verify and update package version numbers as needed
+ - Implement versioning scheme
+ - Change bug address to point to bugzilla bug entry form
+ - Disable loadable i18n in libX11 by default (use --enable-loadable-i18n to
+ reenable it)
+ - Fix makedepend to use pkgconfig and pass distcheck
+ - Update build script to build macros first
+ - Update modular Xorg version
+
+commit d393967cb43b1050aa520e9fb738f2753f6a18b6
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Tue Jul 12 01:22:22 2005 +0000
+
+ Move Xvlib.h and XvMClib.h to the libs.
+
+commit bae658b5c8d091a2deef3251ce07c0dff29af2ac
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sat May 21 04:52:54 2005 +0000
+
+ Change version to 2.2 (Xv major version; XvMC is 1.1 still).
+
+commit 7f0c0e550f1e3641bc895061d2ff76a8336fa5e7
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Thu May 19 00:22:40 2005 +0000
+
+ revert last change, didn't do right thing at all, sorry for the noise
+
+commit 0662a3831996d2db4560c1e154db1a4995b70d14
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Thu May 19 00:10:19 2005 +0000
+
+ Require automake 1.7 in AM_INIT_AUTOMAKE
+
+commit ff5a5dcd5e2bef26deca4be2d4541e9627544c89
+Author: Josh Triplett <josh@speakeasy.net>
+Date: Tue May 17 22:12:59 2005 +0000
+
+ Add COPYING file for Video.
+
+commit 47f7733ccc2a6deb8576b9d55a3a46c841a5560c
+Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
+Date: Mon May 9 18:20:06 2005 +0000
+
+ Change all the protonames from <extension>Ext to <extension>Proto.
+
+commit 60df602bf6f92eaf8f24e5c37cfbfb258ce74a20
+Author: Kevin E Martin <kem@kem.org>
+Date: Fri May 6 01:46:31 2005 +0000
+
+ Initial build system files for proto module.
+
+commit 4396c32c85286d4da6495b279cb3c8a380302334
+Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
+Date: Sat Dec 4 00:42:46 2004 +0000
+
+ Encoding of numerous files changed to UTF-8
+
+commit e57cb44cb47b1a25bcc0cce0dbc19e95abdf4ada
+Author: Thomas Hellstrom <unichrome@shipmail.org>
+Date: Sat Nov 13 11:09:23 2004 +0000
+
+ lib/XvMC/Imake
+ Added support for automatic loading of the correct hardware XvMC driver.
+ This involves a protocol extension of the XvMC protocol. The XvMC
+ revision number was bumped.
+
+commit 12ef8daf8c850ae41cf3991b6588796b678b8450
+Author: Thomas Hellstrom <unichrome@shipmail.org>
+Date: Sun Sep 26 11:48:56 2004 +0000
+
+ Added the XvMC wrapper. First support for runtime loading of hardware-
+ specific XvMC libraries.
+
+commit 4be3434b1362478149787efad07ababa75e705f7
+Author: Egbert Eich <eich@suse.de>
+Date: Fri Apr 23 18:43:06 2004 +0000
+
+ Merging XORG-CURRENT into trunk
+
+commit 7e4871d503f1cca137e85880617ed3d10cc7c326
+Author: Egbert Eich <eich@suse.de>
+Date: Sun Mar 14 08:31:36 2004 +0000
+
+ Importing vendor version xf86-4_4_99_1 on Sun Mar 14 00:26:39 PST 2004
+
+commit a9dd3e1f6f6e284eb03ec3410ca4eb7d12a9b3c3
+Author: Egbert Eich <eich@suse.de>
+Date: Wed Mar 3 12:10:54 2004 +0000
+
+ Importing vendor version xf86-4_4_0 on Wed Mar 3 04:09:24 PST 2004
+
+commit d5a90e9d4c1dedb73882a4b2283a4810afca67b2
+Author: Egbert Eich <eich@suse.de>
+Date: Thu Feb 26 13:35:11 2004 +0000
+
+ readding XFree86's cvs IDs
+
+commit 5d3d0504773db5861665e53a8f3fe880034e2d6c
+Author: Egbert Eich <eich@suse.de>
+Date: Thu Feb 26 09:22:28 2004 +0000
+
+ Importing vendor version xf86-4_3_99_903 on Wed Feb 26 01:21:00 PST 2004
+
+commit 46e734df3ce62bc32a4e755feb4c6352c9db408a
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Nov 14 16:48:43 2003 +0000
+
+ XFree86 4.3.0.1
+
+commit 787e2f945a39415baa117c6fbf9125af0130cf23
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Nov 14 16:48:43 2003 +0000
+
+ Initial revision
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/INSTALL
diff --git a/Makefile.am b/Makefile.am
new file mode 100755
index 0000000..6064e46
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,25 @@
+videodir = $(includedir)/X11/extensions
+video_HEADERS = \
+ vldXvMC.h \
+ Xv.h \
+ XvMC.h \
+ XvMCproto.h \
+ Xvproto.h
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = videoproto.pc
+
+dist_doc_DATA = xv-protocol-v2.txt
+
+
+MAINTAINERCLEANFILES = ChangeLog INSTALL
+
+.PHONY: ChangeLog INSTALL
+
+INSTALL:
+ $(INSTALL_CMD)
+
+ChangeLog:
+ $(CHANGELOG_CMD)
+
+dist-hook: ChangeLog INSTALL
diff --git a/README b/README
new file mode 100755
index 0000000..ecc468a
--- /dev/null
+++ b/README
@@ -0,0 +1,30 @@
+ X Video Extension
+
+This extension provides a protocol for a video output mechanism,
+mainly to rescale video playback in the video controller hardware.
+
+Extension name: XVideo
+
+All questions regarding this software should be directed at the
+Xorg mailing list:
+
+ http://lists.freedesktop.org/mailman/listinfo/xorg
+
+Please submit bug reports to the Xorg bugzilla:
+
+ https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
+
+The master development code repository can be found at:
+
+ git://anongit.freedesktop.org/git/xorg/proto/videoproto
+
+ http://cgit.freedesktop.org/xorg/proto/videoproto
+
+For patch submission instructions, see:
+
+ http://www.x.org/wiki/Development/Documentation/SubmittingPatches
+
+For more information on the git code manager, see:
+
+ http://wiki.x.org/wiki/GitPage
+
diff --git a/Xv.h b/Xv.h
new file mode 100644
index 0000000..985653c
--- /dev/null
+++ b/Xv.h
@@ -0,0 +1,128 @@
+/***********************************************************
+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.
+
+******************************************************************/
+
+#ifndef XV_H
+#define XV_H
+/*
+** File:
+**
+** Xv.h --- Xv shared library and server header file
+**
+** Author:
+**
+** David Carver (Digital Workstation Engineering/Project Athena)
+**
+** Revisions:
+**
+** 05.15.91 Carver
+** - version 2.0 upgrade
+**
+** 01.24.91 Carver
+** - version 1.4 upgrade
+**
+*/
+
+#include <X11/X.h>
+
+#define XvName "XVideo"
+#define XvVersion 2
+#define XvRevision 2
+
+/* Symbols */
+
+typedef XID XvPortID;
+typedef XID XvEncodingID;
+
+#define XvNone 0
+
+#define XvInput 0
+#define XvOutput 1
+
+#define XvInputMask (1L<<XvInput)
+#define XvOutputMask (1L<<XvOutput)
+#define XvVideoMask 0x00000004
+#define XvStillMask 0x00000008
+#define XvImageMask 0x00000010
+
+/* These two are not client viewable */
+#define XvPixmapMask 0x00010000
+#define XvWindowMask 0x00020000
+
+
+#define XvGettable 0x01
+#define XvSettable 0x02
+
+#define XvRGB 0
+#define XvYUV 1
+
+#define XvPacked 0
+#define XvPlanar 1
+
+#define XvTopToBottom 0
+#define XvBottomToTop 1
+
+
+/* Events */
+
+#define XvVideoNotify 0
+#define XvPortNotify 1
+#define XvNumEvents 2
+
+/* Video Notify Reasons */
+
+#define XvStarted 0
+#define XvStopped 1
+#define XvBusy 2
+#define XvPreempted 3
+#define XvHardError 4
+#define XvLastReason 4
+
+#define XvNumReasons (XvLastReason + 1)
+
+#define XvStartedMask (1L<<XvStarted)
+#define XvStoppedMask (1L<<XvStopped)
+#define XvBusyMask (1L<<XvBusy)
+#define XvPreemptedMask (1L<<XvPreempted)
+#define XvHardErrorMask (1L<<XvHardError)
+
+#define XvAnyReasonMask ((1L<<XvNumReasons) - 1)
+#define XvNoReasonMask 0
+
+/* Errors */
+
+#define XvBadPort 0
+#define XvBadEncoding 1
+#define XvBadControl 2
+#define XvNumErrors 3
+
+/* Status */
+
+#define XvBadExtension 1
+#define XvAlreadyGrabbed 2
+#define XvInvalidTime 3
+#define XvBadReply 4
+#define XvBadAlloc 5
+
+#endif /* XV_H */
+
diff --git a/XvMC.h b/XvMC.h
new file mode 100644
index 0000000..2690be8
--- /dev/null
+++ b/XvMC.h
@@ -0,0 +1,138 @@
+#ifndef _XVMC_H_
+#define _XVMC_H_
+
+#include <X11/X.h>
+#include <X11/extensions/Xv.h>
+
+#define XvMCName "XVideo-MotionCompensation"
+#define XvMCNumEvents 0
+#define XvMCNumErrors 3
+#define XvMCVersion 1
+#define XvMCRevision 1
+
+#define XvMCBadContext 0
+#define XvMCBadSurface 1
+#define XvMCBadSubpicture 2
+
+/* Chroma formats */
+#define XVMC_CHROMA_FORMAT_420 0x00000001
+#define XVMC_CHROMA_FORMAT_422 0x00000002
+#define XVMC_CHROMA_FORMAT_444 0x00000003
+
+/* XvMCSurfaceInfo Flags */
+#define XVMC_OVERLAID_SURFACE 0x00000001
+#define XVMC_BACKEND_SUBPICTURE 0x00000002
+#define XVMC_SUBPICTURE_INDEPENDENT_SCALING 0x00000004
+#define XVMC_INTRA_UNSIGNED 0x00000008
+
+/* Motion Compensation types */
+#define XVMC_MOCOMP 0x00000000
+#define XVMC_IDCT 0x00010000
+
+#define XVMC_MPEG_1 0x00000001
+#define XVMC_MPEG_2 0x00000002
+#define XVMC_H263 0x00000003
+#define XVMC_MPEG_4 0x00000004
+
+#define XVMC_MB_TYPE_MOTION_FORWARD 0x02
+#define XVMC_MB_TYPE_MOTION_BACKWARD 0x04
+#define XVMC_MB_TYPE_PATTERN 0x08
+#define XVMC_MB_TYPE_INTRA 0x10
+
+#define XVMC_PREDICTION_FIELD 0x01
+#define XVMC_PREDICTION_FRAME 0x02
+#define XVMC_PREDICTION_DUAL_PRIME 0x03
+#define XVMC_PREDICTION_16x8 0x02
+#define XVMC_PREDICTION_4MV 0x04
+
+#define XVMC_SELECT_FIRST_FORWARD 0x01
+#define XVMC_SELECT_FIRST_BACKWARD 0x02
+#define XVMC_SELECT_SECOND_FORWARD 0x04
+#define XVMC_SELECT_SECOND_BACKWARD 0x08
+
+#define XVMC_DCT_TYPE_FRAME 0x00
+#define XVMC_DCT_TYPE_FIELD 0x01
+
+#define XVMC_TOP_FIELD 0x00000001
+#define XVMC_BOTTOM_FIELD 0x00000002
+#define XVMC_FRAME_PICTURE (XVMC_TOP_FIELD | XVMC_BOTTOM_FIELD)
+
+#define XVMC_SECOND_FIELD 0x00000004
+
+#define XVMC_DIRECT 0x00000001
+
+#define XVMC_RENDERING 0x00000001
+#define XVMC_DISPLAYING 0x00000002
+
+
+typedef struct {
+ int surface_type_id;
+ int chroma_format;
+ unsigned short max_width;
+ unsigned short max_height;
+ unsigned short subpicture_max_width;
+ unsigned short subpicture_max_height;
+ int mc_type;
+ int flags;
+} XvMCSurfaceInfo;
+
+typedef struct {
+ XID context_id;
+ int surface_type_id;
+ unsigned short width;
+ unsigned short height;
+ XvPortID port;
+ int flags;
+ void * privData; /* private to the library */
+} XvMCContext;
+
+typedef struct {
+ XID surface_id;
+ XID context_id;
+ int surface_type_id;
+ unsigned short width;
+ unsigned short height;
+ void *privData; /* private to the library */
+} XvMCSurface;
+
+typedef struct {
+ XID subpicture_id;
+ XID context_id;
+ int xvimage_id;
+ unsigned short width;
+ unsigned short height;
+ int num_palette_entries;
+ int entry_bytes;
+ char component_order[4];
+ void *privData; /* private to the library */
+} XvMCSubpicture;
+
+typedef struct {
+ unsigned int num_blocks;
+ XID context_id;
+ void *privData;
+ short *blocks;
+} XvMCBlockArray;
+
+typedef struct {
+ unsigned short x;
+ unsigned short y;
+ unsigned char macroblock_type;
+ unsigned char motion_type;
+ unsigned char motion_vertical_field_select;
+ unsigned char dct_type;
+ short PMV[2][2][2];
+ unsigned int index;
+ unsigned short coded_block_pattern;
+ unsigned short pad0;
+} XvMCMacroBlock;
+
+
+typedef struct {
+ unsigned int num_blocks;
+ XID context_id;
+ void *privData;
+ XvMCMacroBlock *macro_blocks;
+} XvMCMacroBlockArray;
+
+#endif
diff --git a/XvMCproto.h b/XvMCproto.h
new file mode 100644
index 0000000..8e80f17
--- /dev/null
+++ b/XvMCproto.h
@@ -0,0 +1,226 @@
+#ifndef _XVMCPROTO_H_
+#define _XVMCPROTO_H_
+
+#define xvmc_QueryVersion 0
+#define xvmc_ListSurfaceTypes 1
+#define xvmc_CreateContext 2
+#define xvmc_DestroyContext 3
+#define xvmc_CreateSurface 4
+#define xvmc_DestroySurface 5
+#define xvmc_CreateSubpicture 6
+#define xvmc_DestroySubpicture 7
+#define xvmc_ListSubpictureTypes 8
+#define xvmc_GetDRInfo 9
+#define xvmc_LastRequest xvmc_GetDRInfo
+
+#define xvmcNumRequest (xvmc_LastRequest + 1)
+
+
+typedef struct {
+ CARD32 surface_type_id B32;
+ CARD16 chroma_format B16;
+ CARD16 pad0 B16;
+ CARD16 max_width B16;
+ CARD16 max_height B16;
+ CARD16 subpicture_max_width B16;
+ CARD16 subpicture_max_height B16;
+ CARD32 mc_type B32;
+ CARD32 flags B32;
+} xvmcSurfaceInfo;
+#define sz_xvmcSurfaceInfo 24;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+} xvmcQueryVersionReq;
+#define sz_xvmcQueryVersionReq 4;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 major B32;
+ CARD32 minor B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+} xvmcQueryVersionReply;
+#define sz_xvmcQueryVersionReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 port B32;
+} xvmcListSurfaceTypesReq;
+#define sz_xvmcListSurfaceTypesReq 8;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 num B32;
+ CARD32 padl3 B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+} xvmcListSurfaceTypesReply;
+#define sz_xvmcListSurfaceTypesReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 context_id B32;
+ CARD32 port B32;
+ CARD32 surface_type_id B32;
+ CARD16 width B16;
+ CARD16 height B16;
+ CARD32 flags B32;
+} xvmcCreateContextReq;
+#define sz_xvmcCreateContextReq 24;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 width_actual B16;
+ CARD16 height_actual B16;
+ CARD32 flags_return B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+} xvmcCreateContextReply;
+#define sz_xvmcCreateContextReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 context_id B32;
+} xvmcDestroyContextReq;
+#define sz_xvmcDestroyContextReq 8;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 surface_id B32;
+ CARD32 context_id B32;
+} xvmcCreateSurfaceReq;
+#define sz_xvmcCreateSurfaceReq 12;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 padl2 B32;
+ CARD32 padl3 B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+} xvmcCreateSurfaceReply;
+#define sz_xvmcCreateSurfaceReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 surface_id B32;
+} xvmcDestroySurfaceReq;
+#define sz_xvmcDestroySurfaceReq 8;
+
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 subpicture_id B32;
+ CARD32 context_id B32;
+ CARD32 xvimage_id B32;
+ CARD16 width B16;
+ CARD16 height B16;
+} xvmcCreateSubpictureReq;
+#define sz_xvmcCreateSubpictureReq 20;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 width_actual B16;
+ CARD16 height_actual B16;
+ CARD16 num_palette_entries B16;
+ CARD16 entry_bytes B16;
+ CARD8 component_order[4];
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+} xvmcCreateSubpictureReply;
+#define sz_xvmcCreateSubpictureReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 subpicture_id B32;
+} xvmcDestroySubpictureReq;
+#define sz_xvmcDestroySubpictureReq 8;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 port B32;
+ CARD32 surface_type_id B32;
+} xvmcListSubpictureTypesReq;
+#define sz_xvmcListSubpictureTypesReq 12;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 num B32;
+ CARD32 padl2 B32;
+ CARD32 padl3 B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+} xvmcListSubpictureTypesReply;
+#define sz_xvmcListSubpictureTypesReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvmcReqType;
+ CARD16 length B16;
+ CARD32 port B32;
+ CARD32 shmKey B32;
+ CARD32 magic B32;
+} xvmcGetDRInfoReq;
+#define sz_xvmcGetDRInfoReq 16;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 major B32;
+ CARD32 minor B32;
+ CARD32 patchLevel B32;
+ CARD32 nameLen B32;
+ CARD32 busIDLen B32;
+ CARD32 isLocal B32;
+} xvmcGetDRInfoReply;
+#define sz_xvmcGetDRInfoReply 32
+
+#endif
diff --git a/Xvproto.h b/Xvproto.h
new file mode 100644
index 0000000..b6b56cf
--- /dev/null
+++ b/Xvproto.h
@@ -0,0 +1,603 @@
+/***********************************************************
+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.
+
+******************************************************************/
+
+#ifndef XVPROTO_H
+#define XVPROTO_H
+/*
+** File:
+**
+** Xvproto.h --- Xv protocol header file
+**
+** Author:
+**
+** David Carver (Digital Workstation Engineering/Project Athena)
+**
+** Revisions:
+**
+** 11.06.91 Carver
+** - changed SetPortControl to SetPortAttribute
+** - changed GetPortControl to GetPortAttribute
+** - changed QueryBestSize
+**
+** 15.05.91 Carver
+** - version 2.0 upgrade
+**
+** 24.01.91 Carver
+** - version 1.4 upgrade
+**
+*/
+
+#include <X11/Xmd.h>
+
+/* Symbols: These are undefined at the end of this file to restore the
+ values they have in Xv.h */
+
+#define XvPortID CARD32
+#define XvEncodingID CARD32
+#define ShmSeg CARD32
+#define VisualID CARD32
+#define Drawable CARD32
+#define GContext CARD32
+#define Time CARD32
+#define Atom CARD32
+
+/* Structures */
+
+typedef struct {
+ INT32 numerator B32;
+ INT32 denominator B32;
+} xvRational;
+#define sz_xvRational 8
+
+typedef struct {
+ XvPortID base_id B32;
+ CARD16 name_size B16;
+ CARD16 num_ports B16;
+ CARD16 num_formats B16;
+ CARD8 type;
+ CARD8 pad;
+} xvAdaptorInfo;
+#define sz_xvAdaptorInfo 12
+
+typedef struct {
+ XvEncodingID encoding B32;
+ CARD16 name_size B16;
+ CARD16 width B16, height B16;
+ xvRational rate;
+ CARD16 pad B16;
+} xvEncodingInfo;
+#define sz_xvEncodingInfo (12 + sz_xvRational)
+
+typedef struct {
+ VisualID visual B32;
+ CARD8 depth;
+ CARD8 pad1;
+ CARD16 pad2 B16;
+} xvFormat;
+#define sz_xvFormat 8
+
+typedef struct {
+ CARD32 flags B32;
+ INT32 min B32;
+ INT32 max B32;
+ CARD32 size B32;
+} xvAttributeInfo;
+#define sz_xvAttributeInfo 16
+
+typedef struct {
+ CARD32 id B32;
+ CARD8 type;
+ CARD8 byte_order;
+ CARD16 pad1 B16;
+ CARD8 guid[16];
+ CARD8 bpp;
+ CARD8 num_planes;
+ CARD16 pad2 B16;
+ CARD8 depth;
+ CARD8 pad3;
+ CARD16 pad4 B16;
+ CARD32 red_mask B32;
+ CARD32 green_mask B32;
+ CARD32 blue_mask B32;
+ CARD8 format;
+ CARD8 pad5;
+ CARD16 pad6 B16;
+ CARD32 y_sample_bits B32;
+ CARD32 u_sample_bits B32;
+ CARD32 v_sample_bits B32;
+ CARD32 horz_y_period B32;
+ CARD32 horz_u_period B32;
+ CARD32 horz_v_period B32;
+ CARD32 vert_y_period B32;
+ CARD32 vert_u_period B32;
+ CARD32 vert_v_period B32;
+ CARD8 comp_order[32];
+ CARD8 scanline_order;
+ CARD8 pad7;
+ CARD16 pad8 B16;
+ CARD32 pad9 B32;
+ CARD32 pad10 B32;
+} xvImageFormatInfo;
+#define sz_xvImageFormatInfo 128
+
+
+/* Requests */
+
+#define xv_QueryExtension 0
+#define xv_QueryAdaptors 1
+#define xv_QueryEncodings 2
+#define xv_GrabPort 3
+#define xv_UngrabPort 4
+#define xv_PutVideo 5
+#define xv_PutStill 6
+#define xv_GetVideo 7
+#define xv_GetStill 8
+#define xv_StopVideo 9
+#define xv_SelectVideoNotify 10
+#define xv_SelectPortNotify 11
+#define xv_QueryBestSize 12
+#define xv_SetPortAttribute 13
+#define xv_GetPortAttribute 14
+#define xv_QueryPortAttributes 15
+#define xv_ListImageFormats 16
+#define xv_QueryImageAttributes 17
+#define xv_PutImage 18
+#define xv_ShmPutImage 19
+#define xv_LastRequest xv_ShmPutImage
+
+#define xvNumRequests (xv_LastRequest + 1)
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+} xvQueryExtensionReq;
+#define sz_xvQueryExtensionReq 4
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ CARD32 window B32;
+} xvQueryAdaptorsReq;
+#define sz_xvQueryAdaptorsReq 8
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ CARD32 port B32;
+} xvQueryEncodingsReq;
+#define sz_xvQueryEncodingsReq 8
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Drawable drawable B32;
+ GContext gc B32;
+ INT16 vid_x B16;
+ INT16 vid_y B16;
+ CARD16 vid_w B16;
+ CARD16 vid_h B16;
+ INT16 drw_x B16;
+ INT16 drw_y B16;
+ CARD16 drw_w B16;
+ CARD16 drw_h B16;
+} xvPutVideoReq;
+#define sz_xvPutVideoReq 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Drawable drawable B32;
+ GContext gc B32;
+ INT16 vid_x B16;
+ INT16 vid_y B16;
+ CARD16 vid_w B16;
+ CARD16 vid_h B16;
+ INT16 drw_x B16;
+ INT16 drw_y B16;
+ CARD16 drw_w B16;
+ CARD16 drw_h B16;
+} xvPutStillReq;
+#define sz_xvPutStillReq 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Drawable drawable B32;
+ GContext gc B32;
+ INT16 vid_x B16;
+ INT16 vid_y B16;
+ CARD16 vid_w B16;
+ CARD16 vid_h B16;
+ INT16 drw_x B16;
+ INT16 drw_y B16;
+ CARD16 drw_w B16;
+ CARD16 drw_h B16;
+} xvGetVideoReq;
+#define sz_xvGetVideoReq 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Drawable drawable B32;
+ GContext gc B32;
+ INT16 vid_x B16;
+ INT16 vid_y B16;
+ CARD16 vid_w B16;
+ CARD16 vid_h B16;
+ INT16 drw_x B16;
+ INT16 drw_y B16;
+ CARD16 drw_w B16;
+ CARD16 drw_h B16;
+} xvGetStillReq;
+#define sz_xvGetStillReq 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Time time B32;
+} xvGrabPortReq;
+#define sz_xvGrabPortReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Time time B32;
+} xvUngrabPortReq;
+#define sz_xvUngrabPortReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ Drawable drawable B32;
+ BOOL onoff;
+ CARD8 pad1;
+ CARD16 pad2;
+} xvSelectVideoNotifyReq;
+#define sz_xvSelectVideoNotifyReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ BOOL onoff;
+ CARD8 pad1;
+ CARD16 pad2;
+} xvSelectPortNotifyReq;
+#define sz_xvSelectPortNotifyReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Drawable drawable B32;
+} xvStopVideoReq;
+#define sz_xvStopVideoReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Atom attribute B32;
+ INT32 value B32;
+} xvSetPortAttributeReq;
+#define sz_xvSetPortAttributeReq 16
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Atom attribute B32;
+} xvGetPortAttributeReq;
+#define sz_xvGetPortAttributeReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ CARD16 vid_w B16;
+ CARD16 vid_h B16;
+ CARD16 drw_w B16;
+ CARD16 drw_h B16;
+ CARD8 motion;
+ CARD8 pad1;
+ CARD16 pad2 B16;
+} xvQueryBestSizeReq;
+#define sz_xvQueryBestSizeReq 20
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+} xvQueryPortAttributesReq;
+#define sz_xvQueryPortAttributesReq 8
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Drawable drawable B32;
+ GContext gc B32;
+ CARD32 id B32;
+ INT16 src_x B16;
+ INT16 src_y B16;
+ CARD16 src_w B16;
+ CARD16 src_h B16;
+ INT16 drw_x B16;
+ INT16 drw_y B16;
+ CARD16 drw_w B16;
+ CARD16 drw_h B16;
+ CARD16 width B16;
+ CARD16 height B16;
+} xvPutImageReq;
+#define sz_xvPutImageReq 40
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+ Drawable drawable B32;
+ GContext gc B32;
+ ShmSeg shmseg B32;
+ CARD32 id B32;
+ CARD32 offset B32;
+ INT16 src_x B16;
+ INT16 src_y B16;
+ CARD16 src_w B16;
+ CARD16 src_h B16;
+ INT16 drw_x B16;
+ INT16 drw_y B16;
+ CARD16 drw_w B16;
+ CARD16 drw_h B16;
+ CARD16 width B16;
+ CARD16 height B16;
+ CARD8 send_event;
+ CARD8 pad1;
+ CARD16 pad2 B16;
+} xvShmPutImageReq;
+#define sz_xvShmPutImageReq 52
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ XvPortID port B32;
+} xvListImageFormatsReq;
+#define sz_xvListImageFormatsReq 8
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xvReqType;
+ CARD16 length B16;
+ CARD32 port B32;
+ CARD32 id B32;
+ CARD16 width B16;
+ CARD16 height B16;
+} xvQueryImageAttributesReq;
+#define sz_xvQueryImageAttributesReq 16
+
+
+/* Replies */
+
+typedef struct _QueryExtensionReply {
+ BYTE type; /* X_Reply */
+ CARD8 padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 version B16;
+ CARD16 revision B16;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvQueryExtensionReply;
+#define sz_xvQueryExtensionReply 32
+
+typedef struct _QueryAdaptorsReply {
+ BYTE type; /* X_Reply */
+ CARD8 padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 num_adaptors B16;
+ CARD16 pads3 B16;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvQueryAdaptorsReply;
+#define sz_xvQueryAdaptorsReply 32
+
+typedef struct _QueryEncodingsReply {
+ BYTE type; /* X_Reply */
+ CARD8 padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 num_encodings B16;
+ CARD32 padl3 B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvQueryEncodingsReply;
+#define sz_xvQueryEncodingsReply 32
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE result;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD32 padl3 B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvGrabPortReply;
+#define sz_xvGrabPortReply 32
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ INT32 value B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvGetPortAttributeReply;
+#define sz_xvGetPortAttributeReply 32
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD16 actual_width B16;
+ CARD16 actual_height B16;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvQueryBestSizeReply;
+#define sz_xvQueryBestSizeReply 32
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD32 num_attributes B32;
+ CARD32 text_size B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvQueryPortAttributesReply;
+#define sz_xvQueryPortAttributesReply 32
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 num_formats B32;
+ CARD32 padl4 B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvListImageFormatsReply;
+#define sz_xvListImageFormatsReply 32
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 num_planes B32;
+ CARD32 data_size B32;
+ CARD16 width B16;
+ CARD16 height B16;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+} xvQueryImageAttributesReply;
+#define sz_xvQueryImageAttributesReply 32
+
+/* DEFINE EVENT STRUCTURE */
+
+typedef struct {
+ union {
+ struct {
+ BYTE type;
+ BYTE detail;
+ CARD16 sequenceNumber B16;
+ } u;
+ struct {
+ BYTE type;
+ BYTE reason;
+ CARD16 sequenceNumber B16;
+ Time time B32;
+ Drawable drawable B32;
+ XvPortID port B32;
+ CARD32 padl5 B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+ } videoNotify;
+ struct {
+ BYTE type;
+ BYTE padb1;
+ CARD16 sequenceNumber B16;
+ Time time B32;
+ XvPortID port B32;
+ Atom attribute B32;
+ INT32 value B32;
+ CARD32 padl6 B32;
+ CARD32 padl7 B32;
+ CARD32 padl8 B32;
+ } portNotify;
+ } u;
+} xvEvent;
+
+#undef XvPortID
+#undef XvEncodingID
+#undef ShmSeg
+#undef VisualID
+#undef Drawable
+#undef GContext
+#undef Time
+#undef Atom
+
+#endif /* XVPROTO_H */
+
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..904cd67
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+ORIGDIR=`pwd`
+cd $srcdir
+
+autoreconf -v --install || exit 1
+cd $ORIGDIR || exit $?
+
+$srcdir/configure --enable-maintainer-mode "$@"
diff --git a/configure.ac b/configure.ac
new file mode 100755
index 0000000..c016740
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,13 @@
+AC_PREREQ([2.60])
+AC_INIT([VideoProto], [2.3.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
+AM_INIT_AUTOMAKE([foreign dist-bzip2])
+AM_MAINTAINER_MODE
+
+# Require xorg-macros: XORG_DEFAULT_OPTIONS
+m4_ifndef([XORG_MACROS_VERSION],
+ [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.3)
+XORG_DEFAULT_OPTIONS
+
+AC_OUTPUT([Makefile
+ videoproto.pc])
diff --git a/packaging/xorg-x11-proto-video.spec b/packaging/xorg-x11-proto-video.spec
new file mode 100644
index 0000000..1da2527
--- /dev/null
+++ b/packaging/xorg-x11-proto-video.spec
@@ -0,0 +1,47 @@
+Name: xorg-x11-proto-video
+Summary: X.Org X11 Protocol videoproto
+Version: 2.3.1
+Release: 2
+Group: Development/System
+License: MIT
+URL: http://www.x.org
+Source0: %{name}-%{version}.tar.gz
+Provides: videoproto
+
+BuildRequires: pkgconfig
+BuildRequires: pkgconfig(xorg-macros)
+
+# some file to be intalled can be ignored when rpm generates packages
+%define _unpackaged_files_terminate_build 0
+
+%description
+Description: %{summary}
+This extension provides a protocol for a video output mechanism,
+mainly to rescale video playback in the video controller hardware.
+
+%prep
+%setup -q
+
+%build
+
+./autogen.sh
+%reconfigure --disable-static \
+ --libdir=%{_datadir} \
+ --without-xmlto
+
+# Call make instruction with smp support
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+%remove_docs
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root,-)
+%{_includedir}/X11/extensions/*.h
+%{_datadir}/pkgconfig/*.pc
diff --git a/videoproto.pc.in b/videoproto.pc.in
new file mode 100644
index 0000000..5840540
--- /dev/null
+++ b/videoproto.pc.in
@@ -0,0 +1,9 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: VideoProto
+Description: Video extension headers
+Version: @PACKAGE_VERSION@
+Cflags: -I${includedir}
diff --git a/vldXvMC.h b/vldXvMC.h
new file mode 100755
index 0000000..5c66ceb
--- /dev/null
+++ b/vldXvMC.h
@@ -0,0 +1,174 @@
+/*****************************************************************************
+ * VLD XvMC Nonstandard extension API.
+ *
+ * Copyright (c) 2004 The Unichrome Project. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Thomas Hellström, 2004.
+ */
+
+
+#ifndef _VLDXVMC_H
+#define _VLDXVMC_H
+
+#include <X11/Xlib.h>
+#include <X11/extensions/XvMC.h>
+
+/*
+ * New "Motion compensation type".
+ */
+
+#define XVMC_VLD 0x0020000
+
+/*
+ * Below Flags to be passed in the XvMCMpegControl structure 'flag' field.
+ */
+
+#define XVMC_PROGRESSIVE_SEQUENCE 0x00000010
+
+/*
+ * Zig-Zag Scan / Alternative Scan.
+ */
+
+#define XVMC_ZIG_ZAG_SCAN 0x00000000
+#define XVMC_ALTERNATE_SCAN 0x00000100
+
+/*
+ * Frame DCT and frame prediction are used. /
+ * Field prediction
+ */
+
+#define XVMC_PRED_DCT_FRAME 0x00000040
+#define XVMC_PRED_DCT_FIELD 0x00000000
+
+/*
+ * Top / Bottom field first
+ */
+
+#define XVMC_TOP_FIELD_FIRST 0x00000080
+#define XVMC_BOTTOM_FIELD_FIRST 0x00000000
+
+/*
+ * Motion vectors coded in intra macroblocks
+ */
+
+#define XVMC_CONCEALMENT_MOTION_VECTORS 0x00000200
+
+/*
+ * Which of two mappings between quantiser_scale_code
+ * and quantiser_scale shall apply.
+ */
+
+#define XVMC_Q_SCALE_TYPE 0x00000400
+
+/*
+ * Intra VLC Format: Bit = 0, Bit = 1
+ * Intra blocks B-14 B-15
+ * Non-intra blocks B-14 B-14
+ */
+#define XVMC_INTRA_VLC_FORMAT 0x00000800
+
+/*
+ * Also XVMC_SECOND_FIELD should be set in flags if active.
+ */
+
+#define XVMC_I_PICTURE 1
+#define XVMC_P_PICTURE 2
+#define XVMC_B_PICTURE 3
+
+typedef struct _XvMCMpegControl{
+ unsigned
+ BVMV_range, /* Backward vertical motion vector range */
+ BHMV_range, /* Backward horizontal motion vector range */
+ FVMV_range, /* Forward vertical motion vector range */
+ FHMV_range, /* Forward horizontal motion vector range */
+ picture_structure, /* XVMC_TOP_FIELD, XVMC_BOTTOM_FIELD,
+ * XVMC_FRAME_PICTURE
+ */
+ intra_dc_precision, /* 0x00 - 0x03 corresponds to 8 to 11 bits prec. */
+ picture_coding_type,/* XVMC_X_PICTURE */
+ mpeg_coding, /* XVMC_MPEG_2 */
+ flags; /* See above */
+}XvMCMpegControl;
+
+
+/*
+ * The following function is called BEFORE starting sending slices to the
+ * lib. It grabs the decoder hardware and prepares it for coming slices.
+ * The function XvMCSyncSurface will release the hardware for other contexts
+ * in addition to it's current functionality.
+ */
+
+extern Status XvMCBeginSurface(Display *display,
+ XvMCContext *context,
+ XvMCSurface *target_surface,
+ XvMCSurface *past_surface,
+ XvMCSurface *future_surface,
+ const XvMCMpegControl *control);
+
+
+/*
+ * The quantizer matrix structure. This should be filled in by the user and
+ * uploaded whenever a change is needed. The lib initializes with
+ * default matrices and will automatically load the hardware with new matrices
+ * on decoder context switches. To load data, set the corresponding load flag
+ * to true and fill in the values. The VIA MPEG2 engine only uses the
+ * intra_quantiser_matrix and the non_intra_quantiser_matrix.
+ */
+
+typedef struct _XvMCQMatrix {
+ int load_intra_quantiser_matrix;
+ int load_non_intra_quantiser_matrix;
+ int load_chroma_intra_quantiser_matrix;
+ int load_chroma_non_intra_quantiser_matrix;
+ unsigned char intra_quantiser_matrix[64];
+ unsigned char non_intra_quantiser_matrix[64];
+ unsigned char chroma_intra_quantiser_matrix[64];
+ unsigned char chroma_non_intra_quantiser_matrix[64];
+} XvMCQMatrix;
+
+/*
+ * Upload a XvMCQMatrix structure to the clientlib.
+ * The hardware will start using it the next XvMCBeginSurface.
+ */
+
+extern Status XvMCLoadQMatrix(Display *display, XvMCContext *context,
+ const XvMCQMatrix *qmx);
+
+
+/*
+ * Put a slice to the decoder. The hardware will start processing it
+ * immediately.
+ */
+
+extern Status XvMCPutSlice(Display *display,XvMCContext *context,
+ char *slice, int nBytes);
+/*
+ * Put a slice without the slice start code to the decoder.
+ * The hardware will start processing it
+ * immediately. This function is for client optimization.
+ * XvMCPutSlice(display,context,slice,nBytes) is equivalent to
+ * XvMCPutSlice2(display,context,slice+4,nBytes-4,slice[3]);
+ */
+
+extern Status XvMCPutSlice2(Display *display,XvMCContext *context,
+ char *slice, int nBytes, int sliceCode);
+
+#endif
diff --git a/xv-protocol-v2.txt b/xv-protocol-v2.txt
new file mode 100755
index 0000000..31e2013
--- /dev/null
+++ b/xv-protocol-v2.txt
@@ -0,0 +1,654 @@
+
+
+
+
+
+
+
+
+
+ X Video Extension
+ Protocol Description
+
+ Version 2
+
+ 25-JUL-91
+
+ David Carver
+
+ Digital Equipment Corporation
+ Workstation Engineering/Project Athena
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ 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.
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+
+ Preface
+ -------
+
+ The following is an outline for an X video extension protocol. It
+ is preliminary and subject to change. My goal in writing this was
+ to fix some the shortcomings of existing overly simplistic
+ extensions while avoiding pitfalls in an overly complex extension.
+
+ Your feedback is desired, and since the major design directions
+ have been stable for some time, feel free to hammer on the details
+ of the protocol.
+
+ When you receive a revision of the document, refer to the changes
+ and issues sections to guide your review and analysis.
+
+
+ Acknowledgements
+ ---------------
+
+ The following people have made major contributions to the design of
+ the Xv protocol:
+
+ Branko Gerovac (DEC/Corporate Research)
+ Russ Sasnett (GTE/Project Athena)
+ Ralph Swick (DEC/Project Athena)
+
+ Many ideas and approaches in Xv were the product of discussions
+ with several groups, including
+
+ Project Athena's Visual Computing Group
+ The MIT X Consortium
+ The MIT Media Lab's Interactive Cinema Group
+
+
+
+ Changes
+ -------
+
+ From version 1.3 to 2.0
+
+ -- Changed SetPortControl and GetPortControl to GetPortAttribute
+ and SetPortAttribute.
+
+ -- Changed QueryBestSize
+
+ -- Simplified SelectVideoNotify and SelectPortNotify requests.
+
+ -- Changed the way SetPortControl and GetPortControl works.
+
+ -- Added a QueryExtension request to return the version and
+ revision information of the extension.
+
+ -- Changed the name of the QueryVideo request to QueryAdaptors;
+ Removed the list of encodings from QueryVideo and added a
+ QueryEncodings request.
+
+ -- Added a PortNotify event that notifies interested clients that
+ a port control has been changed.
+
+ -- Added SelectPortNotify request to select for PortNotify events.
+
+ -- The XvInterruped reason has been replaced by two new reasons:
+ one for when video is preempted by another video request and
+ one for when video is terminated because of hard transmission
+ or reception errors.
+
+ -- Changed the wording of the QueryBestSize request. Added issue
+ about whether or not returned sizes should maintain the
+ requested aspect ratio.
+
+
+
+ Introduction
+ ------------
+
+ Video technology is moving very quickly. Standards for processing
+ high resolution video are currently a hot topic of discussion
+ internationally, and it will soon be possible to process video
+ entirely within the digital domain. The Xv extension, however,
+ does not attempt to address issues of digital video. Its purpose
+ is to provide a mechanism for support of current and near term
+ interactive video technology.
+
+ It is somewhat ironic that Xv contains nothing particularly
+ innovative. It takes a minimalistic approach, and without a doubt
+ it could have been defined years ago, and with several revisions.
+ So, the life expectancy of Xv is not long. Nevertheless, it may
+ undergo further revision and experimentation that will help our
+ progress towards digital video systems.
+
+ One premise of the Xv extension is that the X server is not alone.
+ A separate video server is often used to manage other aspects of
+ video processing, though the partition between what the X server
+ does and what a video server does is a matter of great debate.
+
+
+ Model
+ -----
+
+ This extension models video monitor capabilities in the X Window
+ System. Some advanced monitors support the simultaneous display
+ of multiple video signals (into separate windows), and that is
+ prepresented here through the ability to display video from
+ multiple video input adaptors into X drawables.
+
+ Some monitors support multiple video encodings (mostly for
+ internationalization purposes) either through switches or
+ automatic detection, thus each video adaptor specifies the set of
+ encodings it supports.
+
+ The requests to display video from an adaptor into a drawable are
+ modeled after the core PutImage request, though extended to
+ support scaling and source clipping.
+
+ Video output is also supported and is symmetric with the video
+ input function, though fewer GC components are used.
+
+
+ Mechanism
+ ---------
+
+ The Xv extension does the following:
+
+ -- lists available video adaptors
+ -- identifies the number of ports each adaptor supports
+ -- describes what drawable formats each adaptor supports
+ -- describes what video encodings each adaptor supports
+ -- displays video from a port to a drawable
+ -- captures video from a drawable to a port
+ -- grabs and ungrabs ports
+ -- sets and gets port attributes
+ -- delivers event notification
+
+
+
+ Adaptors
+ --------
+
+ A display may have multiple video input and output adaptors. An
+ adaptor may support multiple simultaneously active ports, and in
+ some cases the number of ports has no fixed limit.
+
+ An input port receives encoded video data and converts it to a
+ stream of data used to update a drawable. An output port samples
+ data from a drawable and produces a stream of encoded video data.
+
+ The ADAPTORINFO structure is used to describe a video adaptor.
+
+ ADAPTORINFO:
+ [base-id: PORT
+ num-ports: CARD16
+ type: SETofADAPTORTYPE
+ formats: LISTofFORMAT
+ name: STRING]
+
+ ADAPTORTYPE: {Input, Output}
+
+ FORMAT:
+ [depth: CARD8
+ visual: VISUALID]
+
+ The base-id field specifies the XID of the first port of the
+ adaptor. The `num-ports' field specifies how many ports the
+ adaptor supports. The ports of the adaptor have XIDs in the range
+ [base-id..base-id + num-ports - 1]
+
+ The type attribute determines if the adaptor can process video
+ input, output, or input and output. The if the adaptor can
+ process input then Input is asserted, if the adaptor can process
+ output then Output is asserted.
+
+ The drawable depths and visual types supported by the adaptor are
+ listed in `formats'. Note: that when video is being processed for
+ pixmaps the visual format is taken to be the visual of the first
+ pair that matches the depth of the pixmap.
+
+ The name field contains an a vendor specific string that
+ identifies the adaptor.
+
+ It should be noted that the existence of separate adaptors doesn't
+ necessarily imply that simultaneous operation is supported.
+
+
+
+ Errors
+ ------
+
+ Port
+
+ A Port error is returned if any request names a PORT that does not
+ exist.
+
+
+ Encoding
+
+ An Encoding error is returned if any request names an ENCODINGID
+ that does not exist.
+
+
+
+
+ Query Requests
+ -------------------
+
+ QueryExtension
+ ==>
+ version: CARD16
+ revision: CARD16
+
+ The QueryExtension request returns the extension version and
+ revision numbers.
+
+
+ QueryAdaptors
+ win: WINDOW
+ ==>
+ adaptors: LISTofADAPTORINFO
+
+ The QueryAdaptors request returns the video adaptor information for
+ the screen of the specified window.
+
+ Errors: {Window}
+
+
+ QueryEncodings
+ port: PORT
+ ==>
+ encodings: LISTofENCODINGINFO
+
+ The QueryEncodings request returns the list of encodings supported
+ by the port adaptor. Use the SetPortAttribute request to set
+ which encoding a port is to process. The ENCODINGINFO record
+ describes an encoding:
+
+ ENCODINGINFO:
+ [encoding: ENCODINGID
+ name: STRING
+ width, height: CARD16
+ rate: FRACTION]
+
+ The `encoding' field identifies an encoding supported by a port.
+ Its value is unique for a screen. Width and height specify the
+ size of the video image and rate specifies the rate at which
+ fields of image information are encoded.
+
+ An encoding is identified by a string that names the encoding.
+ Encoding naming conventions need to be established (i.e.,
+ something along the lines of font naming, but simpler)
+
+ FRACTION
+ [numerator, denominator: INT32]
+
+ The FRACTION structure is used to specify a fractional number.
+
+ Errors: {Port}
+
+
+
+ Put Video Requests
+ ------------------
+
+ PutVideo
+ port: PORT
+ drawable: DRAWABLE
+ gc: GCONTEXT
+ vid-x, vid-y: INT16
+ vid-w, vid-h: CARD16
+ drw-x, drw-y: INT16
+ drw-w, drw-h: CARD16
+
+ The PutVideo request writes video into a drawable. The position
+ and size of the source rectangle is specified by vid-x, vid-y,
+ vid-w, and vid-h. The position and size of the destination
+ rectangle is specified by drw-x, drw-y, drw-w, drw-h.
+
+ Video data is clipped to the bounds of the video encoding, scaled
+ to the requested drawable region size (or the closest size
+ supported), and clipped to the bounds of the drawable.
+
+ If video is successfully initiated, a VideoNotify event with
+ detail Started is generated for the drawable. If the port is
+ already in use, its video is preempted, and if the new drawable is
+ different than the old, a VideoNotify event with detail Preempted
+ is generated for the old drawable. If the port is grabbed by
+ another client, this request is ignored, and a VideoNotify event
+ with detail Busy is generated for the drawable. If the port is
+ not receiving a valid video signal or if the video signal is
+ interrupted while video is active a VideoNotify event with detail
+ HardError is generated for the drawable.
+
+ GC components: subwindow-mode, clip-x-origin, clip-y-origin, clip-mask.
+
+ Errors: {Match, Value, GContext, Port, Alloc}
+
+
+ PutStill
+ port: PORT
+ drawable: DRAWABLE
+ gc: GCONTEXT
+ vid-x, vid-y: INT16
+ vid-w, vid-h: CARD16
+ drw-x, drw-y: INT16
+ drw-w, drw-h: CARD16
+
+ The PutStill request writes a single frame of video into a
+ drawable. The position and size of the source rectangle is
+ specified by vid-x, vid-y, vid-w, and vid-h. The position and
+ size of the destination rectangle is specified by drw-x, drw-y,
+ drw-w, drw-h.
+
+ Video data is clipped to the bounds of the video encoding, scaled
+ to the requested drawable region size (or the closest size
+ supported) and clipped to the bounds of the drawable.
+
+ If the port is grabbed by another client, this request is ignored,
+ and a VideoNotify event with detail Busy is generated for the
+ drawable. If the port is not receiving a valid video signal a
+ VideoNotify event with detail HardError is generated for the
+ drawable.
+
+ GC components: subwindow-mode, clip-x-origin, clip-y-origin, clip-mask.
+
+ Errors: {Match, Value, GContext, Port, Alloc}
+
+
+
+ Get Video Requests
+ ------------------
+
+ GetVideo
+ port: PORT
+ drawable: DRAWABLE
+ gc: GCONTEXT
+ vid-x, vid-y: INT16
+ vid-w, vid-h: CARD16
+ drw-x, drw-y: INT16
+ drw-w, drw-h: CARD16
+
+ The GetVideo request outputs video from a drawable. The position
+ and size of the destination rectangle is specified by vid-x,
+ vid-y, vid-w, and vid-h. The position and size of the source
+ rectangle is specified by drw-x, drw-y, drw-w, and drw-h.
+
+ Drawable data is clipped to the bounds of the drawable, scaled to
+ the requested video region size (or the closest size supported)
+ and clipped to the bounds of the video encoding. The contents of
+ any region not updated with drawable data is undefined.
+
+ If video is successfully initiated, a VideoNotify event with
+ detail Started is generated for the drawable. If the port is
+ already in use, its video is preempted, and if the new drawable is
+ different than the old, a VideoNotify event with detail Preempted
+ is generated for the old drawable. If the port is grabbed by
+ another client, this request is ignored, and a VideoNotify event
+ with detail Busy is generated for the drawable.
+
+ GC components: subwindow-mode, clip-x-origin, clip-y-origin,
+ clip-mask.
+
+ Errors: {Match, Value, GContext, Port, Alloc}
+
+
+ GetStill
+ port: PORT
+ drawable: DRAWABLE
+ gc: GCONTEXT
+ vid-x, vid-y: INT16
+ vid-w, vid-h: CARD16
+ drw-x, drw-y: INT16
+ drw-w, drw-h: CARD16
+
+ The GetStill request outputs video from a drawable. The position
+ and size of the destination rectangle is specified by vid-x,
+ vid-y, vid-w, and vid-h. The position and size of the source
+ rectangle is specified by drw-x, drw-y, drw-w, and drw-h.
+
+ Drawable data is clipped to the bounds of the drawable, scaled to
+ the requested video region size (or the closest size supported)
+ and clipped to the bounds of the video encoding. The contents of
+ any region not updated with drawable data is undefined.
+
+ If the still is successfully captured a VideoNotify event with
+ detail Still is generated for the drawable. If the port is
+ grabbed by another client, this request is ignored, and a
+ VideoNotify event with detail Busy is generated for the drawable.
+
+ GC components: subwindow-mode, clip-x-origin, clip-y-origin,
+ clip-mask.
+
+ Errors: {Match, Value, GContext, Port, Alloc}
+
+
+
+
+ Grab Requests
+ -------------
+
+ GrabPort
+ port: PORT
+ timestamp: {TIMESTAMP, CurrentTime}
+ ==>
+ status: {Success, AlreadyGrabbed, InvalidTime}
+
+ The GrabPort request grabs a port. While a port is grabbed, only
+ video requests from the grabbing client are permitted.
+
+ If timestamp specifies a time older than the current port time, a
+ status of InvalidTime is returned. If the port is already grabbed
+ by another client, a status of AlreadyGrabbed is returned.
+ Otherwise a status of Success is returned. The port time is
+ updated when the following requests are processed: GrabPort,
+ UngrabPort, PutVideo, PutStill, GetVideo, GetStill
+
+ If the port is actively processing video for another client, the
+ video is preempted, and an VideoNotify event with detail Preempted
+ is generated for its drawable.
+
+ Errors: {Port}
+
+
+ UngrabPort
+ port: PORT
+ timestamp: {TIMESTAMP, CurrentTime}
+
+ The UngrabPort request ungrabs a port. If timestamp specifies a
+ time before the last connection request time of this port, the
+ request is ignored.
+
+ Errors: {Port}
+
+
+
+ Other Requests
+ --------------
+
+ StopVideo
+ port: PORT
+ drawable: DRAWABLE
+
+ The StopVideo request stops active video for the specified port
+ and drawable. If the port isn't processing video, or if it is
+ processing video in a different drawable, the request is ignored.
+ When video is stopped a VideoNotify event with detail Stopped is
+ generated for the associated drawable.
+
+ Errors: {Drawable, Port}
+
+
+ SelectVideoNotify
+ drawable: DRAWABLE
+ onoff: BOOL
+
+ The SelectVideoNotify request enables or disables VideoNotify
+ event delivery to the requesting client. VideoNotify events are
+ generated when video starts and stops.
+
+ Errors: {Drawable}
+
+
+ SelectPortNotify
+ port: PORT
+ onoff: BOOL
+
+ The SelectPortNotify request enables or disables PortNotify event
+ delivery to the requesting client. PortNotify events are
+ generated when port attributes are changed using SetPortAttribute.
+
+ Errors: {Port}
+
+
+ QueryBestSize
+ port: PORT
+ motion: BOOL
+ vid-w, vid-h: CARD16
+ drw-w, drw-h: CARD16
+ ==>
+ actual-width, actual-height: CARD16
+
+ The QueryBestSize request returns, for the given source size and
+ desired destination size, the closest destination size that the
+ port adaptor supports. The returned size will be equal
+ or smaller than the requested size if one is supported. If motion
+ is True then the requested size is intended for use with full
+ motion video. If motion is False, the requested size is intended
+ for use with stills only.
+
+ The retuned size is also chosen to maintain the requested aspect ratio
+ if possible.
+
+ Errors: {Port}
+
+
+
+ SetPortAttribute
+ port: PORT
+ attribute: ATOM
+ value: INT32
+
+ The SetPortAttribute request sets the value of a port attribute.
+ The port attribute is identified by the attribute atom. The
+ following strings are guaranteed to generate valid atoms using the
+ InternAtom request.
+
+ String Type
+ -----------------------------------------------------------------
+
+ "XV_ENCODING" ENCODINGID
+ "XV_HUE" [-1000..1000]
+ "XV_SATURATION" [-1000..1000]
+ "XV_BRIGHTNESS" [-1000..1000]
+ "XV_CONTRAST" [-1000..1000]
+
+
+ If the given attribute doesn't match an attribute supported by the
+ port adaptor a Match error is generated. The supplied encoding
+ must be one of the encodings listed for the adaptor, otherwise an
+ Encoding error is generated.
+
+ If the adaptor doesn't support the exact hue, saturation,
+ brightness, and contrast levels supplied, the closest levels
+ supported are assumed. The GetPortAttribute request can be used
+ to query the resulting levels.
+
+ When a SetPortAttribute request is processed a PortNotify event is
+ generated for all clients that have requested port change
+ notification using SelectPortNotify.
+
+ Errors: {Port, Match, Value}
+
+
+ GetPortAttribute
+ port: PORT
+ attribute: ATOM
+ ==>
+ value: INT32
+
+
+ The GetPortAttribute request returns the current value of the
+ attribute identified by the given atom. If the given atom
+ doesn't match an attribute supported by the adaptor a Match
+ error is generated.
+
+ Errors: {Port, Match}
+
+
+
+ Events
+ ------
+
+ VideoNotify
+ drawable: DRAWABLE
+ port: PORT
+ reason: REASON
+ time: TIMESTAMP
+
+ REASON: {Started, Still, Stopped, Busy, Preempted, HardError}
+
+ A VideoNotify event is generated when video activity is started,
+ stopped, or unable to proceed in a drawable.
+
+ A Started reason is generated when video starts in a drawable.
+
+ A Stopped reason is generated when video is stopped in a
+ drawable upon request.
+
+ A Busy reason is generated when a put or get request cannot
+ proceed because the port is grabbed by another client.
+
+ A Preempted reason is generated when video is stopped by a
+ conflicting request.
+
+ A HardError reason is generated when the video port cannot
+ initiate or continue processing a video request because of an
+ underlying transmission or reception error.
+
+
+ PortNotify
+ port: PORT
+ attribute: ATOM
+ value: INT32
+ time: TIMESTAMP
+
+ The PortNotify event is generated when a SetPortAttribute request
+ is processed. The event is delivered to all clients that have
+ performed a SelectPortNotify request for the port. The event
+ contains the atom identifying the attribute that changed, and the
+ new value of that attribute.