annotate libvo/vo_x11.c @ 4627:3db7ee2ac7b0

bgr15 / bgr16 input support (with -zoom) stride % 8 == 0
author michael
date Sun, 10 Feb 2002 01:07:58 +0000
parents c35d7ce151b3
children b7f340349470
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 #define DISP
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 * video_out_x11.c,X11 interface
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 * Copyright ( C ) 1996,MPEG Software Simulation Group. All Rights Reserved.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 * Hacked into mpeg2dec by
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 * Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 * 15 & 16 bpp support added by Franck Sicard <Franck.Sicard@solsoft.fr>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 #include <signal.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 LIBVO_EXTERN( x11 )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 #include <X11/Xlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 #include <X11/Xutil.h>
4036
76ea6f97ebb7 added rgb24to32 instead of c converter
alex
parents: 4017
diff changeset
30
206
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
31 #ifdef HAVE_XF86VM
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
32 #include <X11/extensions/xf86vmode.h>
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
33 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 #include <errno.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
36 #include "x11_common.h"
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
37
354
7de9e48c83a5 memcpy() moved mmx.h -> fastmemcpy.h
arpi_esp
parents: 350
diff changeset
38 #include "fastmemcpy.h"
616
41d6eec69b60 clean up
pontscho
parents: 614
diff changeset
39 #include "sub.h"
350
601822cc8c52 applied MMX2 memcpy() patch by Nick Kurshev
arpi_esp
parents: 326
diff changeset
40
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
41 #include "../postproc/swscale.h"
2556
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2519
diff changeset
42 #include "../postproc/rgb2rgb.h"
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
43
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 static vo_info_t vo_info =
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 "X11 ( XImage/Shm )",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 "x11",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 "Aaron Holtzman <aholtzma@ess.engr.uvic.ca>",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 ""
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 /* private prototypes */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 static void Display_Image ( XImage * myximage,unsigned char *ImageData );
1647
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
54 static void (*draw_alpha_fnc)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 /* since it doesn't seem to be defined on some platforms */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 int XShmGetEventBase( Display* );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 /* local data */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 static unsigned char *ImageData;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 /* X11 related variables */
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 865
diff changeset
63 //static Display *mDisplay;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 static Window mywindow;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 static GC mygc;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 static XImage *myximage;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 static int depth,bpp,mode;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 static XWindowAttributes attribs;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
70 //static int vo_dwidth,vo_dheight;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71
2969
291f45785de9 fix to compile when SHM is disabled
alex
parents: 2732
diff changeset
72 static int Flip_Flag;
291f45785de9 fix to compile when SHM is disabled
alex
parents: 2732
diff changeset
73
3003
16a593a1e6ed changed SH_MEM to HAVE_SHM according to configure
alex
parents: 2969
diff changeset
74 #ifdef HAVE_SHM
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 #include <sys/ipc.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 #include <sys/shm.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78 #include <X11/extensions/XShm.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 //static int HandleXError _ANSI_ARGS_( ( Display * dpy,XErrorEvent * event ) );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 static void InstallXErrorHandler ( void );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 static void DeInstallXErrorHandler ( void );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 static int Shmem_Flag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 static int Quiet_Flag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 static XShmSegmentInfo Shminfo[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 static int gXErrorFlag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 static int CompletionType=-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 static void InstallXErrorHandler()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 //XSetErrorHandler( HandleXError );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 XFlush( mDisplay );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 static void DeInstallXErrorHandler()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 XSetErrorHandler( NULL );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 XFlush( mDisplay );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 static uint32_t image_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 static uint32_t image_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 static uint32_t image_format;
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
107 static uint32_t out_format=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
109 static void check_events(){
1110
71b8911ec3da -Wall like cleanup
al3x
parents: 922
diff changeset
110 vo_x11_check_events(mDisplay);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112
1647
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
113 static void draw_alpha_32(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
114 vo_draw_alpha_rgb32(w,h,src,srca,stride,ImageData+4*(y0*image_width+x0),4*image_width);
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
115 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
116
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
117 static void draw_alpha_24(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
118 vo_draw_alpha_rgb24(w,h,src,srca,stride,ImageData+3*(y0*image_width+x0),3*image_width);
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
119 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
120
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
121 static void draw_alpha_16(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
122 vo_draw_alpha_rgb16(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width);
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
123 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
124
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
125 static void draw_alpha_15(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
126 vo_draw_alpha_rgb15(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width);
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
127 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
128
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
129 static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
130 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
131
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
132 static SwsContext *swsContext=NULL;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
133 static int useSws=0;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
134 extern int sws_flags;
4512
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
135 /*needed so we can output the correct supported formats in query_format()
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
136 should perhaps be passed as argument to query_format() */
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
137 extern int softzoom;
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
138
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
139 static XVisualInfo vinfo;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
140
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
141 static void getMyXImage()
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
142 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
143 #ifdef HAVE_SHM
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
144 if ( mLocalDisplay && XShmQueryExtension( mDisplay ) ) Shmem_Flag=1;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
145 else
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
146 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
147 Shmem_Flag=0;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
148 if ( !Quiet_Flag ) printf( "Shared memory not supported\nReverting to normal Xlib\n" );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
149 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
150 if ( Shmem_Flag ) CompletionType=XShmGetEventBase( mDisplay ) + ShmCompletion;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
151
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
152 InstallXErrorHandler();
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
153
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
154 if ( Shmem_Flag )
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
155 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
156 myximage=XShmCreateImage( mDisplay,vinfo.visual,depth,ZPixmap,NULL,&Shminfo[0],image_width,image_height );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
157 if ( myximage == NULL )
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
158 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
159 if ( myximage != NULL ) XDestroyImage( myximage );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
160 if ( !Quiet_Flag ) printf( "Shared memory error,disabling ( Ximage error )\n" );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
161 goto shmemerror;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
162 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
163 Shminfo[0].shmid=shmget( IPC_PRIVATE,
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
164 myximage->bytes_per_line * myximage->height ,
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
165 IPC_CREAT | 0777 );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
166 if ( Shminfo[0].shmid < 0 )
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
167 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
168 XDestroyImage( myximage );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
169 if ( !Quiet_Flag )
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
170 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
171 printf( "%s\n",strerror( errno ) );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
172 perror( strerror( errno ) );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
173 printf( "Shared memory error,disabling ( seg id error )\n" );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
174 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
175 goto shmemerror;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
176 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
177 Shminfo[0].shmaddr=( char * ) shmat( Shminfo[0].shmid,0,0 );
3209
0b172eb639f1 swscaler cleanup
michael
parents: 3003
diff changeset
178
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
179 if ( Shminfo[0].shmaddr == ( ( char * ) -1 ) )
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
180 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
181 XDestroyImage( myximage );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
182 if ( Shminfo[0].shmaddr != ( ( char * ) -1 ) ) shmdt( Shminfo[0].shmaddr );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
183 if ( !Quiet_Flag ) printf( "Shared memory error,disabling ( address error )\n" );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
184 goto shmemerror;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
185 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
186 myximage->data=Shminfo[0].shmaddr;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
187 ImageData=( unsigned char * ) myximage->data;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
188 Shminfo[0].readOnly=False;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
189 XShmAttach( mDisplay,&Shminfo[0] );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
190
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
191 XSync( mDisplay,False );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
192
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
193 if ( gXErrorFlag )
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
194 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
195 XDestroyImage( myximage );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
196 shmdt( Shminfo[0].shmaddr );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
197 if ( !Quiet_Flag ) printf( "Shared memory error,disabling.\n" );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
198 gXErrorFlag=0;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
199 goto shmemerror;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
200 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
201 else
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
202 shmctl( Shminfo[0].shmid,IPC_RMID,0 );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
203
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
204 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
205 static int firstTime=1;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
206 if ( !Quiet_Flag && firstTime){
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
207 printf( "Sharing memory.\n" );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
208 firstTime=0;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
209 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
210 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
211 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
212 else
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
213 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
214 shmemerror:
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
215 Shmem_Flag=0;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
216 #endif
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
217 myximage=XGetImage( mDisplay,mywindow,0,0,
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
218 image_width,image_height,AllPlanes,ZPixmap );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
219 ImageData=myximage->data;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
220 #ifdef HAVE_SHM
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
221 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
222
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
223 DeInstallXErrorHandler();
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
224 #endif
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
225 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
226
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
227 static void freeMyXImage()
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
228 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
229 #ifdef HAVE_SHM
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
230 if ( Shmem_Flag )
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
231 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
232 XShmDetach( mDisplay,&Shminfo[0] );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
233 XDestroyImage( myximage );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
234 shmdt( Shminfo[0].shmaddr );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
235 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
236 else
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
237 #endif
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
238 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
239 XDestroyImage( myximage );
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
240 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
241 }
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
242
4433
df8e0f71cc3c new info for tuning
nick
parents: 4426
diff changeset
243 static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t d_height,uint32_t flags,char *title,uint32_t format,const vo_tune_info_t *info)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 {
1110
71b8911ec3da -Wall like cleanup
al3x
parents: 922
diff changeset
245 // int screen;
767
372042df5c77 Added support for flipped BGR/RGB via -flip cmdline switch.
atmosfear
parents: 616
diff changeset
246 int fullscreen=0;
1137
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 1110
diff changeset
247 int vm=0;
1110
71b8911ec3da -Wall like cleanup
al3x
parents: 922
diff changeset
248 // int interval, prefer_blank, allow_exp, nothing;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 unsigned int fg,bg;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 char *hello=( title == NULL ) ? "X11 render" : title;
922
db06ae8967eb Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents: 865
diff changeset
251 // char *name=":0.0";
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 XSizeHints hint;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 XEvent xev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 XGCValues xgcv;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 Colormap theCmap;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 XSetWindowAttributes xswa;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 unsigned long xswamask;
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
258 #ifdef HAVE_XF86VM
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
259 unsigned int modeline_width, modeline_height;
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
260 static uint32_t vm_width;
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
261 static uint32_t vm_height;
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
262 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 image_height=height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 image_width=width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 image_format=format;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267
1137
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 1110
diff changeset
268 if( flags&0x03 ) fullscreen = 1;
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 1110
diff changeset
269 if( flags&0x02 ) vm = 1;
767
372042df5c77 Added support for flipped BGR/RGB via -flip cmdline switch.
atmosfear
parents: 616
diff changeset
270 if( flags&0x08 ) Flip_Flag = 1;
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
271
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
272 //printf( "w: %d h: %d\n\n",vo_dwidth,vo_dheight );
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
273
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
274 XGetWindowAttributes( mDisplay,DefaultRootWindow( mDisplay ),&attribs );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
275 depth=attribs.depth;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
276
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
277 if ( depth != 15 && depth != 16 && depth != 24 && depth != 32 ) depth=24;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
278 XMatchVisualInfo( mDisplay,mScreen,depth,TrueColor,&vinfo );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
279
4512
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
280 if( flags&0x04 && ( format==IMGFMT_YV12 || format==IMGFMT_I420 || format==IMGFMT_IYUV
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
281 || format==IMGFMT_YUY2
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
282 || format==IMGFMT_BGR15|| format==IMGFMT_BGR16 || format==IMGFMT_BGR24 || format==IMGFMT_BGR32)) {
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
283 // software scale
2234
36fa77e785d4 swscale - 16bpp and -fs support
arpi
parents: 2218
diff changeset
284 if(fullscreen){
36fa77e785d4 swscale - 16bpp and -fs support
arpi
parents: 2218
diff changeset
285 image_width=vo_screenwidth;
36fa77e785d4 swscale - 16bpp and -fs support
arpi
parents: 2218
diff changeset
286 image_height=vo_screenheight;
36fa77e785d4 swscale - 16bpp and -fs support
arpi
parents: 2218
diff changeset
287 } else {
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
288 image_width=d_width;
2234
36fa77e785d4 swscale - 16bpp and -fs support
arpi
parents: 2218
diff changeset
289 image_height=d_height;
36fa77e785d4 swscale - 16bpp and -fs support
arpi
parents: 2218
diff changeset
290 }
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
291 useSws=1; // we cannot initialize the swScaler here because we dont know the bpp (or do we?)
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
292 }
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
293
1752
39fc6cc71b3b vo_window bug fixed
pontscho
parents: 1746
diff changeset
294 #ifdef HAVE_NEW_GUI
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
295 if ( vo_window != None ) { mywindow=vo_window; mygc=vo_gc; }
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
296 else
1752
39fc6cc71b3b vo_window bug fixed
pontscho
parents: 1746
diff changeset
297 #endif
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
298 {
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
299 if( !vo_init() ) return 0; // Can't open X11
206
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
300
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
301 hint.x=0;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
302 hint.y=0;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
303 hint.width=image_width;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
304 hint.height=image_height;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
305
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
306 #ifdef HAVE_XF86VM
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
307 if ( vm )
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
308 {
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
309 if ((d_width==0) && (d_height==0))
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
310 { vm_width=image_width; vm_height=image_height; }
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
311 else
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
312 { vm_width=d_width; vm_height=d_height; }
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
313 vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height);
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
314 hint.x=(vo_screenwidth-modeline_width)/2;
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
315 hint.y=(vo_screenheight-modeline_height)/2;
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
316 hint.width=modeline_width;
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
317 hint.height=modeline_height;
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
318 }
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
319 else
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
320 #endif
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
321 if ( fullscreen )
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
322 {
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
323 hint.width=vo_screenwidth;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
324 hint.height=vo_screenheight;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
325 }
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
326 hint.flags=PPosition | PSize;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
327
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
328 bg=WhitePixel( mDisplay,mScreen );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
329 fg=BlackPixel( mDisplay,mScreen );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
330 vo_dwidth=hint.width;
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
331 vo_dheight=hint.height;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
333 theCmap =XCreateColormap( mDisplay,RootWindow( mDisplay,mScreen ),
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
334 vinfo.visual,AllocNone );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
336 xswa.background_pixel=0;
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
337 xswa.border_pixel=0;
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
338 xswa.colormap=theCmap;
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
339 xswamask=CWBackPixel | CWBorderPixel | CWColormap;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
341 #ifdef HAVE_XF86VM
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
342 if ( vm )
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
343 {
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
344 xswa.override_redirect=True;
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
345 xswamask|=CWOverrideRedirect;
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
346 }
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
347 #endif
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
348
3830
fc1db33734e7 WinID cleanup, support for Xv
arpi
parents: 3655
diff changeset
349 if ( WinID>=0 ){
fc1db33734e7 WinID cleanup, support for Xv
arpi
parents: 3655
diff changeset
350 mywindow = WinID ? ((Window)WinID) : RootWindow( mDisplay,mScreen );
3655
18cca6a6816c Plugger patch by Sam Lin
atmos4
parents: 3458
diff changeset
351 XUnmapWindow( mDisplay,mywindow );
18cca6a6816c Plugger patch by Sam Lin
atmos4
parents: 3458
diff changeset
352 XChangeWindowAttributes( mDisplay,mywindow,xswamask,&xswa );
18cca6a6816c Plugger patch by Sam Lin
atmos4
parents: 3458
diff changeset
353 }
18cca6a6816c Plugger patch by Sam Lin
atmos4
parents: 3458
diff changeset
354 else
18cca6a6816c Plugger patch by Sam Lin
atmos4
parents: 3458
diff changeset
355 mywindow=XCreateWindow( mDisplay,RootWindow( mDisplay,mScreen ),
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356 hint.x,hint.y,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357 hint.width,hint.height,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 xswa.border_pixel,depth,CopyFromParent,vinfo.visual,xswamask,&xswa );
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
359
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
360 vo_x11_classhint( mDisplay,mywindow,"x11" );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
361 vo_hidecursor(mDisplay,mywindow);
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
362 if ( fullscreen ) vo_x11_decoration( mDisplay,mywindow,0 );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
363 XSelectInput( mDisplay,mywindow,StructureNotifyMask );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
364 XSetStandardProperties( mDisplay,mywindow,hello,hello,None,NULL,0,&hint );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
365 XMapWindow( mDisplay,mywindow );
4017
21a75ab24703 Xinerama patch number two by attila.
atmos4
parents: 3830
diff changeset
366 #ifdef HAVE_XINERAMA
21a75ab24703 Xinerama patch number two by attila.
atmos4
parents: 3830
diff changeset
367 vo_x11_xinerama_move(mDisplay,mywindow);
21a75ab24703 Xinerama patch number two by attila.
atmos4
parents: 3830
diff changeset
368 #endif
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
369 do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != mywindow );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
370 XSelectInput( mDisplay,mywindow,NoEventMask );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
371
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
372 XFlush( mDisplay );
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
373 XSync( mDisplay,False );
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
374 mygc=XCreateGC( mDisplay,mywindow,0L,&xgcv );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
376 #ifdef HAVE_XF86VM
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
377 if ( vm )
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
378 {
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
379 /* Grab the mouse pointer in our window */
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
380 XGrabPointer(mDisplay, mywindow, True, 0,
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
381 GrabModeAsync, GrabModeAsync,
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
382 mywindow, None, CurrentTime);
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
383 XSetInputFocus(mDisplay, mywindow, RevertToNone, CurrentTime);
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
384 }
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
385 #endif
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
386 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
387
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
388 getMyXImage();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
389
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
390 switch ((bpp=myximage->bits_per_pixel)){
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
391 case 24: draw_alpha_fnc=draw_alpha_24;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
392 out_format= IMGFMT_BGR24; break;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
393 case 32: draw_alpha_fnc=draw_alpha_32;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
394 out_format= IMGFMT_BGR32; break;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
395 case 15:
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
396 case 16: if (depth==15){
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
397 draw_alpha_fnc=draw_alpha_15;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
398 out_format= IMGFMT_BGR15;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
399 }else{
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
400 draw_alpha_fnc=draw_alpha_16;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
401 out_format= IMGFMT_BGR16;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
402 }break;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
403 default: draw_alpha_fnc=draw_alpha_null;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
404 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
405
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
406 if(useSws) swsContext= getSwsContextFromCmdLine(width, height, format, image_width, image_height, out_format );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
407
1137
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 1110
diff changeset
408 // printf( "X11 color mask: R:%lX G:%lX B:%lX\n",myximage->red_mask,myximage->green_mask,myximage->blue_mask );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
409
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
410 // If we have blue in the lowest bit then obviously RGB
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
411 mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_RGB : MODE_BGR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
412 #ifdef WORDS_BIGENDIAN
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
413 if ( myximage->byte_order != MSBFirst )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
414 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
415 if ( myximage->byte_order != LSBFirst )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
416 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
417 {
1137
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 1110
diff changeset
418 mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_BGR : MODE_RGB;
4382
2f540642e44d small typos in text
pl
parents: 4352
diff changeset
419 // printf( "No support for non-native XImage byte order!\n" );
1137
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 1110
diff changeset
420 // return -1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
421 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
422
4340
8a6f0b482acb added support for i420 and iyuv
alex
parents: 4316
diff changeset
423 if((format == IMGFMT_YV12) || (format == IMGFMT_I420) || (format == IMGFMT_IYUV))
8a6f0b482acb added support for i420 and iyuv
alex
parents: 4316
diff changeset
424 yuv2rgb_init( ( depth == 24 ) ? bpp : depth,mode );
1758
c0aba1ddd7be fix vo_window again
pontscho
parents: 1752
diff changeset
425
c0aba1ddd7be fix vo_window again
pontscho
parents: 1752
diff changeset
426 #ifdef HAVE_NEW_GUI
c0aba1ddd7be fix vo_window again
pontscho
parents: 1752
diff changeset
427 if ( vo_window == None )
c0aba1ddd7be fix vo_window again
pontscho
parents: 1752
diff changeset
428 #endif
1852
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1758
diff changeset
429 {
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1758
diff changeset
430 XSelectInput( mDisplay,mywindow,StructureNotifyMask | KeyPressMask );
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1758
diff changeset
431 }
4316
9f8a618e87c3 fix screen saver bug under gui
pontscho
parents: 4036
diff changeset
432 saver_off(mDisplay);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
433 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
434 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
435
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
436 static const vo_info_t* get_info( void )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
437 { return &vo_info; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
438
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
439 static void Display_Image( XImage *myximage,uint8_t *ImageData )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
440 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
441 #ifdef DISP
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
442 // myximage->width is the stride and not the width if the sw scaler is used
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
443 int dstW= (swsContext) ? swsContext->dstW : myximage->width;
3003
16a593a1e6ed changed SH_MEM to HAVE_SHM according to configure
alex
parents: 2969
diff changeset
444 #ifdef HAVE_SHM
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
445 if ( Shmem_Flag )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
446 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
447 XShmPutImage( mDisplay,mywindow,mygc,myximage,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
448 0,0,
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
449 ( vo_dwidth - dstW ) / 2,( vo_dheight - myximage->height ) / 2,
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
450 dstW,myximage->height,True );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
451 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
452 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
453 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
454 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
455 XPutImage( mDisplay,mywindow,mygc,myximage,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
456 0,0,
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
457 ( vo_dwidth - dstW ) / 2,( vo_dheight - myximage->height ) / 2,
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
458 dstW,myximage->height );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
459 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
460 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
461 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
462
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1137
diff changeset
463 static void draw_osd(void)
1647
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
464 { vo_draw_text(image_width,image_height,draw_alpha_fnc); }
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1137
diff changeset
465
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
466 static void flip_page( void ){
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
467 Display_Image( myximage,ImageData );
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1137
diff changeset
468 XSync(mDisplay, False);
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
469 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
470
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
471 static uint32_t draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
472 {
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
473 if(swsContext){
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
474 uint8_t *dst[3];
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
475 int dstStride[3];
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
476 int newW= vo_dwidth&(~1); // the swscaler should be able to handle odd sizes but something else doesnt seem to like it
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
477 int newH= vo_dheight&(~1);
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
478
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
479 if(sws_flags==0) newW&= (~31); // not needed but, if the user wants the FAST_BILINEAR SCALER, then its needed
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
480
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
481 if(swsContext->dstW!=newW || image_height!=newH)
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
482 {
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
483 SwsContext *oldContext= swsContext;
4340
8a6f0b482acb added support for i420 and iyuv
alex
parents: 4316
diff changeset
484
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
485 swsContext= getSwsContextFromCmdLine(oldContext->srcW, oldContext->srcH, oldContext->srcFormat,
4541
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
486 newW, newH, out_format);
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
487 if(swsContext)
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
488 {
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
489 image_width= (newW+7)&(~7);
4541
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
490 image_height= newH;
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
491
4541
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
492 freeMyXImage();
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
493 getMyXImage();
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
494 freeSwsContext(oldContext);
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
495 }
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
496 else
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
497 {
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
498 swsContext= oldContext;
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
499 }
4420
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
500 }
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
501 dstStride[0]=image_width*((bpp+7)/8);
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
502 dstStride[1]=
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
503 dstStride[2]=(image_width*((bpp+7)/8)+1)>>1;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
504 dst[0]=ImageData;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
505 dst[1]=
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
506 dst[2]=NULL;
a7bac05524a1 real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents: 4382
diff changeset
507
4554
16fdb694cf13 swScale internally uses yuv2rgb now if possible
michael
parents: 4541
diff changeset
508 swsContext->swScale(swsContext,src,stride,y,h,dst, dstStride);
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
509 } else {
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
510 uint8_t *dst=ImageData + ( image_width * y + x ) * ( bpp/8 );
4541
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
511 if(image_format==IMGFMT_YV12)
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
512 yuv2rgb( dst,src[0],src[1],src[2],w,h,image_width*( bpp/8 ),stride[0],stride[1] );
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
513 else /* I420 & IYUV */
fc978c8eff3b checking output of getSwsContext*()
michael
parents: 4512
diff changeset
514 yuv2rgb( dst,src[0],src[2],src[1],w,h,image_width*( bpp/8 ),stride[0],stride[1] );
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
515 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
516 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
517 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
518
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
519 static uint32_t draw_frame( uint8_t *src[] ){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
520 int sbpp=( ( image_format&0xFF )+7 )/8;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
521 int dbpp=( bpp+7 )/8;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
522 char *d=ImageData;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
523 char *s=src[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
524 //printf( "sbpp=%d dbpp=%d depth=%d bpp=%d\n",sbpp,dbpp,depth,bpp );
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
525
4512
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
526 if(swsContext)
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
527 {
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
528 int stride[3]= {0,0,0};
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
529 if (swsContext->srcFormat==IMGFMT_YUY2) stride[0]=swsContext->srcW*2;
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
530 else if(swsContext->srcFormat==IMGFMT_BGR15) stride[0]=swsContext->srcW*2;
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
531 else if(swsContext->srcFormat==IMGFMT_BGR16) stride[0]=swsContext->srcW*2;
4512
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
532 else if(swsContext->srcFormat==IMGFMT_BGR24) stride[0]=swsContext->srcW*3;
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
533 else if(swsContext->srcFormat==IMGFMT_BGR32) stride[0]=swsContext->srcW*4;
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
534
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
535 return draw_slice(src, stride, swsContext->srcW, swsContext->srcH, 0, 0);
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
536 }
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
537
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
538 if( Flip_Flag ){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
539 // flipped BGR
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
540 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
541 //printf( "Rendering flipped BGR frame bpp=%d src=%d dst=%d\n",bpp,sbpp,dbpp );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
542 s+=sbpp*image_width*image_height;
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
543 for( i=0;i<image_height;i++ ) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
544 s-=sbpp*image_width;
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
545 if( sbpp==dbpp ) {
2556
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2519
diff changeset
546 if( depth==16 && image_format==( IMGFMT_BGR|15 ) )
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2519
diff changeset
547 rgb15to16(s,d,2*image_width );
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2519
diff changeset
548 else
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
549 memcpy( d,s,sbpp*image_width );
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
550 } else {
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
551 // sbpp!=dbpp
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
552 char *s2=s;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
553 char *d2=d;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
554 char *e=s2+sbpp*image_width;
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
555 while( s2<e ) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
556 d2[0]=s2[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
557 d2[1]=s2[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
558 d2[2]=s2[2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
559 s2+=sbpp;d2+=dbpp;
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
560 }
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
561 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
562 d+=dbpp*image_width;
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
563 }
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
564 } else {
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
565 if( sbpp==dbpp ) {
2556
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2519
diff changeset
566 if( depth==16 && image_format==( IMGFMT_BGR|15 ) )
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2519
diff changeset
567 rgb15to16( s,d,2*image_width*image_height );
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2519
diff changeset
568 else
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
569 memcpy( d,s,sbpp*image_width*image_height );
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
570 } else {
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
571 // sbpp!=dbpp
4036
76ea6f97ebb7 added rgb24to32 instead of c converter
alex
parents: 4017
diff changeset
572 #if 0
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
573 char *e=s+sbpp*image_width*image_height;
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
574 //printf( "libvo: using C 24->32bpp conversion\n" );
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
575 while( s<e ){
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
576 d[0]=s[0];
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
577 d[1]=s[1];
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
578 d[2]=s[2];
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
579 s+=sbpp;d+=dbpp;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
580 }
4036
76ea6f97ebb7 added rgb24to32 instead of c converter
alex
parents: 4017
diff changeset
581 #else
76ea6f97ebb7 added rgb24to32 instead of c converter
alex
parents: 4017
diff changeset
582 rgb24to32(s, d, sbpp*image_width*image_height);
76ea6f97ebb7 added rgb24to32 instead of c converter
alex
parents: 4017
diff changeset
583 #endif
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
584 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
585 }
775
1cc160d46319 flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents: 767
diff changeset
586 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
587 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
588
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
589 static uint32_t query_format( uint32_t format )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
590 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
591 if( !vo_init() ) return 0; // Can't open X11
325
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
592
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
593 if( ( format&IMGFMT_BGR_MASK )==IMGFMT_BGR ){
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
594 int bpp=format&0xFF;
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
595 if( bpp==vo_depthonscreen ) return 1;
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
596 if( bpp==15 && vo_depthonscreen==16) return 1; // built-in conversion
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
597 if( bpp==24 && vo_depthonscreen==32) return 1; // built-in conversion
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
598 }
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
599
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
600 switch( format )
324
720c640332c8 Szebb es jobb screensaver-kikapcsolo resz
laaz
parents: 322
diff changeset
601 {
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
602 case IMGFMT_BGR15:
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
603 case IMGFMT_BGR16:
4512
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
604 case IMGFMT_BGR24:
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
605 case IMGFMT_BGR32:
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
606 case IMGFMT_YUY2:
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
607 if(softzoom) return 1;
f52e38e03bb7 YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents: 4443
diff changeset
608 else return 0;
4340
8a6f0b482acb added support for i420 and iyuv
alex
parents: 4316
diff changeset
609 case IMGFMT_I420:
8a6f0b482acb added support for i420 and iyuv
alex
parents: 4316
diff changeset
610 case IMGFMT_IYUV:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
611 case IMGFMT_YV12: return 1;
324
720c640332c8 Szebb es jobb screensaver-kikapcsolo resz
laaz
parents: 322
diff changeset
612 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
613 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
614 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
615
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
616
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
617 static void
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
618 uninit(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
619 {
4443
cf62fa252821 removed obsoleted Terminate_Display_Process, using freeMyXImage and vo_x11_uninit at exit
alex
parents: 4433
diff changeset
620 freeMyXImage();
4316
9f8a618e87c3 fix screen saver bug under gui
pontscho
parents: 4036
diff changeset
621 saver_on(mDisplay); // screen saver back on
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
622
206
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
623 #ifdef HAVE_XF86VM
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
624 vo_vm_close(mDisplay);
206
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
625 #endif
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
626
4443
cf62fa252821 removed obsoleted Terminate_Display_Process, using freeMyXImage and vo_x11_uninit at exit
alex
parents: 4433
diff changeset
627 vo_x11_uninit(mDisplay, mywindow);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
628 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
629
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
630 static uint32_t preinit(const char *arg)
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
631 {
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
632 return 0;
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
633 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
634
4596
c35d7ce151b3 10000hl to Holm... control MUST BE static...
arpi
parents: 4592
diff changeset
635 static uint32_t control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
636 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4554
diff changeset
637 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4554
diff changeset
638 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4554
diff changeset
639 return query_format(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4554
diff changeset
640 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4554
diff changeset
641 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
642 }