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