XvMC Wrapper, Round 2.

Thomas Hellström unichrome at shipmail.org
Wed Sep 22 05:51:13 PDT 2004


I had a go of implementing the protocol for XvMC client driver name.
Works like this:

1. The server side driver checks the X server version. If it is compatible
with client name registering, it calls

XvMCRegisterDRIClientDriverName(ScreenPtr pScreen, char *name)

right after

XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt).

This should maintain backwards binary compatibility. If the register
function is not called, the name defaults to NULL.

2. When a client calls one of the wrapper functions, the wrapper tries to
obtain the name from the X server through a
char *XvMCDRIGetClientName (display, port).
If it fails, or the name is NULL, it checks the /etc/X11/XvMCConfig file
for the client driver name, dlopens() and is up running.

This would require the following protocol additions, but the client
drivers need not be changed and there's only a minimal change on the
server driver side:

This could all in fact be implemented in libXvMC.so, but since most
players already link that together with a hardware specific library this
might not be the way to go. The alternative is to provide libXvMCW.so or
bump .so version?

Again, comments and opinions would be appreciated.


diff -u -r1.5 XvMCproto.h
--- XvMCproto.h 14 Nov 2001 21:54:37 -0000      1.5
+++ XvMCproto.h 22 Sep 2004 12:39:40 -0000
@@ -12,7 +12,8 @@
 #define xvmc_CreateSubpicture          6
 #define xvmc_DestroySubpicture         7
 #define xvmc_ListSubpictureTypes       8
-#define xvmc_LastRequest               xvmc_ListSubpictureTypes
+#define xvmc_DRIGetClientDriverName     9
+#define xvmc_LastRequest               xvmc_DRIGetClientDriverName

 #define xvmcNumRequest                 (xvmc_LastRequest + 1)

@@ -200,4 +203,25 @@
 } xvmcListSubpictureTypesReply;
 #define sz_xvmcListSubpictureTypesReply 32

+typedef struct {
+  CARD8 reqType;
+  CARD8 xvmcReqType;
+  CARD16 length B16;
+  CARD32 port B32;
+} xvmcDRIGetClientDriverNameReq;
+#define sz_xvmcDRIGetClientDriverNameReq 4;
+typedef struct {
+  BYTE type;  /* X_Reply */
+  BYTE padb1;
+  CARD16 sequenceNumber B16;
+  CARD32 length B32;
+  CARD32 padl2; /* Future extension, like DDX version ??? */
+  CARD32 padl3;
+} xvmcDRIGetClientDriverNameReply;
+#define sz_xvmcGetClientDriverNameReply 16

More information about the xorg mailing list