annotate libvo/vo_xv.c @ 1346:d6e6132bff35

AUDIO_ENCODING_LINEAR8 format is not available on sunos 5.5. Format is unsupported in mplayer for now, to get the code compiled on that old version of the OS.
author jkeil
date Thu, 19 Jul 2001 20:04:54 +0000
parents f1f35276f635
children d40f2b686846
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
1
1265
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
2 // Number of buffers _FOR_DOUBLEBUFFERING_MODE_
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
3 // Use option -double to enable double buffering! (default: single buffer)
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
4 #define NUM_BUFFERS 2
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
6 /*
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
7 * vo_xv.c, X11 Xv interface
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 *
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
9 * Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved.
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 * Hacked into mpeg2dec by
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
12 *
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 * Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 * Xv image suuport by Gerd Knorr <kraxel@goldbach.in-berlin.de>
1265
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
16 * fullscreen support by Pontscho
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
17 * double buffering support by A'rpi
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 LIBVO_EXTERN(xv)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 #include <X11/Xlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 #include <X11/Xutil.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 #include <X11/extensions/XShm.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 #include <errno.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
35 #include "x11_common.h"
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
36
354
7de9e48c83a5 memcpy() moved mmx.h -> fastmemcpy.h
arpi_esp
parents: 350
diff changeset
37 #include "fastmemcpy.h"
616
41d6eec69b60 clean up
pontscho
parents: 614
diff changeset
38 #include "sub.h"
350
601822cc8c52 applied MMX2 memcpy() patch by Nick Kurshev
arpi_esp
parents: 326
diff changeset
39
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
40 static vo_info_t vo_info =
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41 {
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
42 "X11/Xv",
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
43 "xv",
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
44 "Gerd Knorr <kraxel@goldbach.in-berlin.de>",
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
45 ""
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 /* since it doesn't seem to be defined on some platforms */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 int XShmGetEventBase(Display*);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 /* local data */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 static unsigned char *ImageData;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 /* X11 related variables */
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
55 //static Display *mydisplay;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 static Window mywindow;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 static GC mygc;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 static XImage *myximage;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 static int depth, bpp, mode;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 static XWindowAttributes attribs;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 #include <X11/extensions/Xv.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 #include <X11/extensions/Xvlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 // FIXME: dynamically allocate this stuff
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 static void allocate_xvimage(int);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 static unsigned int ver,rel,req,ev,err;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 static unsigned int formats, adaptors,i,xv_port,xv_format;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 static XvAdaptorInfo *ai;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 static XvImageFormatValues *fo;
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
70
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
71 static int current_buf=0;
1265
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
72 static int num_buffers=1; // default
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
73 static XvImage* xvimage[NUM_BUFFERS];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 #include <sys/ipc.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 #include <sys/shm.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 #include <X11/extensions/XShm.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 static int Shmem_Flag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 static int Quiet_Flag;
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
81 static XShmSegmentInfo Shminfo[NUM_BUFFERS];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 static int gXErrorFlag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 static int CompletionType = -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 static uint32_t image_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 static uint32_t image_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 static uint32_t image_format;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
89 static Window mRoot;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
90 static uint32_t drwX,drwY,drwWidth,drwHeight,drwBorderWidth,drwDepth;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
91 static uint32_t drwcX,drwcY,dwidth,dheight,mFullscreen;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
93 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
94 static uint32_t mdwidth,mdheight;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
95 #endif
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
96
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
97 /*
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
98 * connect to server, create and map window,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 * allocate colors and (shared) memory
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 */
844
108ea5157cbc didn't handle flags parameter correctly
arpi_esp
parents: 723
diff changeset
101 static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 {
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
103 // int screen;
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
104 char *hello = (title == NULL) ? "Xv render" : title;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
105 // char *name = ":0.0";
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
106 XSizeHints hint;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
107 XVisualInfo vinfo;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
108 XEvent xev;
1186
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
109 XvPortID xv_p;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
111 XGCValues xgcv;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
112 XSetWindowAttributes xswa;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
113 unsigned long xswamask;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
115 image_height = height;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
116 image_width = width;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
117 image_format=format;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118
844
108ea5157cbc didn't handle flags parameter correctly
arpi_esp
parents: 723
diff changeset
119 mFullscreen=flags&1;
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
120 dwidth=d_width; dheight=d_height;
1265
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
121 num_buffers=vo_doublebuffering?NUM_BUFFERS:1;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
122
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
123 if (!vo_init()) return -1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
125 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
126 if ( vo_window == None )
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
127 {
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
128 #endif
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
129 hint.x = 0;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
130 hint.y = 0;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
131 hint.width = d_width;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
132 hint.height = d_height;
844
108ea5157cbc didn't handle flags parameter correctly
arpi_esp
parents: 723
diff changeset
133 if ( mFullscreen )
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
134 {
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
135 hint.width=vo_screenwidth;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
136 hint.height=vo_screenheight;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
137 }
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
138 hint.flags = PPosition | PSize;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
139 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs);
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
140 depth=attribs.depth;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
141 if (depth != 15 && depth != 16 && depth != 24 && depth != 32) depth = 24;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
142 XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo);
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
143
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
144 xswa.background_pixel = 0;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
145 xswa.border_pixel = 0;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
146 xswamask = CWBackPixel | CWBorderPixel;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
148 mywindow = XCreateWindow(mDisplay, RootWindow(mDisplay,mScreen),
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
149 hint.x, hint.y, hint.width, hint.height,
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
150 0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa);
1137
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 922
diff changeset
151 vo_x11_classhint( mDisplay,mywindow,"xv" );
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
152 vo_hidecursor(mDisplay,mywindow);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
154 XSelectInput(mDisplay, mywindow, StructureNotifyMask | KeyPressMask );
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
155 XSetStandardProperties(mDisplay, mywindow, hello, hello, None, NULL, 0, &hint);
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
156 if ( mFullscreen ) vo_x11_decoration( mDisplay,mywindow,0 );
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
157 XMapWindow(mDisplay, mywindow);
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
158 XFlush(mDisplay);
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
159 XSync(mDisplay, False);
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
160 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
161 }
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
162 else
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
163 {
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
164 mywindow=vo_window;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
165 mygc=vo_gc;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
166 if ( vo_screenwidth != d_width )
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
167 {
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
168 XMoveWindow( mDisplay,mywindow,( vo_screenwidth - d_width ) / 2,( vo_screenheight - d_height ) / 2 );
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
169 XResizeWindow( mDisplay,mywindow,d_width,d_height );
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
170 }
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
171 else mFullscreen=1;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
172 }
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
173 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
175 mygc = XCreateGC(mDisplay, mywindow, 0L, &xgcv);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
177 xv_port = 0;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
178 if (Success == XvQueryExtension(mDisplay,&ver,&rel,&req,&ev,&err))
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
179 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
180 /* check for Xvideo support */
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
181 if (Success != XvQueryAdaptors(mDisplay,DefaultRootWindow(mDisplay), &adaptors,&ai))
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
182 {
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
183 printf("Xv: XvQueryAdaptors failed");
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
184 return -1;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
185 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
186 /* check adaptors */
1186
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
187 for (i = 0; i < adaptors && xv_port == 0; i++)
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
188 {
1186
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
189 if ((ai[i].type & XvInputMask) && (ai[i].type & XvImageMask))
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
190 for (xv_p = ai[i].base_id; xv_p < ai[i].base_id+ai[i].num_ports; ++xv_p)
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
191 if (!XvGrabPort(mDisplay, xv_p, CurrentTime)) {
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
192 xv_port = xv_p;
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
193 break;
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
194 } else {
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
195 printf("Xv: could not grab port %i\n", (int)xv_p);
beb0ee0f3a25 Xv port locking patch by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi_esp
parents: 1137
diff changeset
196 }
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
197 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
198 /* check image formats */
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
199 if (xv_port != 0)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
200 {
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
201 fo = XvListImageFormats(mDisplay, xv_port, (int*)&formats);
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
202 xv_format=0;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
203 for(i = 0; i < formats; i++)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
204 {
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
205 printf("Xvideo image format: 0x%x (%4.4s) %s\n", fo[i].id,(char*)&fo[i].id, (fo[i].format == XvPacked) ? "packed" : "planar");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
207 if (fo[i].id == format)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
208 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
209 xv_format = fo[i].id;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
210 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
211 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
212 if (!xv_format) xv_port = 0;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
213 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
214
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
215 if (xv_port != 0)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
216 {
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
217 printf( "using Xvideo port %d for hw scaling\n",xv_port );
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
218
1265
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
219 for(current_buf=0;current_buf<num_buffers;++current_buf)
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
220 allocate_xvimage(current_buf);
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
221
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
222 current_buf=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
224 XGetGeometry( mDisplay,mywindow,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth );
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
225 drwX=0; drwY=0;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
226 XTranslateCoordinates( mDisplay,mywindow,mRoot,0,0,&drwcX,&drwcY,&mRoot );
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
227 printf( "[xv] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
229 if ( mFullscreen )
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
230 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
231 drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
232 drwcX+=drwX;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
233 drwY=( vo_screenheight - (dheight > vo_screenheight?vo_screenheight:dheight) ) / 2;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
234 drwcY+=drwY;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
235 drwWidth=(dwidth > vo_screenwidth?vo_screenwidth:dwidth);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
236 drwHeight=(dheight > vo_screenheight?vo_screenheight:dheight);
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
237 printf( "[xv-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
238 }
322
4e69a8e2700a Screensaver and monitor powersafe function is switched off when playing a
laaz
parents: 249
diff changeset
239
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
240 saver_off(mDisplay); // turning off screen saver
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
241 return 0;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
242 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
243 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
245 printf("Sorry, Xv not supported by this X11 version/driver\n");
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
246 printf("******** Try with -vo x11 or -vo sdl *********\n");
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
247 return 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
250 static const vo_info_t * get_info(void)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
251 { return &vo_info; }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
253 static void allocate_xvimage(int foo)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 {
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
255 /*
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
256 * allocate XvImages. FIXME: no error checking, without
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
257 * mit-shm this will bomb...
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
258 */
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
259 xvimage[foo] = XvShmCreateImage(mDisplay, xv_port, xv_format, 0, image_width, image_height, &Shminfo[foo]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
261 Shminfo[foo].shmid = shmget(IPC_PRIVATE, xvimage[foo]->data_size, IPC_CREAT | 0777);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
262 Shminfo[foo].shmaddr = (char *) shmat(Shminfo[foo].shmid, 0, 0);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
263 Shminfo[foo].readOnly = False;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
265 xvimage[foo]->data = Shminfo[foo].shmaddr;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
266 XShmAttach(mDisplay, &Shminfo[foo]);
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
267 XSync(mDisplay, False);
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
268 shmctl(Shminfo[foo].shmid, IPC_RMID, 0);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
269 memset(xvimage[foo]->data,128,xvimage[foo]->data_size);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
270 return;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
273 static void check_events(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 {
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
275 int e=vo_x11_check_events(mDisplay);
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
276 if(e&VO_EVENT_RESIZE)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
277 {
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
278 XGetGeometry( mDisplay,mywindow,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth );
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
279 drwX=0; drwY=0;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
280 XTranslateCoordinates( mDisplay,mywindow,mRoot,0,0,&drwcX,&drwcY,&mRoot );
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
281 printf( "[xv] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
282
723
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
283 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
284 if ( vo_window != None )
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
285 {
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
286 mFullscreen=0;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
287 dwidth=mdwidth; dheight=mdheight;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
288 if ( ( drwWidth == vo_screenwidth )&&( drwHeight == vo_screenheight ) )
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
289 {
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
290 mFullscreen=1;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
291 dwidth=vo_screenwidth;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
292 dheight=vo_screenwidth * mdheight / mdwidth;
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
293 }
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
294 }
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
295 #endif
c3e0bdb64027 add gui support
pontscho
parents: 676
diff changeset
296
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
297 if ( mFullscreen )
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
298 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
299 drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
300 drwcX+=drwX;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
301 drwY=( vo_screenheight - (dheight > vo_screenheight?vo_screenheight:dheight) ) / 2;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
302 drwcY+=drwY;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
303 drwWidth=(dwidth > vo_screenwidth?vo_screenwidth:dwidth);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
304 drwHeight=(dheight > vo_screenheight?vo_screenheight:dheight);
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
305 printf( "[xv-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
306 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
307 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309
247
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
310
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
311 static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
312 int x,y;
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
313
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
314 switch (xv_format) {
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
315 case IMGFMT_YV12:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
316 case IMGFMT_I420:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
317 case IMGFMT_IYUV:
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
318 vo_draw_alpha_yv12(w,h,src,srca,stride,xvimage[current_buf]->data+image_width*y0+x0,image_width);
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
319 break;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
320 case IMGFMT_YUY2:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
321 case IMGFMT_YVYU:
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
322 vo_draw_alpha_yuy2(w,h,src,srca,stride,xvimage[current_buf]->data+2*(image_width*y0+x0),2*image_width);
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
323 break;
450
ce10c892074f fixed osd for UYVY image format
atmosfear
parents: 408
diff changeset
324 case IMGFMT_UYVY:
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
325 vo_draw_alpha_yuy2(w,h,src,srca,stride,xvimage[current_buf]->data+2*(image_width*y0+x0)+1,2*image_width);
450
ce10c892074f fixed osd for UYVY image format
atmosfear
parents: 408
diff changeset
326 break;
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
327 }
247
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
328
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
329 }
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
330
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
331 static void flip_page(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 {
247
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
333 vo_draw_text(image_width,image_height,draw_alpha);
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
334 check_events();
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
335 XvShmPutImage(mDisplay, xv_port, mywindow, mygc, xvimage[current_buf],
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
336 0, 0, image_width, image_height,
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
337 drwX,drwY,drwWidth,(mFullscreen?drwHeight - 1:drwHeight),
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
338 False);
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
339 XFlush(mDisplay);
1265
f1f35276f635 switching double buffering at runtime with -double
arpi
parents: 1186
diff changeset
340 current_buf=(current_buf+1)%num_buffers;
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
341 return;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343
247
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
344
dd107cd7686d OSD/SUB support
arpi_esp
parents: 182
diff changeset
345
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
346 static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347 {
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
348 uint8_t *src;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
349 uint8_t *dst;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
350 int i;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
351
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
352 dst = xvimage[current_buf]->data + image_width * y + x;
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
353 src = image[0];
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
354 if(w==stride[0] && w==image_width) memcpy(dst,src,w*h);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
355 else
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
356 for(i=0;i<h;i++)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
357 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
358 memcpy(dst,src,w);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
359 src+=stride[0];
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
360 dst+=image_width;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
361 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
362
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
363 x/=2;y/=2;w/=2;h/=2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
365 dst = xvimage[current_buf]->data + image_width * image_height + image_width/2 * y + x;
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
366 src = image[2];
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
367 if(w==stride[2] && w==image_width/2) memcpy(dst,src,w*h);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
368 else
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
369 for(i=0;i<h;i++)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
370 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
371 memcpy(dst,src,w);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
372 src+=stride[2];
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
373 dst+=image_width/2;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
374 }
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
375 dst = xvimage[current_buf]->data + image_width * image_height * 5 / 4 + image_width/2 * y + x;
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
376 src = image[1];
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
377 if(w==stride[1] && w==image_width/2) memcpy(dst,src,w*h);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
378 else
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
379 for(i=0;i<h;i++)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
380 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
381 memcpy(dst,src,w);
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
382 src+=stride[1];
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
383 dst+=image_width/2;
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
384 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
385 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
386 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
387
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
388 static uint32_t draw_frame(uint8_t *src[])
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
389 {
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
390 int foo;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
391
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
392 switch (xv_format) {
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
393 case IMGFMT_YUY2:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
394 case IMGFMT_UYVY:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
395 case IMGFMT_YVYU:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
396
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
397 // YUY2 packed, flipped
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
398 #if 0
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
399 int i;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
400 unsigned short *s=(unsigned short *)src[0];
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
401 unsigned short *d=(unsigned short *)xvimage[current_buf]->data;
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
402 s+=image_width*image_height;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
403 for(i=0;i<image_height;i++) {
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
404 s-=image_width;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
405 memcpy(d,s,image_width*2);
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
406 d+=image_width;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
407 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
408 #else
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
409 memcpy(xvimage[current_buf]->data,src[0],image_width*image_height*2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
410 #endif
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
411 break;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
412
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
413 case IMGFMT_YV12:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
414 case IMGFMT_I420:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
415 case IMGFMT_IYUV:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
416
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
417 // YV12 planar
676
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
418 memcpy(xvimage[current_buf]->data,src[0],image_width*image_height);
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
419 memcpy(xvimage[current_buf]->data+image_width*image_height,src[2],image_width*image_height/4);
428755f858f7 multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents: 616
diff changeset
420 memcpy(xvimage[current_buf]->data+image_width*image_height*5/4,src[1],image_width*image_height/4);
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
421 break;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
422 }
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
423
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
424 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
425 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
426
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
427 static uint32_t query_format(uint32_t format)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
428 {
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
429
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
430 // umm, this is a kludge, we need to ask the server.. (see init function above)
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
431 return 1;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
432 /*
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
433 switch(format)
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
434 {
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
435 case IMGFMT_YV12:
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
436 case IMGFMT_YUY2:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
437 return 1;
182
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
438 }
80a7b40f201a *** empty log message ***
pontscho
parents: 31
diff changeset
439 return 0;
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 384
diff changeset
440 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
441 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
442
322
4e69a8e2700a Screensaver and monitor powersafe function is switched off when playing a
laaz
parents: 249
diff changeset
443 static void uninit(void) {
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 844
diff changeset
444 saver_on(mDisplay); // screen saver back on
322
4e69a8e2700a Screensaver and monitor powersafe function is switched off when playing a
laaz
parents: 249
diff changeset
445 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
446
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
447
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
448