annotate src/video/x11/SDL_x11yuv.c @ 934:af585d6efec8

Date: Thu, 17 Jun 2004 11:38:51 -0700 (PDT) From: Eric Wing <ewing2121@yahoo.com> Subject: New OS X patch (was Re: [SDL] Bug with inverted mouse coordinates in I have a new patch for OS X I would like to submit. First, it appears no further action has been taken on my fix from Apple on the OpenGL windowed mode mouse inversion problem. The fix would reunify the code, and no longer require case checking for which version of the OS you are running. This is probably a good fix because the behavior with the old code could change again with future versions of the OS, so those fixes are included in this new patch. But in addition, when I was at Apple, I asked them about the ability to distinguish between the modifier keys on the left and right sides of the keyboard (e.g. Left Shift, Right Shift, Left/Right Alt, L/R Cmd, L/R Ctrl). They told me that starting with Panther, the OS began supporting this feature. This has always been a source of annoyance for me when bringing a program that comes from Windows or Linux to OS X when the keybindings happened to need distinguishable left-side and right-side keys. So the rest of the patch I am submitting contains new code to support this feature on Panther (and presumably later versions of the OS). So after removing the OS version checks for the mouse inversion problem, I reused the OS version checks to activate the Left/Right detection of modifier keys. If you are running Panther (or above), the new code will attempt to distinguish between sides. For the older OS's, the code path reverts to the original code. I've tested with Panther on a G4 Cube, G5 dual processor, and Powerbook Rev C. The Cube and G5 keyboards demonstrated the ability to distinguish between sides. The Powerbook seems to only have left-side keys, but the patch was still able to handle it by producing the same results as before the patch. I also wanted to test a non-Apple keyboard. Unfortunately, I don't have any PC USB keyboards. However, I was able to borrow a Sun Microsystems USB keyboard, so I tried that out on the G5, and I got the correct behavior for left and right sides. I'm expecting that if it worked with a Sun keyboard, most other keyboards should work with no problems.
author Sam Lantinga <slouken@libsdl.org>
date Fri, 20 Aug 2004 22:35:23 +0000
parents 6a2c6717b386
children b7a5c1b64829
rev   line source
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1 /*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
769
b8d311d90021 Updated copyright information for 2004 (Happy New Year!)
Sam Lantinga <slouken@libsdl.org>
parents: 659
diff changeset
3 Copyright (C) 1997-2004 Sam Lantinga
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
4
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
6 modify it under the terms of the GNU Library General Public
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
8 version 2 of the License, or (at your option) any later version.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
9
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
13 Library General Public License for more details.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
14
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
15 You should have received a copy of the GNU Library General Public
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
16 License along with this library; if not, write to the Free
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
18
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
19 Sam Lantinga
252
e8157fcb3114 Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents: 182
diff changeset
20 slouken@libsdl.org
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
21 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
22
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
23 #ifdef SAVE_RCSID
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
24 static char rcsid =
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
25 "@(#) $Id$";
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
26 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
27
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
28 /* This is the XFree86 Xv extension implementation of YUV video overlays */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
29
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
30 #ifdef XFREE86_XV
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
31
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
32 #include <stdlib.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
33 #include <string.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
34 #include <X11/Xlib.h>
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
35 #ifndef NO_SHARED_MEMORY
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
36 #include <sys/ipc.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
37 #include <sys/shm.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
38 #include <X11/extensions/XShm.h>
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
39 #endif
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
40 #include <XFree86/extensions/Xvlib.h>
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
41
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
42 #include "SDL_error.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
43 #include "SDL_video.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
44 #include "SDL_x11yuv_c.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
45 #include "SDL_yuvfuncs.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
46
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
47 #define XFREE86_REFRESH_HACK
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
48 #ifdef XFREE86_REFRESH_HACK
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
49 #include "SDL_x11image_c.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
50 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
51
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
52 /* Workaround when pitch != width */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
53 #define PITCH_WORKAROUND
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
54
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
55 /* Fix for the NVidia GeForce 2 - use the last available adaptor */
341
6ca967a46bf1 *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
56 /*#define USE_LAST_ADAPTOR*/ /* Apparently the NVidia drivers are fixed */
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
57
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
58 /* The functions used to manipulate software video overlays */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
59 static struct private_yuvhwfuncs x11_yuvfuncs = {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
60 X11_LockYUVOverlay,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
61 X11_UnlockYUVOverlay,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
62 X11_DisplayYUVOverlay,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
63 X11_FreeYUVOverlay
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
64 };
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
65
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
66 struct private_yuvhwdata {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
67 int port;
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
68 #ifndef NO_SHARED_MEMORY
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
69 int yuv_use_mitshm;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
70 XShmSegmentInfo yuvshm;
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
71 #endif
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
72 SDL_NAME(XvImage) *image;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
73 };
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
74
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
75
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
76 #ifndef NO_SHARED_MEMORY
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
77 /* Shared memory error handler routine */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
78 static int shm_error;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
79 static int (*X_handler)(Display *, XErrorEvent *) = NULL;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
80 static int shm_errhandler(Display *d, XErrorEvent *e)
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
81 {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
82 if ( e->error_code == BadAccess ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
83 shm_error = True;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
84 return(0);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
85 } else
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
86 return(X_handler(d,e));
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
87 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
88 #endif /* !NO_SHARED_MEMORY */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
89
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
90
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
91 SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface *display)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
92 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
93 SDL_Overlay *overlay;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
94 struct private_yuvhwdata *hwdata;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
95 int xv_port;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
96 int i, j, k;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
97 int adaptors;
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
98 SDL_NAME(XvAdaptorInfo) *ainfo;
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
99 int bpp;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
100 #ifndef NO_SHARED_MEMORY
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
101 XShmSegmentInfo *yuvshm;
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
102 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
103
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
104 /* Look for the XVideo extension with a valid port for this format */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
105 xv_port = -1;
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
106 if ( (Success == SDL_NAME(XvQueryExtension)(GFX_Display, &j, &j, &j, &j, &j)) &&
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
107 (Success == SDL_NAME(XvQueryAdaptors)(GFX_Display,
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
108 RootWindow(GFX_Display, SDL_Screen),
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
109 &adaptors, &ainfo)) ) {
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
110 #ifdef USE_LAST_ADAPTOR
659
e3d0517bf67e *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 494
diff changeset
111 for ( i=0; i < adaptors; ++i )
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
112 #else
659
e3d0517bf67e *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 494
diff changeset
113 for ( i=0; (i < adaptors) && (xv_port == -1); ++i )
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
114 #endif /* USE_LAST_ADAPTOR */
659
e3d0517bf67e *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 494
diff changeset
115 {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
116 /* Check to see if the visual can be used */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
117 if ( BUGGY_XFREE86(<=, 4001) ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
118 int visual_ok = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
119 for ( j=0; j<ainfo[i].num_formats; ++j ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
120 if ( ainfo[i].formats[j].visual_id ==
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
121 SDL_Visual->visualid ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
122 visual_ok = 1;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
123 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
124 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
125 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
126 if ( ! visual_ok ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
127 continue;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
128 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
129 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
130 if ( (ainfo[i].type & XvInputMask) &&
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
131 (ainfo[i].type & XvImageMask) ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
132 int num_formats;
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
133 SDL_NAME(XvImageFormatValues) *formats;
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
134 formats = SDL_NAME(XvListImageFormats)(GFX_Display,
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
135 ainfo[i].base_id, &num_formats);
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
136 #ifdef USE_LAST_ADAPTOR
659
e3d0517bf67e *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 494
diff changeset
137 for ( j=0; j < num_formats; ++j )
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
138 #else
659
e3d0517bf67e *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 494
diff changeset
139 for ( j=0; (j < num_formats) && (xv_port == -1); ++j )
182
d4ebd1bbea9a Fix XVideo on GeForce by using last available adaptor
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
140 #endif /* USE_LAST_ADAPTOR */
659
e3d0517bf67e *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 494
diff changeset
141 {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
142 if ( (Uint32)formats[j].id == format ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
143 for ( k=0; k < ainfo[i].num_ports; ++k ) {
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
144 if ( Success == SDL_NAME(XvGrabPort)(GFX_Display, ainfo[i].base_id+k, CurrentTime) ) {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
145 xv_port = ainfo[i].base_id+k;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
146 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
147 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
148 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
149 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
150 }
410
365f57b7c4ac *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 409
diff changeset
151 if ( formats ) {
365f57b7c4ac *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 409
diff changeset
152 XFree(formats);
365f57b7c4ac *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 409
diff changeset
153 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
154 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
155 }
409
1c3cf7231cd4 Fixed memory leaks in YUV code
Sam Lantinga <slouken@libsdl.org>
parents: 341
diff changeset
156 SDL_NAME(XvFreeAdaptorInfo)(ainfo);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
157 }
429
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
158
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
159 /* Precalculate the bpp for the pitch workaround below */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
160 switch (format) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
161 /* Add any other cases we need to support... */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
162 case SDL_YUY2_OVERLAY:
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
163 case SDL_UYVY_OVERLAY:
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
164 case SDL_YVYU_OVERLAY:
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
165 bpp = 2;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
166 break;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
167 default:
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
168 bpp = 1;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
169 break;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
170 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
171
434
ed58b98c0d9d Commented double-free buggy code. Will examine more closely later.
Ryan C. Gordon <icculus@icculus.org>
parents: 429
diff changeset
172 #if 0
429
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
173 /*
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
174 * !!! FIXME:
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
175 * "Here are some diffs for X11 and yuv. Note that the last part 2nd
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
176 * diff should probably be a new call to XvQueryAdaptorFree with ainfo
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
177 * and the number of adaptors, instead of the loop through like I did."
434
ed58b98c0d9d Commented double-free buggy code. Will examine more closely later.
Ryan C. Gordon <icculus@icculus.org>
parents: 429
diff changeset
178 *
ed58b98c0d9d Commented double-free buggy code. Will examine more closely later.
Ryan C. Gordon <icculus@icculus.org>
parents: 429
diff changeset
179 * ACHTUNG: This is broken! It looks like XvFreeAdaptorInfo does this
ed58b98c0d9d Commented double-free buggy code. Will examine more closely later.
Ryan C. Gordon <icculus@icculus.org>
parents: 429
diff changeset
180 * for you, so we end up with a double-free. I need to look at this
ed58b98c0d9d Commented double-free buggy code. Will examine more closely later.
Ryan C. Gordon <icculus@icculus.org>
parents: 429
diff changeset
181 * more closely... --ryan.
429
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
182 */
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
183 for ( i=0; i < adaptors; ++i ) {
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
184 if (ainfo[i].name != NULL) Xfree(ainfo[i].name);
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
185 if (ainfo[i].formats != NULL) Xfree(ainfo[i].formats);
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
186 }
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
187 Xfree(ainfo);
434
ed58b98c0d9d Commented double-free buggy code. Will examine more closely later.
Ryan C. Gordon <icculus@icculus.org>
parents: 429
diff changeset
188 #endif
429
c1666427297c Memory leak fixes by Bill May.
Ryan C. Gordon <icculus@icculus.org>
parents: 410
diff changeset
189
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
190 if ( xv_port == -1 ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
191 SDL_SetError("No available video ports for requested format");
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
192 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
193 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
194
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
195 /* Create the overlay structure */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
196 overlay = (SDL_Overlay *)malloc(sizeof *overlay);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
197 if ( overlay == NULL ) {
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
198 SDL_NAME(XvUngrabPort)(GFX_Display, xv_port, CurrentTime);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
199 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
200 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
201 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
202 memset(overlay, 0, (sizeof *overlay));
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
203
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
204 /* Fill in the basic members */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
205 overlay->format = format;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
206 overlay->w = width;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
207 overlay->h = height;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
208
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
209 /* Set up the YUV surface function structure */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
210 overlay->hwfuncs = &x11_yuvfuncs;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
211 overlay->hw_overlay = 1;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
212
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
213 /* Create the pixel data and lookup tables */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
214 hwdata = (struct private_yuvhwdata *)malloc(sizeof *hwdata);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
215 overlay->hwdata = hwdata;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
216 if ( hwdata == NULL ) {
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
217 SDL_NAME(XvUngrabPort)(GFX_Display, xv_port, CurrentTime);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
218 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
219 SDL_FreeYUVOverlay(overlay);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
220 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
221 }
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
222 hwdata->port = xv_port;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
223 #ifndef NO_SHARED_MEMORY
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
224 yuvshm = &hwdata->yuvshm;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
225 memset(yuvshm, 0, sizeof(*yuvshm));
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
226 hwdata->image = SDL_NAME(XvShmCreateImage)(GFX_Display, xv_port, format,
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
227 0, width, height, yuvshm);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
228 #ifdef PITCH_WORKAROUND
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
229 if ( hwdata->image != NULL && hwdata->image->pitches[0] != (width*bpp) ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
230 /* Ajust overlay width according to pitch */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
231 XFree(hwdata->image);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
232 width = hwdata->image->pitches[0] / bpp;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
233 hwdata->image = SDL_NAME(XvShmCreateImage)(GFX_Display, xv_port, format,
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
234 0, width, height, yuvshm);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
235 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
236 #endif /* PITCH_WORKAROUND */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
237 hwdata->yuv_use_mitshm = (hwdata->image != NULL);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
238 if ( hwdata->yuv_use_mitshm ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
239 yuvshm->shmid = shmget(IPC_PRIVATE, hwdata->image->data_size,
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
240 IPC_CREAT | 0777);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
241 if ( yuvshm->shmid >= 0 ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
242 yuvshm->shmaddr = (char *)shmat(yuvshm->shmid, 0, 0);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
243 yuvshm->readOnly = False;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
244 if ( yuvshm->shmaddr != (char *)-1 ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
245 shm_error = False;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
246 X_handler = XSetErrorHandler(shm_errhandler);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
247 XShmAttach(GFX_Display, yuvshm);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
248 XSync(GFX_Display, True);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
249 XSetErrorHandler(X_handler);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
250 if ( shm_error )
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
251 shmdt(yuvshm->shmaddr);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
252 } else {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
253 shm_error = True;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
254 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
255 shmctl(yuvshm->shmid, IPC_RMID, NULL);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
256 } else {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
257 shm_error = True;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
258 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
259 if ( shm_error ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
260 XFree(hwdata->image);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
261 hwdata->yuv_use_mitshm = 0;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
262 } else {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
263 hwdata->image->data = yuvshm->shmaddr;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
264 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
265 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
266 if ( !hwdata->yuv_use_mitshm )
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
267 #endif /* NO_SHARED_MEMORY */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
268 {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
269 hwdata->image = SDL_NAME(XvCreateImage)(GFX_Display, xv_port, format,
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
270 0, width, height);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
271
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
272 #ifdef PITCH_WORKAROUND
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
273 if ( hwdata->image != NULL && hwdata->image->pitches[0] != (width*bpp) ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
274 /* Ajust overlay width according to pitch */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
275 XFree(hwdata->image);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
276 width = hwdata->image->pitches[0] / bpp;
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
277 hwdata->image = SDL_NAME(XvCreateImage)(GFX_Display, xv_port, format,
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
278 0, width, height);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
279 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
280 #endif /* PITCH_WORKAROUND */
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
281 if ( hwdata->image == NULL ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
282 SDL_SetError("Couldn't create XVideo image");
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
283 SDL_FreeYUVOverlay(overlay);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
284 return(NULL);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
285 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
286 hwdata->image->data = malloc(hwdata->image->data_size);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
287 if ( hwdata->image->data == NULL ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
288 SDL_OutOfMemory();
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
289 SDL_FreeYUVOverlay(overlay);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
290 return(NULL);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
291 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
292 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
293
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
294 /* Find the pitch and offset values for the overlay */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
295 overlay->planes = hwdata->image->num_planes;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
296 overlay->pitches = (Uint16 *)malloc(overlay->planes * sizeof(Uint16));
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
297 overlay->pixels = (Uint8 **)malloc(overlay->planes * sizeof(Uint8 *));
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
298 if ( !overlay->pitches || !overlay->pixels ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
299 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
300 SDL_FreeYUVOverlay(overlay);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
301 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
302 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
303 for ( i=0; i<overlay->planes; ++i ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
304 overlay->pitches[i] = hwdata->image->pitches[i];
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
305 overlay->pixels[i] = (Uint8 *)hwdata->image->data +
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
306 hwdata->image->offsets[i];
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
307 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
308
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
309 #ifdef XFREE86_REFRESH_HACK
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
310 /* Work around an XFree86 X server bug (?)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
311 We can't perform normal updates in windows that have video
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
312 being output to them. See SDL_x11image.c for more details.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
313 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
314 X11_DisableAutoRefresh(this);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
315 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
316
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
317 /* We're all done.. */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
318 return(overlay);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
319 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
320
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
321 int X11_LockYUVOverlay(_THIS, SDL_Overlay *overlay)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
322 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
323 return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
324 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
325
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
326 void X11_UnlockYUVOverlay(_THIS, SDL_Overlay *overlay)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
327 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
328 return;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
329 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
330
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
331 int X11_DisplayYUVOverlay(_THIS, SDL_Overlay *overlay, SDL_Rect *dstrect)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
332 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
333 struct private_yuvhwdata *hwdata;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
334
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
335 hwdata = overlay->hwdata;
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
336 #ifndef NO_SHARED_MEMORY
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
337 if ( hwdata->yuv_use_mitshm ) {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
338 SDL_NAME(XvShmPutImage)(GFX_Display, hwdata->port, SDL_Window, SDL_GC,
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
339 hwdata->image, 0, 0, overlay->w, overlay->h,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
340 dstrect->x, dstrect->y, dstrect->w, dstrect->h, False);
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
341 }
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
342 else
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
343 #endif
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
344 {
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
345 SDL_NAME(XvPutImage)(GFX_Display, hwdata->port, SDL_Window, SDL_GC,
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
346 hwdata->image, 0, 0, overlay->w, overlay->h,
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
347 dstrect->x, dstrect->y, dstrect->w, dstrect->h);
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
348 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
349 XSync(GFX_Display, False);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
350 return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
351 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
352
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
353 void X11_FreeYUVOverlay(_THIS, SDL_Overlay *overlay)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
354 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
355 struct private_yuvhwdata *hwdata;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
356
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
357 hwdata = overlay->hwdata;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
358 if ( hwdata ) {
292
eadc0746dfaf Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
359 SDL_NAME(XvUngrabPort)(GFX_Display, hwdata->port, CurrentTime);
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
360 #ifndef NO_SHARED_MEMORY
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
361 if ( hwdata->yuv_use_mitshm ) {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
362 XShmDetach(GFX_Display, &hwdata->yuvshm);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
363 shmdt(hwdata->yuvshm.shmaddr);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
364 }
813
6a2c6717b386 Added support for remote XVideo (thanks Frederic!)
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
365 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
366 if ( hwdata->image ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
367 XFree(hwdata->image);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
368 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
369 free(hwdata);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
370 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
371 if ( overlay->pitches ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
372 free(overlay->pitches);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
373 overlay->pitches = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
374 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
375 if ( overlay->pixels ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
376 free(overlay->pixels);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
377 overlay->pixels = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
378 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
379 #ifdef XFREE86_REFRESH_HACK
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
380 X11_EnableAutoRefresh(this);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
381 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
382 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
383
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
384 #endif /* XFREE86_XV */