Mercurial > mplayer.hg
annotate libvo/mga_common.c @ 28063:a318969a4f45
Set the base size window manager hint, otherwise some subtract the minimum
size of 4x4 from the numbers displayed to the user which might be confusing.
Based on patch by Bert Wesarg [bert wesarg googlemail com].
author | reimar |
---|---|
date | Fri, 05 Dec 2008 19:01:49 +0000 |
parents | d58d06eafe83 |
children | 5e0b35277554 |
rev | line source |
---|---|
413 | 1 |
566 | 2 #include "fastmemcpy.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11865
diff
changeset
|
3 #include "cpudetect.h" |
18861 | 4 #include "libswscale/swscale.h" |
22142
84f95595f31f
Fix a few gcc warnings, approved by Diego and Reimar.
rathann
parents:
18861
diff
changeset
|
5 #include "libswscale/rgb2rgb.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11865
diff
changeset
|
6 #include "libmpcodecs/vf_scale.h" |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
7 #include "mp_msg.h" |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
8 #include "help_mp.h" |
1 | 9 |
10 // mga_vid drawing functions | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
11 static void set_window( void ); /* forward declaration to kill warnings */ |
6335
e9bd97d5c5cc
warning & newline fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
6311
diff
changeset
|
12 #ifdef VO_XMGA |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
13 static void mDrawColorKey( void ); /* forward declaration to kill warnings */ |
6335
e9bd97d5c5cc
warning & newline fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
6311
diff
changeset
|
14 #endif |
1 | 15 |
56 | 16 static int mga_next_frame=0; |
17 | |
18 static mga_vid_config_t mga_vid_config; | |
19 static uint8_t *vid_data, *frames[4]; | |
5389
7296c4262457
quick hack to make vo_mga accept multiple calls to config
rfelker
parents:
5335
diff
changeset
|
20 static int f = -1; |
56 | 21 |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
22 static uint32_t drwX,drwY,drwWidth,drwHeight; |
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
23 #ifdef VO_XMGA |
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
24 static uint32_t drwBorderWidth,drwDepth; |
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
25 #endif |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
26 static uint32_t drwcX,drwcY,dwidth,dheight; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
27 |
202 | 28 static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
29 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31; | |
9994 | 30 x0+=mga_vid_config.src_width*(vo_panscan_x>>1)/(vo_dwidth+vo_panscan_x); |
466 | 31 switch(mga_vid_config.format){ |
32 case MGA_VID_FORMAT_YV12: | |
470 | 33 case MGA_VID_FORMAT_IYUV: |
34 case MGA_VID_FORMAT_I420: | |
326 | 35 vo_draw_alpha_yv12(w,h,src,srca,stride,vid_data+bespitch*y0+x0,bespitch); |
466 | 36 break; |
37 case MGA_VID_FORMAT_YUY2: | |
326 | 38 vo_draw_alpha_yuy2(w,h,src,srca,stride,vid_data+2*(bespitch*y0+x0),2*bespitch); |
466 | 39 break; |
40 case MGA_VID_FORMAT_UYVY: | |
41 vo_draw_alpha_yuy2(w,h,src,srca,stride,vid_data+2*(bespitch*y0+x0)+1,2*bespitch); | |
42 break; | |
43 } | |
1 | 44 } |
45 | |
7680 | 46 static void draw_osd(void) |
47 { | |
9994 | 48 // vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha); |
49 vo_draw_text(mga_vid_config.src_width-mga_vid_config.src_width*vo_panscan_x/(vo_dwidth+vo_panscan_x),mga_vid_config.src_height,draw_alpha); | |
7680 | 50 } |
51 | |
52 | |
1 | 53 //static void |
54 //write_slice_g200(uint8_t *y,uint8_t *cr, uint8_t *cb,uint32_t slice_num) | |
55 | |
56 static void | |
57 draw_slice_g200(uint8_t *image[], int stride[], int width,int height,int x,int y) | |
58 { | |
59 uint8_t *dest; | |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
6799
diff
changeset
|
60 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31; |
1 | 61 |
284 | 62 dest = vid_data + bespitch*y + x; |
4949 | 63 mem2agpcpy_pic(dest, image[0], width, height, bespitch, stride[0]); |
1 | 64 |
65 width/=2;height/=2;x/=2;y/=2; | |
66 | |
284 | 67 dest = vid_data + bespitch*mga_vid_config.src_height + bespitch*y + 2*x; |
5405 | 68 |
69 interleaveBytes(image[1],image[2],dest, | |
5406 | 70 width, height, |
5405 | 71 stride[1], stride[2], bespitch); |
1 | 72 } |
73 | |
74 static void | |
75 draw_slice_g400(uint8_t *image[], int stride[], int w,int h,int x,int y) | |
76 { | |
77 uint8_t *dest; | |
5317 | 78 uint8_t *dest2; |
1 | 79 uint32_t bespitch,bespitch2; |
80 | |
81 bespitch = (mga_vid_config.src_width + 31) & ~31; | |
82 bespitch2 = bespitch/2; | |
83 | |
84 dest = vid_data + bespitch * y + x; | |
4949 | 85 mem2agpcpy_pic(dest, image[0], w, h, bespitch, stride[0]); |
1 | 86 |
87 w/=2;h/=2;x/=2;y/=2; | |
5317 | 88 |
1 | 89 dest = vid_data + bespitch*mga_vid_config.src_height + bespitch2 * y + x; |
5317 | 90 dest2= dest + bespitch2*mga_vid_config.src_height / 2; |
1 | 91 |
5317 | 92 if(mga_vid_config.format==MGA_VID_FORMAT_YV12){ |
93 // mga_vid's YV12 assumes Y,U,V order (insteda of Y,V,U) :( | |
94 mem2agpcpy_pic(dest, image[1], w, h, bespitch2, stride[1]); | |
95 mem2agpcpy_pic(dest2,image[2], w, h, bespitch2, stride[2]); | |
96 } else { | |
4949 | 97 mem2agpcpy_pic(dest, image[2], w, h, bespitch2, stride[2]); |
5317 | 98 mem2agpcpy_pic(dest2,image[1], w, h, bespitch2, stride[1]); |
99 } | |
1 | 100 |
101 } | |
102 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
103 static int |
1 | 104 draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) |
105 { | |
4949 | 106 |
107 #if 0 | |
108 printf("vo: %p/%d %p/%d %p/%d %dx%d/%d;%d \n", | |
109 src[0],stride[0], | |
110 src[1],stride[1], | |
111 src[2],stride[2], | |
112 w,h,x,y); | |
113 #endif | |
114 | |
1 | 115 if (mga_vid_config.card_type == MGA_G200) |
116 draw_slice_g200(src,stride,w,h,x,y); | |
117 else | |
118 draw_slice_g400(src,stride,w,h,x,y); | |
119 return 0; | |
120 } | |
121 | |
122 static void | |
31 | 123 vo_mga_flip_page(void) |
1 | 124 { |
47 | 125 |
126 // printf("-- flip to %d --\n",mga_next_frame); | |
1 | 127 |
47 | 128 #if 1 |
129 ioctl(f,MGA_VID_FSEL,&mga_next_frame); | |
56 | 130 mga_next_frame=(mga_next_frame+1)%mga_vid_config.num_frames; |
47 | 131 vid_data=frames[mga_next_frame]; |
132 #endif | |
1 | 133 |
134 } | |
135 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
136 static int |
1 | 137 draw_frame(uint8_t *src[]) |
138 { | |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
139 mp_msg(MSGT_VO,MSGL_WARN,"!!! mga::draw_frame() called !!!\n"); |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
413
diff
changeset
|
140 return 0; |
1 | 141 } |
142 | |
7681 | 143 static uint32_t get_image(mp_image_t *mpi){ |
4971 | 144 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31; |
145 uint32_t bespitch2 = bespitch/2; | |
146 // printf("mga: get_image() called\n"); | |
4975 | 147 if(mpi->type==MP_IMGTYPE_STATIC && mga_vid_config.num_frames>1) return VO_FALSE; // it is not static |
4971 | 148 if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram |
5335 | 149 if(mga_vid_config.card_type == MGA_G200 && mpi->flags&MP_IMGFLAG_PLANAR) return VO_FALSE; |
4971 | 150 // printf("width=%d vs. bespitch=%d, flags=0x%X \n",mpi->width,bespitch,mpi->flags); |
151 if((mpi->width==bespitch) || | |
152 (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH))){ | |
153 // we're lucky or codec accepts stride => ok, let's go! | |
154 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
155 mpi->planes[0]=vid_data; | |
5317 | 156 if(mpi->flags&MP_IMGFLAG_SWAPPED){ |
157 mpi->planes[1]=vid_data + bespitch*mga_vid_config.src_height; | |
158 mpi->planes[2]=mpi->planes[1] + bespitch2*mga_vid_config.src_height/2; | |
159 } else { | |
160 mpi->planes[2]=vid_data + bespitch*mga_vid_config.src_height; | |
161 mpi->planes[1]=mpi->planes[2] + bespitch2*mga_vid_config.src_height/2; | |
162 } | |
4971 | 163 mpi->width=mpi->stride[0]=bespitch; |
164 mpi->stride[1]=mpi->stride[2]=bespitch2; | |
165 } else { | |
166 mpi->planes[0]=vid_data; | |
167 mpi->width=bespitch; | |
168 mpi->stride[0]=mpi->width*(mpi->bpp/8); | |
169 } | |
170 mpi->flags|=MP_IMGFLAG_DIRECT; | |
171 // printf("mga: get_image() SUCCESS -> Direct Rendering ENABLED\n"); | |
172 return VO_TRUE; | |
173 } | |
174 return VO_FALSE; | |
175 } | |
176 | |
177 static uint32_t | |
7681 | 178 draw_image(mp_image_t *mpi){ |
179 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31; | |
180 | |
181 // if -dr or -slices then do nothing: | |
182 if(mpi->flags&(MP_IMGFLAG_DIRECT|MP_IMGFLAG_DRAW_CALLBACK)) return VO_TRUE; | |
183 | |
184 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
185 // copy planar: | |
186 draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,mpi->x,mpi->y); | |
187 } else { | |
188 // copy packed: | |
189 mem2agpcpy_pic(vid_data, mpi->planes[0], // dst,src | |
190 mpi->w*(mpi->bpp/8), mpi->h, // w,h | |
191 bespitch*2, mpi->stride[0]); // dstride,sstride | |
192 } | |
193 return VO_TRUE; | |
194 } | |
195 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
196 static int |
1 | 197 query_format(uint32_t format) |
198 { | |
199 switch(format){ | |
200 case IMGFMT_YV12: | |
470 | 201 case IMGFMT_I420: |
202 case IMGFMT_IYUV: | |
1 | 203 case IMGFMT_YUY2: |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
413
diff
changeset
|
204 case IMGFMT_UYVY: |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13787
diff
changeset
|
205 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD|VFCAP_HWSCALE_UP|VFCAP_HWSCALE_DOWN|VFCAP_ACCEPT_STRIDE; |
1 | 206 } |
207 return 0; | |
208 } | |
209 | |
24241 | 210 #ifndef VO_XMGA |
5987 | 211 static void mga_fullscreen() |
212 { | |
213 uint32_t w,h; | |
214 if ( !vo_fs ) { | |
215 vo_fs=VO_TRUE; | |
216 w=vo_screenwidth; h=vo_screenheight; | |
217 aspect(&w,&h,A_ZOOM); | |
218 } else { | |
219 vo_fs=VO_FALSE; | |
220 w=vo_dwidth; h=vo_dheight; | |
221 aspect(&w,&h,A_NOZOOM); | |
222 } | |
223 mga_vid_config.dest_width = w; | |
224 mga_vid_config.dest_height= h; | |
7680 | 225 mga_vid_config.x_org=(vo_screenwidth-w)/2; |
226 mga_vid_config.y_org=(vo_screenheight-h)/2; | |
5987 | 227 if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) ) |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
228 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_ErrorInConfigIoctl ); |
5987 | 229 } |
24241 | 230 #endif |
5987 | 231 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
232 static int control(uint32_t request, void *data, ...) |
4970 | 233 { |
234 switch (request) { | |
235 case VOCTRL_QUERY_FORMAT: | |
236 return query_format(*((uint32_t*)data)); | |
4971 | 237 case VOCTRL_GET_IMAGE: |
238 return get_image(data); | |
7681 | 239 case VOCTRL_DRAW_IMAGE: |
240 return draw_image(data); | |
6799 | 241 case VOCTRL_SET_EQUALIZER: |
242 { | |
243 va_list ap; | |
244 short value; | |
245 uint32_t luma,prev; | |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
246 |
6799 | 247 if ( strcmp( data,"brightness" ) && strcmp( data,"contrast" ) ) return VO_FALSE; |
248 | |
249 if (ioctl(f,MGA_VID_GET_LUMA,&prev)) { | |
250 perror("Error in mga_vid_config ioctl()"); | |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
251 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotGetLumaValuesFromTheKernelModule); |
6799 | 252 return VO_FALSE; |
253 } | |
254 | |
255 // printf("GET: 0x%4X 0x%4X \n",(prev>>16),(prev&0xffff)); | |
256 | |
257 va_start(ap, data); | |
258 value = va_arg(ap, int); | |
259 va_end(ap); | |
260 | |
261 // printf("value: %d -> ",value); | |
262 value=((value+100)*255)/200-128; // maps -100=>-128 and +100=>127 | |
263 // printf("%d \n",value); | |
264 | |
265 if(!strcmp(data,"contrast")) | |
266 luma = (prev&0xFFFF0000)|(value&0xFFFF); | |
267 else | |
268 luma = (prev&0xFFFF)|(value<<16); | |
269 | |
270 if (ioctl(f,MGA_VID_SET_LUMA,luma)) { | |
271 perror("Error in mga_vid_config ioctl()"); | |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
272 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotSetLumaValuesFromTheKernelModule); |
6799 | 273 return VO_FALSE; |
274 } | |
275 | |
276 return VO_TRUE; | |
277 } | |
278 | |
279 case VOCTRL_GET_EQUALIZER: | |
280 { | |
281 va_list ap; | |
282 int * value; | |
283 short val; | |
284 uint32_t luma; | |
285 | |
286 if ( strcmp( data,"brightness" ) && strcmp( data,"contrast" ) ) return VO_FALSE; | |
287 | |
288 if (ioctl(f,MGA_VID_GET_LUMA,&luma)) { | |
289 perror("Error in mga_vid_config ioctl()"); | |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
290 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotGetLumaValuesFromTheKernelModule); |
6799 | 291 return VO_FALSE; |
292 } | |
293 | |
294 if ( !strcmp( data,"contrast" ) ) | |
295 val=(luma & 0xFFFF); | |
296 else | |
297 val=(luma >> 16); | |
298 | |
299 va_start(ap, data); | |
300 value = va_arg(ap, int*); | |
301 va_end(ap); | |
302 | |
303 *value = (val*200)/255; | |
304 | |
305 return VO_TRUE; | |
306 } | |
307 | |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
308 #ifndef VO_XMGA |
5987 | 309 case VOCTRL_FULLSCREEN: |
7680 | 310 if (vo_screenwidth && vo_screenheight) |
311 mga_fullscreen(); | |
312 else | |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
313 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_ScreenWidthHeightUnknown); |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
314 return VO_TRUE; |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
315 case VOCTRL_GET_PANSCAN: |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
316 if ( !vo_fs ) return VO_FALSE; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
317 return VO_TRUE; |
5987 | 318 #endif |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
319 |
27343 | 320 #if defined(VO_XMGA) && defined(CONFIG_GUI) |
6009 | 321 case VOCTRL_GUISUPPORT: |
322 return VO_TRUE; | |
323 #endif | |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
324 |
6307 | 325 #ifdef VO_XMGA |
11542 | 326 case VOCTRL_ONTOP: |
327 vo_x11_ontop(); | |
328 return VO_TRUE; | |
6307 | 329 case VOCTRL_GET_PANSCAN: |
25962 | 330 if ( !initialized || !vo_fs ) return VO_FALSE; |
6307 | 331 return VO_TRUE; |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
332 case VOCTRL_FULLSCREEN: |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
333 vo_x11_fullscreen(); |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
334 vo_panscan_amount=0; |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
335 /* indended, fallthrough to update panscan on fullscreen/windowed switch */ |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
336 #endif |
6307 | 337 case VOCTRL_SET_PANSCAN: |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
338 if ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) // || ( !vo_fs && vo_panscan_amount ) ) |
6307 | 339 { |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
340 // int old_y = vo_panscan_y; |
6307 | 341 panscan_calc(); |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
342 // if ( old_y != vo_panscan_y ) |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
343 set_window(); |
6307 | 344 } |
345 return VO_TRUE; | |
4970 | 346 } |
347 return VO_NOTIMPL; | |
348 } | |
349 | |
350 | |
7679 | 351 static int mga_init(int width,int height,unsigned int format){ |
352 | |
353 switch(format){ | |
354 case IMGFMT_YV12: | |
355 width+=width&1;height+=height&1; | |
356 mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2; | |
357 mga_vid_config.format=MGA_VID_FORMAT_I420; break; | |
358 case IMGFMT_I420: | |
359 case IMGFMT_IYUV: | |
360 width+=width&1;height+=height&1; | |
361 mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2; | |
362 mga_vid_config.format=MGA_VID_FORMAT_YV12; break; | |
363 case IMGFMT_YUY2: | |
364 mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2; | |
365 mga_vid_config.format=MGA_VID_FORMAT_YUY2; break; | |
366 case IMGFMT_UYVY: | |
367 mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2; | |
368 mga_vid_config.format=MGA_VID_FORMAT_UYVY; break; | |
369 default: | |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
370 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_InvalidOutputFormat,format); |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25962
diff
changeset
|
371 return -1; |
7679 | 372 } |
373 | |
374 mga_vid_config.src_width = width; | |
375 mga_vid_config.src_height= height; | |
7680 | 376 if(!mga_vid_config.dest_width) |
377 mga_vid_config.dest_width = width; | |
378 if(!mga_vid_config.dest_height) | |
379 mga_vid_config.dest_height= height; | |
56 | 380 |
7680 | 381 mga_vid_config.colkey_on=0; |
382 | |
5432 | 383 mga_vid_config.num_frames=(vo_directrendering && !vo_doublebuffering)?1:3; |
56 | 384 mga_vid_config.version=MGA_VID_VERSION; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
385 |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
386 if(width > 1024 && height > 1024) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
387 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
388 mp_msg(MSGT_VO,MSGL_ERR, MGSTR_LIBVO_MGA_ResolutionTooHigh); |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25962
diff
changeset
|
389 return -1; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
390 } else if(height <= 1024) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
391 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
392 // try whether we have a G550 |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
393 int ret; |
24424 | 394 if ((ret = ioctl(f,MGA_VID_CONFIG,&mga_vid_config))) |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
395 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
396 if(mga_vid_config.card_type != MGA_G550) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
397 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
398 // we don't have a G550, so our resolution is too high |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
399 mp_msg(MSGT_VO,MSGL_ERR, MGSTR_LIBVO_MGA_ResolutionTooHigh); |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25962
diff
changeset
|
400 return -1; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
401 } else { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
402 // there is a deeper problem |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
403 // we have a G550, but still couldn't configure mga_vid |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
404 perror("Error in mga_vid_config ioctl()"); |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
405 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_IncompatibleDriverVersion); |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
406 return -1; |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
407 } |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
408 // if we arrived here, then we could successfully configure mga_vid |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
409 // at this high resolution |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
410 } |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
411 } else { |
22694 | 412 // configure mga_vid in case resolution is < 1024x1024 too |
413 if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config)) | |
414 { | |
415 perror("Error in mga_vid_config ioctl()"); | |
416 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_IncompatibleDriverVersion); | |
417 return -1; | |
418 } | |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
419 } |
5432 | 420 |
24321 | 421 mp_msg(MSGT_VO,MSGL_V,"[MGA] Using %d buffers.\n",mga_vid_config.num_frames); |
56 | 422 |
423 frames[0] = (char*)mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0); | |
424 frames[1] = frames[0] + 1*mga_vid_config.frame_size; | |
425 frames[2] = frames[0] + 2*mga_vid_config.frame_size; | |
426 frames[3] = frames[0] + 3*mga_vid_config.frame_size; | |
427 mga_next_frame = 0; | |
428 vid_data = frames[mga_next_frame]; | |
429 | |
430 //clear the buffer | |
431 memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames); | |
432 | |
7777 | 433 #ifndef VO_XMGA |
7679 | 434 ioctl(f,MGA_VID_ON,0); |
7777 | 435 #endif |
7679 | 436 |
56 | 437 return 0; |
438 } | |
439 | |
1637 | 440 static int mga_uninit(){ |
7679 | 441 if(f>=0){ |
1637 | 442 ioctl( f,MGA_VID_OFF,0 ); |
443 munmap(frames[0],mga_vid_config.frame_size*mga_vid_config.num_frames); | |
444 close(f); | |
5389
7296c4262457
quick hack to make vo_mga accept multiple calls to config
rfelker
parents:
5335
diff
changeset
|
445 f = -1; |
7679 | 446 } |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
6799
diff
changeset
|
447 return 0; |
1637 | 448 } |
4970 | 449 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
450 static int preinit(const char *vo_subdevice) |
4970 | 451 { |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
452 uint32_t ver; |
7695 | 453 const char *devname=vo_subdevice?vo_subdevice:"/dev/mga_vid"; |
10005
be14ff86b4e5
ugly ugly fix for michael's 1000l changes in swscaler: mysterious segfault w/g200
rfelker
parents:
9994
diff
changeset
|
454 sws_rgb2rgb_init(get_sws_cpuflags()); |
5433 | 455 |
456 f = open(devname,O_RDWR); | |
457 if(f == -1) | |
458 { | |
459 perror("open"); | |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
16171
diff
changeset
|
460 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldntOpen,devname); |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25962
diff
changeset
|
461 return -1; |
5433 | 462 } |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
463 |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
464 // check whether the mga_vid driver has the same |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
465 // version as we expect |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
466 |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
467 ioctl(f,MGA_VID_GET_VERSION,&ver); |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
468 if(MGA_VID_VERSION != ver) |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
469 { |
26868 | 470 mp_msg(MSGT_VO, MSGL_ERR, MGSTR_LIBVO_MGA_mgavidVersionMismatch, ver, MGA_VID_VERSION); |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
471 return -1; |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
472 } |
7679 | 473 |
474 #ifdef VO_XMGA | |
8778
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
475 if (!vo_init()) { |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
476 close(f); |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
477 return -1; |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
478 } |
7679 | 479 #endif |
480 | |
4970 | 481 return 0; |
482 } | |
483 | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
484 static void set_window( void ){ |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
485 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
486 #ifdef VO_XMGA |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
487 if ( WinID ) |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
488 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
489 XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth ); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
490 mp_msg(MSGT_VO,MSGL_V,"[xmga] x: %d y: %d w: %d h: %d\n",drwX,drwY,drwWidth,drwHeight ); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
491 drwX=0; drwY=0; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
492 XTranslateCoordinates( mDisplay,vo_window,mRoot,0,0,&drwcX,&drwcY,&mRoot ); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
493 mp_msg(MSGT_VO,MSGL_V,"[xmga] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight ); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
494 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
495 } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
496 else |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
497 #endif |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
498 { drwX=drwcX=vo_dx; drwY=drwcY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
499 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
500 aspect(&dwidth,&dheight,A_NOZOOM); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
501 if ( vo_fs ) |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
502 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
503 aspect(&dwidth,&dheight,A_ZOOM); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
504 drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
505 drwcX+=drwX; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
506 drwY=( vo_screenheight - (dheight > vo_screenheight?vo_screenheight:dheight) ) / 2; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
507 drwcY+=drwY; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
508 drwWidth=(dwidth > vo_screenwidth?vo_screenwidth:dwidth); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
509 drwHeight=(dheight > vo_screenheight?vo_screenheight:dheight); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
510 mp_msg(MSGT_VO,MSGL_V,"[xmga-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight ); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
511 } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
512 vo_dwidth=drwWidth; vo_dheight=drwHeight; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
513 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
514 #ifdef VO_XMGA |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
515 #ifdef CONFIG_XINERAMA |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
516 if(XineramaIsActive(mDisplay)) |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
517 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
518 XineramaScreenInfo *screens; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
519 int num_screens; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
520 int i; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
521 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
522 screens = XineramaQueryScreens(mDisplay,&num_screens); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
523 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
524 /* find the screen we are on */ |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
525 i = 0; |
8988 | 526 while(i<num_screens && |
527 ((screens[i].x_org < drwcX) || | |
528 (screens[i].y_org < drwcY) || | |
529 (screens[i].x_org + screens[i].width >= drwcX) || | |
530 (screens[i].y_org + screens[i].height >= drwcY))) | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
531 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
532 i++; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
533 } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
534 |
8988 | 535 if(i<num_screens) |
536 { | |
537 /* save the screen we are on */ | |
538 xinerama_screen = i; | |
539 } else { | |
540 /* oops.. couldnt find the screen we are on | |
541 * because the upper left corner left the | |
542 * visual range. assume we are still on the | |
543 * same screen | |
544 */ | |
545 i = xinerama_screen; | |
546 } | |
547 | |
24233 | 548 if(xinerama_screen == -1) |
549 { | |
550 // The default value of the xinerama_screen is | |
551 // still there. Which means we could never | |
552 // figure out on which screen we are. | |
553 // Choose the first screen as default | |
554 xinerama_screen = i = 0; | |
555 } | |
556 | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
557 /* set drwcX and drwcY to the right values */ |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
558 drwcX = drwcX - screens[i].x_org; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
559 drwcY = drwcY - screens[i].y_org; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
560 XFree(screens); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
561 } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
562 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
563 #endif |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
564 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
565 mDrawColorKey(); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
566 #endif |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
567 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
568 mga_vid_config.x_org=drwcX; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
569 mga_vid_config.y_org=drwcY; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
570 mga_vid_config.dest_width=drwWidth; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
571 mga_vid_config.dest_height=drwHeight; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
572 if ( vo_panscan > 0.0f && vo_fs ) |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
573 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
574 drwX-=vo_panscan_x>>1; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
575 drwY-=vo_panscan_y>>1; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
576 drwWidth+=vo_panscan_x; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
577 drwHeight+=vo_panscan_y; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
578 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
579 mga_vid_config.x_org-=vo_panscan_x>>1; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
580 mga_vid_config.y_org-=vo_panscan_y>>1; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
581 mga_vid_config.dest_width=drwWidth; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
582 mga_vid_config.dest_height=drwHeight; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
583 #ifdef VO_XMGA |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
584 mDrawColorKey(); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
585 #endif |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
586 } |
9047 | 587 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?)" ); |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
588 } |