Mercurial > mplayer.hg
annotate libvo/vo_xmga.c @ 9660:c2d23e02522b
improvements to detc filter:
-> use of 8x8 blocks rather than 16x16 to better localize the search
for interlacing. this helps detect interlacing in very small
motions, e.g. mouths in anime.
-> removed some redundant conditions in the logic
-> looser condition for detecting lacing and more forgiving of slight
mismatches between fields from the two telecine frames to make up
for quantization noise in low quality encodes.
this code is still mostly experimental but probably better than the
old version, so maybe it should be backported to 0.90...?
author | rfelker |
---|---|
date | Sun, 23 Mar 2003 03:36:24 +0000 |
parents | edfe34c5405d |
children | 07870312c054 |
rev | line source |
---|---|
100 | 1 |
2 //#define SHOW_TIME | |
1 | 3 |
4 /* | |
7680 | 5 * vo_xmga.c |
1 | 6 * |
7 * Copyright (C) Zoltan Ponekker - Jan 2001 | |
8 * | |
9 */ | |
10 | |
11 #include <stdio.h> | |
12 #include <stdlib.h> | |
13 #include <string.h> | |
14 | |
15 #include "config.h" | |
6296 | 16 |
1 | 17 #include "video_out.h" |
18 #include "video_out_internal.h" | |
19 | |
20 | |
21 #include <sys/ioctl.h> | |
22 #include <unistd.h> | |
23 #include <fcntl.h> | |
24 #include <sys/mman.h> | |
25 | |
26 #include "drivers/mga_vid.h" | |
27 | |
28 #include <X11/Xlib.h> | |
29 #include <X11/Xutil.h> | |
30 #include <errno.h> | |
31 | |
4017 | 32 #ifdef HAVE_XINERAMA |
33 #include <X11/extensions/Xinerama.h> | |
34 #endif | |
35 | |
31 | 36 #include "x11_common.h" |
616 | 37 #include "sub.h" |
2057 | 38 #include "aspect.h" |
31 | 39 |
182 | 40 #ifdef SHOW_TIME |
9380 | 41 #include "../osdep/timer.h" |
100 | 42 static unsigned int timer=0; |
43 static unsigned int timerd=0; | |
44 #endif | |
45 | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
46 #ifdef HAVE_NEW_GUI |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
47 #include "../Gui/interface.h" |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
48 #endif |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
49 |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8017
diff
changeset
|
50 static vo_info_t info = |
1 | 51 { |
7680 | 52 "Matrox G200/G4x0/G550 overlay in X11 window (using /dev/mga_vid)", |
1 | 53 "xmga", |
54 "Zoltan Ponekker <pontscho@makacs.poliod.hu>", | |
55 "" | |
56 }; | |
57 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8017
diff
changeset
|
58 LIBVO_EXTERN( xmga ) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8017
diff
changeset
|
59 |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8017
diff
changeset
|
60 |
1 | 61 static XGCValues wGCV; |
62 | |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
7124
diff
changeset
|
63 static uint32_t mDepth; |
1 | 64 static XWindowAttributes attribs; |
65 static uint32_t fgColor; | |
66 | |
67 static uint32_t mvHeight; | |
68 static uint32_t mvWidth; | |
69 | |
70 static Window mRoot; | |
71 | |
72 static XSetWindowAttributes xWAttribs; | |
73 | |
6311
da2dda48b7ec
add mute support ( step 1 ) and fixed panscan bugs (1000l for me)
pontscho
parents:
6307
diff
changeset
|
74 static int inited=0; |
da2dda48b7ec
add mute support ( step 1 ) and fixed panscan bugs (1000l for me)
pontscho
parents:
6307
diff
changeset
|
75 |
4981 | 76 #define VO_XMGA |
1 | 77 #include "mga_common.c" |
4981 | 78 #undef VO_XMGA |
1 | 79 |
80 static void mDrawColorKey( void ) | |
81 { | |
4795 | 82 XSetBackground( mDisplay,vo_gc,0 ); |
83 XClearWindow( mDisplay,vo_window ); | |
84 XSetForeground( mDisplay,vo_gc,fgColor ); | |
4981 | 85 XFillRectangle( mDisplay,vo_window,vo_gc,drwX,drwY,drwWidth,(vo_fs?drwHeight - 1:drwHeight) ); |
1 | 86 XFlush( mDisplay ); |
87 } | |
88 | |
31 | 89 static void check_events(void) |
1 | 90 { |
4303 | 91 int e=vo_x11_check_events(mDisplay); |
92 if ( !(e&VO_EVENT_RESIZE) && !(e&VO_EVENT_EXPOSE) ) return; | |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6311
diff
changeset
|
93 set_window(); |
6043 | 94 mDrawColorKey(); |
6296 | 95 if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) ) mp_msg(MSGT_VO,MSGL_WARN,"Error in mga_vid_config ioctl (wrong mga_vid.o version?)" ); |
1 | 96 } |
97 | |
31 | 98 static void flip_page(void){ |
182 | 99 #ifdef SHOW_TIME |
100 | 100 unsigned int t; |
101 t=GetTimer(); | |
6296 | 102 mp_msg(MSGT_VO,MSGL_STATUS," [timer: %08X diff: %6d dd: %6d ] \n",t,t-timer,(t-timer)-timerd); |
100 | 103 timerd=t-timer; |
104 timer=t; | |
182 | 105 #endif |
100 | 106 |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1210
diff
changeset
|
107 vo_mga_flip_page(); |
31 | 108 } |
1 | 109 |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6953
diff
changeset
|
110 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) |
1 | 111 { |
112 char * mTitle=(title == NULL) ? "XMGA render" : title; | |
113 XVisualInfo vinfo; | |
114 unsigned long xswamask; | |
115 | |
7679 | 116 if(mga_init(width,height,format)) return -1; // ioctl errors? |
1 | 117 |
2249
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2057
diff
changeset
|
118 aspect_save_orig(width,height); |
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2057
diff
changeset
|
119 aspect_save_prescale(d_width,d_height); |
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2057
diff
changeset
|
120 aspect_save_screenres(vo_screenwidth,vo_screenheight); |
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2057
diff
changeset
|
121 |
1 | 122 mvWidth=width; mvHeight=height; |
123 | |
6307 | 124 vo_panscan_x=vo_panscan_y=vo_panscan_amount=0; |
125 | |
7679 | 126 vo_dx=( vo_screenwidth - d_width ) / 2; |
127 vo_dy=( vo_screenheight - d_height ) / 2; | |
4981 | 128 vo_dwidth=d_width; vo_dheight=d_height; |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
129 vo_mouse_autohide=1; |
1 | 130 |
131 switch ( vo_depthonscreen ) | |
132 { | |
133 case 32: | |
134 case 24: fgColor=0x00ff00ffL; break; | |
135 case 16: fgColor=0xf81fL; break; | |
136 case 15: fgColor=0x7c1fL; break; | |
6296 | 137 default: mp_msg(MSGT_VO,MSGL_ERR,"Sorry, this (%d) color depth not supported.\n",vo_depthonscreen ); return -1; |
1 | 138 } |
139 | |
5158 | 140 inited=1; |
141 | |
6016 | 142 aspect(&vo_dwidth,&vo_dheight,A_NOZOOM); |
5985 | 143 |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1637
diff
changeset
|
144 #ifdef HAVE_NEW_GUI |
5985 | 145 if(use_gui) |
146 guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window | |
147 else | |
148 #endif | |
723 | 149 { |
6043 | 150 if ( flags&1 ) aspect(&dwidth,&dheight,A_ZOOM); |
723 | 151 |
6043 | 152 XGetWindowAttributes( mDisplay,mRootWin,&attribs ); |
723 | 153 mDepth=attribs.depth; |
154 if ( mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32 ) mDepth=24; | |
155 XMatchVisualInfo( mDisplay,mScreen,mDepth,TrueColor,&vinfo ); | |
6043 | 156 xWAttribs.colormap=XCreateColormap( mDisplay,mRootWin,vinfo.visual,AllocNone ); |
723 | 157 xWAttribs.background_pixel=0; |
158 xWAttribs.border_pixel=0; | |
6043 | 159 xWAttribs.event_mask=StructureNotifyMask | ExposureMask | KeyPressMask | |
160 ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask | PropertyChangeMask)); | |
723 | 161 xswamask=CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; |
1 | 162 |
3847 | 163 if ( WinID>=0 ){ |
6043 | 164 |
165 vo_window = WinID ? ((Window)WinID) : mRootWin; | |
166 if ( WinID ) | |
167 { | |
168 XUnmapWindow( mDisplay,vo_window ); | |
169 XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xWAttribs); | |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6755
diff
changeset
|
170 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); |
6043 | 171 } else XSelectInput( mDisplay,vo_window,ExposureMask ); |
172 | |
7679 | 173 } else { |
174 | |
7777 | 175 if ( vo_window == None ) |
176 { | |
177 vo_window=XCreateWindow( mDisplay,mRootWin, | |
6043 | 178 vo_dx,vo_dy, |
179 vo_dwidth,vo_dheight, | |
180 xWAttribs.border_pixel, | |
181 mDepth, | |
182 InputOutput, | |
183 vinfo.visual,xswamask,&xWAttribs ); | |
184 | |
7777 | 185 vo_x11_classhint( mDisplay,vo_window,"xmga" ); |
186 vo_hidecursor(mDisplay,vo_window); | |
187 vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 ); | |
723 | 188 |
7777 | 189 XStoreName( mDisplay,vo_window,mTitle ); |
190 XMapWindow( mDisplay,vo_window ); | |
6043 | 191 |
7777 | 192 if ( flags&1 ) vo_x11_fullscreen(); |
5999 | 193 |
3990 | 194 #ifdef HAVE_XINERAMA |
7777 | 195 vo_x11_xinerama_move(mDisplay,vo_window); |
3990 | 196 #endif |
7777 | 197 } else if ( !(flags&1) ) XMoveResizeWindow( mDisplay,vo_window,vo_dx,vo_dy,vo_dwidth,vo_dheight ); |
6043 | 198 } |
7679 | 199 |
7777 | 200 if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc ); |
6043 | 201 vo_gc=XCreateGC( mDisplay,vo_window,GCForeground,&wGCV ); |
7679 | 202 |
203 } // !GUI | |
1 | 204 |
6043 | 205 if ( ( flags&1 )&&( !WinID ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; } |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6311
diff
changeset
|
206 |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6311
diff
changeset
|
207 panscan_calc(); |
7679 | 208 |
209 mga_vid_config.colkey_on=1; | |
210 mga_vid_config.colkey_red=255; | |
211 mga_vid_config.colkey_green=0; | |
212 mga_vid_config.colkey_blue=255; | |
213 | |
214 set_window(); // set up mga_vid_config.dest_width etc | |
1 | 215 |
6755 | 216 saver_off(mDisplay); |
217 | |
218 XFlush( mDisplay ); | |
219 XSync( mDisplay,False ); | |
7777 | 220 |
221 ioctl(f,MGA_VID_ON,0); | |
6755 | 222 |
7679 | 223 return 0; |
1 | 224 } |
225 | |
7679 | 226 static void uninit(void){ |
227 mp_msg(MSGT_VO,MSGL_V,"vo: uninit!\n"); | |
228 mga_uninit(); | |
229 if(!inited) return; // no window? | |
5158 | 230 inited=0; |
4316 | 231 saver_on(mDisplay); |
7679 | 232 vo_x11_uninit(); // destroy the window |
1 | 233 } |
4352 | 234 |