Mercurial > mplayer.hg
annotate libvo/mga_template.c @ 34234:4ec96d5d2e4c
build: drop releaseclean target
The target is supposed to remove files that are created during the XML build
process without removing the generated documentation. Unfortunately, it does
not work as expected and is not worth the extra complication.
author | diego |
---|---|
date | Mon, 07 Nov 2011 19:54:38 +0000 |
parents | 2d193c9affc7 |
children | 5d3f93051de9 |
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" |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
21 #include "libmpcodecs/vf.h" |
18861 | 22 #include "libswscale/swscale.h" |
32833
c4891d10ddbb
Adjust #include paths after the merge of libavcore into libavutil in FFmpeg.
diego
parents:
32375
diff
changeset
|
23 #include "libavutil/imgutils.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11865
diff
changeset
|
24 #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
|
25 #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
|
26 #include "help_mp.h" |
1 | 27 |
28 // mga_vid drawing functions | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
29 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
|
30 #ifdef VO_XMGA |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
31 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
|
32 #endif |
1 | 33 |
56 | 34 static int mga_next_frame=0; |
35 | |
36 static mga_vid_config_t mga_vid_config; | |
37 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
|
38 static int f = -1; |
56 | 39 |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
40 static uint32_t drwX,drwY,drwWidth,drwHeight; |
32367
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
41 static uint32_t drwcX,drwcY; |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
42 |
32196 | 43 static struct SwsContext *sws_ctx; |
44 | |
202 | 45 static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
32374 | 46 uint32_t bespitch = FFALIGN(mga_vid_config.src_width, 32); |
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 draw_slice_g200(uint8_t *image[], int stride[], int width,int height,int x,int y) | |
72 { | |
32374 | 73 uint32_t bespitch = FFALIGN(mga_vid_config.src_width, 32); |
32196 | 74 int dst_stride[4] = { bespitch, bespitch }; |
75 uint8_t *dst[4]; | |
1 | 76 |
32196 | 77 av_image_fill_pointers(dst, PIX_FMT_NV12, mga_vid_config.src_height, |
78 vid_data, dst_stride); | |
5405 | 79 |
32196 | 80 sws_scale(sws_ctx, image, stride, y, height, dst, dst_stride); |
1 | 81 } |
82 | |
83 static void | |
84 draw_slice_g400(uint8_t *image[], int stride[], int w,int h,int x,int y) | |
85 { | |
86 uint8_t *dest; | |
5317 | 87 uint8_t *dest2; |
1 | 88 uint32_t bespitch,bespitch2; |
89 | |
32374 | 90 bespitch = FFALIGN(mga_vid_config.src_width, 32); |
1 | 91 bespitch2 = bespitch/2; |
92 | |
93 dest = vid_data + bespitch * y + x; | |
4949 | 94 mem2agpcpy_pic(dest, image[0], w, h, bespitch, stride[0]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
95 |
1 | 96 w/=2;h/=2;x/=2;y/=2; |
5317 | 97 |
1 | 98 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
|
99 dest2= dest + bespitch2*mga_vid_config.src_height / 2; |
1 | 100 |
5317 | 101 if(mga_vid_config.format==MGA_VID_FORMAT_YV12){ |
32375 | 102 // mga_vid's YV12 assumes Y,U,V order (instead of Y,V,U) :( |
5317 | 103 mem2agpcpy_pic(dest, image[1], w, h, bespitch2, stride[1]); |
104 mem2agpcpy_pic(dest2,image[2], w, h, bespitch2, stride[2]); | |
105 } else { | |
4949 | 106 mem2agpcpy_pic(dest, image[2], w, h, bespitch2, stride[2]); |
5317 | 107 mem2agpcpy_pic(dest2,image[1], w, h, bespitch2, stride[1]); |
108 } | |
1 | 109 |
110 } | |
111 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
112 static int |
1 | 113 draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) |
114 { | |
4949 | 115 |
116 #if 0 | |
117 printf("vo: %p/%d %p/%d %p/%d %dx%d/%d;%d \n", | |
118 src[0],stride[0], | |
119 src[1],stride[1], | |
120 src[2],stride[2], | |
121 w,h,x,y); | |
122 #endif | |
123 | |
1 | 124 if (mga_vid_config.card_type == MGA_G200) |
125 draw_slice_g200(src,stride,w,h,x,y); | |
126 else | |
127 draw_slice_g400(src,stride,w,h,x,y); | |
128 return 0; | |
129 } | |
130 | |
131 static void | |
31 | 132 vo_mga_flip_page(void) |
1 | 133 { |
47 | 134 |
135 // printf("-- flip to %d --\n",mga_next_frame); | |
1 | 136 |
47 | 137 ioctl(f,MGA_VID_FSEL,&mga_next_frame); |
56 | 138 mga_next_frame=(mga_next_frame+1)%mga_vid_config.num_frames; |
47 | 139 vid_data=frames[mga_next_frame]; |
1 | 140 |
141 } | |
142 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
143 static int |
1 | 144 draw_frame(uint8_t *src[]) |
145 { | |
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
|
146 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
|
147 return 0; |
1 | 148 } |
149 | |
7681 | 150 static uint32_t get_image(mp_image_t *mpi){ |
32374 | 151 uint32_t bespitch = FFALIGN(mga_vid_config.src_width, 32); |
4971 | 152 uint32_t bespitch2 = bespitch/2; |
153 // printf("mga: get_image() called\n"); | |
4975 | 154 if(mpi->type==MP_IMGTYPE_STATIC && mga_vid_config.num_frames>1) return VO_FALSE; // it is not static |
4971 | 155 if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram |
5335 | 156 if(mga_vid_config.card_type == MGA_G200 && mpi->flags&MP_IMGFLAG_PLANAR) return VO_FALSE; |
4971 | 157 // printf("width=%d vs. bespitch=%d, flags=0x%X \n",mpi->width,bespitch,mpi->flags); |
158 if((mpi->width==bespitch) || | |
159 (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH))){ | |
160 // we're lucky or codec accepts stride => ok, let's go! | |
161 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
162 mpi->planes[0]=vid_data; | |
5317 | 163 if(mpi->flags&MP_IMGFLAG_SWAPPED){ |
164 mpi->planes[1]=vid_data + bespitch*mga_vid_config.src_height; | |
165 mpi->planes[2]=mpi->planes[1] + bespitch2*mga_vid_config.src_height/2; | |
166 } else { | |
167 mpi->planes[2]=vid_data + bespitch*mga_vid_config.src_height; | |
168 mpi->planes[1]=mpi->planes[2] + bespitch2*mga_vid_config.src_height/2; | |
169 } | |
4971 | 170 mpi->width=mpi->stride[0]=bespitch; |
171 mpi->stride[1]=mpi->stride[2]=bespitch2; | |
172 } else { | |
173 mpi->planes[0]=vid_data; | |
174 mpi->width=bespitch; | |
175 mpi->stride[0]=mpi->width*(mpi->bpp/8); | |
176 } | |
177 mpi->flags|=MP_IMGFLAG_DIRECT; | |
178 // printf("mga: get_image() SUCCESS -> Direct Rendering ENABLED\n"); | |
179 return VO_TRUE; | |
180 } | |
181 return VO_FALSE; | |
182 } | |
183 | |
184 static uint32_t | |
7681 | 185 draw_image(mp_image_t *mpi){ |
32374 | 186 uint32_t bespitch = FFALIGN(mga_vid_config.src_width, 32); |
7681 | 187 |
188 // if -dr or -slices then do nothing: | |
189 if(mpi->flags&(MP_IMGFLAG_DIRECT|MP_IMGFLAG_DRAW_CALLBACK)) return VO_TRUE; | |
190 | |
191 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
192 // copy planar: | |
193 draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,mpi->x,mpi->y); | |
194 } else { | |
195 // copy packed: | |
196 mem2agpcpy_pic(vid_data, mpi->planes[0], // dst,src | |
197 mpi->w*(mpi->bpp/8), mpi->h, // w,h | |
198 bespitch*2, mpi->stride[0]); // dstride,sstride | |
199 } | |
200 return VO_TRUE; | |
201 } | |
202 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
203 static int |
1 | 204 query_format(uint32_t format) |
205 { | |
206 switch(format){ | |
207 case IMGFMT_YV12: | |
470 | 208 case IMGFMT_I420: |
209 case IMGFMT_IYUV: | |
1 | 210 case IMGFMT_YUY2: |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
413
diff
changeset
|
211 case IMGFMT_UYVY: |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13787
diff
changeset
|
212 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD|VFCAP_HWSCALE_UP|VFCAP_HWSCALE_DOWN|VFCAP_ACCEPT_STRIDE; |
1 | 213 } |
214 return 0; | |
215 } | |
216 | |
24241 | 217 #ifndef VO_XMGA |
28232
8df85ad26746
Add missing 'void' keyword to parameterless function declarations.
diego
parents:
28088
diff
changeset
|
218 static void mga_fullscreen(void) |
5987 | 219 { |
220 uint32_t w,h; | |
221 if ( !vo_fs ) { | |
222 vo_fs=VO_TRUE; | |
223 w=vo_screenwidth; h=vo_screenheight; | |
224 aspect(&w,&h,A_ZOOM); | |
225 } else { | |
226 vo_fs=VO_FALSE; | |
227 w=vo_dwidth; h=vo_dheight; | |
228 aspect(&w,&h,A_NOZOOM); | |
229 } | |
230 mga_vid_config.dest_width = w; | |
231 mga_vid_config.dest_height= h; | |
7680 | 232 mga_vid_config.x_org=(vo_screenwidth-w)/2; |
233 mga_vid_config.y_org=(vo_screenheight-h)/2; | |
5987 | 234 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
|
235 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_ErrorInConfigIoctl ); |
5987 | 236 } |
24241 | 237 #endif |
5987 | 238 |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
33301
diff
changeset
|
239 static int control(uint32_t request, void *data) |
4970 | 240 { |
241 switch (request) { | |
242 case VOCTRL_QUERY_FORMAT: | |
243 return query_format(*((uint32_t*)data)); | |
4971 | 244 case VOCTRL_GET_IMAGE: |
245 return get_image(data); | |
7681 | 246 case VOCTRL_DRAW_IMAGE: |
247 return draw_image(data); | |
6799 | 248 case VOCTRL_SET_EQUALIZER: |
249 { | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
250 vf_equalizer_t *eq=data; |
6799 | 251 short value; |
252 uint32_t luma,prev; | |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
253 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
254 if ( strcmp( eq->item,"brightness" ) && strcmp( eq->item,"contrast" ) ) return VO_FALSE; |
6799 | 255 |
256 if (ioctl(f,MGA_VID_GET_LUMA,&prev)) { | |
257 perror("Error in mga_vid_config ioctl()"); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
258 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotGetLumaValuesFromTheKernelModule); |
6799 | 259 return VO_FALSE; |
260 } | |
261 | |
262 // printf("GET: 0x%4X 0x%4X \n",(prev>>16),(prev&0xffff)); | |
263 | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
264 // printf("value: %d -> ",eq->value); |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
265 value=((eq->value+100)*255)/200-128; // maps -100=>-128 and +100=>127 |
6799 | 266 // printf("%d \n",value); |
267 | |
268 if(!strcmp(data,"contrast")) | |
269 luma = (prev&0xFFFF0000)|(value&0xFFFF); | |
270 else | |
271 luma = (prev&0xFFFF)|(value<<16); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
272 |
6799 | 273 if (ioctl(f,MGA_VID_SET_LUMA,luma)) { |
274 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
|
275 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotSetLumaValuesFromTheKernelModule); |
6799 | 276 return VO_FALSE; |
277 } | |
278 | |
279 return VO_TRUE; | |
280 } | |
281 | |
282 case VOCTRL_GET_EQUALIZER: | |
283 { | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
284 vf_equalizer_t *eq=data; |
6799 | 285 short val; |
286 uint32_t luma; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
287 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
288 if ( strcmp( eq->item,"brightness" ) && strcmp( eq->item,"contrast" ) ) return VO_FALSE; |
6799 | 289 |
290 if (ioctl(f,MGA_VID_GET_LUMA,&luma)) { | |
291 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
|
292 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotGetLumaValuesFromTheKernelModule); |
6799 | 293 return VO_FALSE; |
294 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
295 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
296 if ( !strcmp( eq->item,"contrast" ) ) |
6799 | 297 val=(luma & 0xFFFF); |
298 else | |
299 val=(luma >> 16); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
300 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
301 eq->value = (val*200)/255; |
6799 | 302 |
303 return VO_TRUE; | |
304 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
305 |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
306 #ifndef VO_XMGA |
5987 | 307 case VOCTRL_FULLSCREEN: |
7680 | 308 if (vo_screenwidth && vo_screenheight) |
309 mga_fullscreen(); | |
310 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
|
311 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
|
312 return VO_TRUE; |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
313 case VOCTRL_GET_PANSCAN: |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
314 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
|
315 return VO_TRUE; |
5987 | 316 #endif |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
317 |
27343 | 318 #if defined(VO_XMGA) && defined(CONFIG_GUI) |
6009 | 319 case VOCTRL_GUISUPPORT: |
320 return VO_TRUE; | |
321 #endif | |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
322 |
6307 | 323 #ifdef VO_XMGA |
11542 | 324 case VOCTRL_ONTOP: |
325 vo_x11_ontop(); | |
326 return VO_TRUE; | |
6307 | 327 case VOCTRL_GET_PANSCAN: |
25962 | 328 if ( !initialized || !vo_fs ) return VO_FALSE; |
6307 | 329 return VO_TRUE; |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
330 case VOCTRL_FULLSCREEN: |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
331 vo_x11_fullscreen(); |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
332 vo_panscan_amount=0; |
32373 | 333 /* intended, 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
|
334 #endif |
6307 | 335 case VOCTRL_SET_PANSCAN: |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
336 if ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) // || ( !vo_fs && vo_panscan_amount ) ) |
6307 | 337 { |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
338 // int old_y = vo_panscan_y; |
6307 | 339 panscan_calc(); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
340 // 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
|
341 set_window(); |
6307 | 342 } |
343 return VO_TRUE; | |
32367
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
344 case VOCTRL_UPDATE_SCREENINFO: |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
345 #ifdef VO_XMGA |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
346 update_xinerama_info(); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
347 #else |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
348 aspect_save_screenres(vo_screenwidth, vo_screenheight); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
349 #endif |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
350 return VO_TRUE; |
4970 | 351 } |
352 return VO_NOTIMPL; | |
353 } | |
354 | |
355 | |
7679 | 356 static int mga_init(int width,int height,unsigned int format){ |
357 | |
32374 | 358 uint32_t bespitch = FFALIGN(width, 32); |
7679 | 359 switch(format){ |
360 case IMGFMT_YV12: | |
32374 | 361 width = FFALIGN(width, 2); |
362 height = FFALIGN(height, 2); | |
363 mga_vid_config.frame_size = bespitch * height + (bespitch * height) / 2; | |
7679 | 364 mga_vid_config.format=MGA_VID_FORMAT_I420; break; |
365 case IMGFMT_I420: | |
366 case IMGFMT_IYUV: | |
32374 | 367 width = FFALIGN(width, 2); |
368 height = FFALIGN(height, 2); | |
369 mga_vid_config.frame_size = bespitch * height + (bespitch * height) / 2; | |
7679 | 370 mga_vid_config.format=MGA_VID_FORMAT_YV12; break; |
371 case IMGFMT_YUY2: | |
32374 | 372 mga_vid_config.frame_size = bespitch * height * 2; |
7679 | 373 mga_vid_config.format=MGA_VID_FORMAT_YUY2; break; |
374 case IMGFMT_UYVY: | |
32374 | 375 mga_vid_config.frame_size = bespitch * height * 2; |
7679 | 376 mga_vid_config.format=MGA_VID_FORMAT_UYVY; break; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
377 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
|
378 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
|
379 return -1; |
7679 | 380 } |
381 | |
382 mga_vid_config.src_width = width; | |
383 mga_vid_config.src_height= height; | |
7680 | 384 if(!mga_vid_config.dest_width) |
385 mga_vid_config.dest_width = width; | |
386 if(!mga_vid_config.dest_height) | |
387 mga_vid_config.dest_height= height; | |
56 | 388 |
7680 | 389 mga_vid_config.colkey_on=0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
390 |
5432 | 391 mga_vid_config.num_frames=(vo_directrendering && !vo_doublebuffering)?1:3; |
56 | 392 mga_vid_config.version=MGA_VID_VERSION; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
393 |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
394 if(width > 1024 && height > 1024) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
395 { |
28088 | 396 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
|
397 return -1; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
398 } else if(height <= 1024) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
399 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
400 // try whether we have a G550 |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
401 int ret; |
24424 | 402 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
|
403 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
404 if(mga_vid_config.card_type != MGA_G550) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
405 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
406 // we don't have a G550, so our resolution is too high |
28088 | 407 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
|
408 return -1; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
409 } else { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
410 // there is a deeper problem |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
411 // 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
|
412 perror("Error in mga_vid_config ioctl()"); |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
413 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
|
414 return -1; |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
415 } |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
416 // 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
|
417 // at this high resolution |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
418 } |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
419 } else { |
22694 | 420 // configure mga_vid in case resolution is < 1024x1024 too |
421 if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config)) | |
422 { | |
423 perror("Error in mga_vid_config ioctl()"); | |
424 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_IncompatibleDriverVersion); | |
425 return -1; | |
426 } | |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
427 } |
31371
a6cb957ad186
Disable only G200 support when compiling against dynamic libswscale instead
reimar
parents:
31364
diff
changeset
|
428 if (mga_vid_config.card_type == MGA_G200) { |
32196 | 429 sws_ctx = sws_getContext(width, height, PIX_FMT_YUV420P, |
430 width, height, PIX_FMT_NV12, | |
431 SWS_BILINEAR, NULL, NULL, NULL); | |
432 if (!sws_ctx) { | |
433 mp_msg(MSGT_VO, MSGL_FATAL, | |
434 "Could not get swscale context to scale for G200.\n"); | |
435 return -1; | |
436 } | |
437 mp_msg(MSGT_VO, MSGL_WARN, "G200 cards support is untested. " | |
438 "Please report whether it works.\n"); | |
31371
a6cb957ad186
Disable only G200 support when compiling against dynamic libswscale instead
reimar
parents:
31364
diff
changeset
|
439 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
440 |
24321 | 441 mp_msg(MSGT_VO,MSGL_V,"[MGA] Using %d buffers.\n",mga_vid_config.num_frames); |
56 | 442 |
33712 | 443 frames[0] = mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0); |
56 | 444 frames[1] = frames[0] + 1*mga_vid_config.frame_size; |
445 frames[2] = frames[0] + 2*mga_vid_config.frame_size; | |
446 frames[3] = frames[0] + 3*mga_vid_config.frame_size; | |
447 mga_next_frame = 0; | |
448 vid_data = frames[mga_next_frame]; | |
449 | |
450 //clear the buffer | |
451 memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames); | |
452 | |
7777 | 453 #ifndef VO_XMGA |
7679 | 454 ioctl(f,MGA_VID_ON,0); |
7777 | 455 #endif |
7679 | 456 |
56 | 457 return 0; |
458 } | |
459 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28446
diff
changeset
|
460 static int mga_uninit(void){ |
7679 | 461 if(f>=0){ |
1637 | 462 ioctl( f,MGA_VID_OFF,0 ); |
463 munmap(frames[0],mga_vid_config.frame_size*mga_vid_config.num_frames); | |
464 close(f); | |
5389
7296c4262457
quick hack to make vo_mga accept multiple calls to config
rfelker
parents:
5335
diff
changeset
|
465 f = -1; |
7679 | 466 } |
32196 | 467 if (sws_ctx) { |
468 sws_freeContext(sws_ctx); | |
469 } | |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
6799
diff
changeset
|
470 return 0; |
1637 | 471 } |
4970 | 472 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
473 static int preinit(const char *vo_subdevice) |
4970 | 474 { |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
475 uint32_t ver; |
7695 | 476 const char *devname=vo_subdevice?vo_subdevice:"/dev/mga_vid"; |
5433 | 477 |
478 f = open(devname,O_RDWR); | |
479 if(f == -1) | |
480 { | |
481 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
|
482 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
|
483 return -1; |
5433 | 484 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
485 |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
486 // 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
|
487 // version as we expect |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
488 |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
489 ioctl(f,MGA_VID_GET_VERSION,&ver); |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
490 if(MGA_VID_VERSION != ver) |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
491 { |
28088 | 492 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
|
493 return -1; |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
494 } |
7679 | 495 |
496 #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
|
497 if (!vo_init()) { |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
498 close(f); |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
499 return -1; |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
500 } |
7679 | 501 #endif |
502 | |
4970 | 503 return 0; |
504 } | |
505 | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
506 static void set_window( void ){ |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
507 |
32367
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
508 drwcX = vo_dx; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
509 drwcY = vo_dy; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
510 drwWidth = vo_dwidth; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
511 drwHeight = vo_dheight; |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
512 |
32367
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
513 aspect(&drwWidth, &drwHeight, A_WINZOOM); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
514 panscan_calc_windowed(); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
515 drwWidth += vo_panscan_x; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
516 drwHeight += vo_panscan_y; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
517 drwWidth = FFMIN(drwWidth, vo_screenwidth); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
518 drwHeight = FFMIN(drwHeight, vo_screenheight); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
519 drwX = (vo_dwidth - drwWidth ) / 2; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
520 drwY = (vo_dheight - drwHeight) / 2; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
521 drwcX += drwX; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
522 drwcY += drwY; |
8017
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 #ifdef VO_XMGA |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
525 #ifdef CONFIG_XINERAMA |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
526 if(XineramaIsActive(mDisplay)) |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
527 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
528 XineramaScreenInfo *screens; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
529 int num_screens; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
530 int i; |
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 screens = XineramaQueryScreens(mDisplay,&num_screens); |
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 /* 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
|
535 i = 0; |
8988 | 536 while(i<num_screens && |
537 ((screens[i].x_org < drwcX) || | |
538 (screens[i].y_org < drwcY) || | |
539 (screens[i].x_org + screens[i].width >= drwcX) || | |
540 (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
|
541 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
542 i++; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
543 } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
544 |
8988 | 545 if(i<num_screens) |
546 { | |
547 /* save the screen we are on */ | |
548 xinerama_screen = i; | |
549 } else { | |
550 /* oops.. couldnt find the screen we are on | |
551 * because the upper left corner left the | |
552 * visual range. assume we are still on the | |
553 * same screen | |
554 */ | |
555 i = xinerama_screen; | |
556 } | |
557 | |
24233 | 558 if(xinerama_screen == -1) |
559 { | |
560 // The default value of the xinerama_screen is | |
561 // still there. Which means we could never | |
562 // figure out on which screen we are. | |
563 // Choose the first screen as default | |
564 xinerama_screen = i = 0; | |
565 } | |
566 | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
567 /* 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
|
568 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
|
569 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
|
570 XFree(screens); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
571 } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
572 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
573 #endif |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
574 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
575 mDrawColorKey(); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
576 #endif |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
577 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
578 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
|
579 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
|
580 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
|
581 mga_vid_config.dest_height=drwHeight; |
9047 | 582 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
|
583 } |