Mercurial > mplayer.hg
annotate libvo/mga_template.c @ 36920:40ad45360c8a
Replace old item 'potmeter' by new item 'pimage'.
Recent versions of the X11/GTK GUI didn't allow to control a potmeter,
because that didn't seem to make any sense.
In order to get rid of the confusing potmeter that doesn't distinguish
from a hpotmeter and in order to allow the more useful behaviour recent
versions of the X11/GTK GUI have been utilized (and because we're still
supporting item 'potmeter' for reasons of compatibility with old skins),
introduce new item 'pimage' that reuses most of the current potmeter
code.
Additionally, remove remaining code and documentation of 'potmeter'.
author | ib |
---|---|
date | Mon, 17 Mar 2014 12:29:46 +0000 |
parents | 871778a75acc |
children |
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 | |
7681 | 143 static uint32_t get_image(mp_image_t *mpi){ |
32374 | 144 uint32_t bespitch = FFALIGN(mga_vid_config.src_width, 32); |
4971 | 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){ |
32374 | 179 uint32_t bespitch = FFALIGN(mga_vid_config.src_width, 32); |
7681 | 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 |
28232
8df85ad26746
Add missing 'void' keyword to parameterless function declarations.
diego
parents:
28088
diff
changeset
|
211 static void mga_fullscreen(void) |
5987 | 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 |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
33301
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 { | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
243 vf_equalizer_t *eq=data; |
6799 | 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 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
247 if ( strcmp( eq->item,"brightness" ) && strcmp( eq->item,"contrast" ) ) return VO_FALSE; |
6799 | 248 |
249 if (ioctl(f,MGA_VID_GET_LUMA,&prev)) { | |
250 perror("Error in mga_vid_config ioctl()"); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
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 | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
257 // printf("value: %d -> ",eq->value); |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
258 value=((eq->value+100)*255)/200-128; // maps -100=>-128 and +100=>127 |
6799 | 259 // printf("%d \n",value); |
260 | |
261 if(!strcmp(data,"contrast")) | |
262 luma = (prev&0xFFFF0000)|(value&0xFFFF); | |
263 else | |
264 luma = (prev&0xFFFF)|(value<<16); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
265 |
6799 | 266 if (ioctl(f,MGA_VID_SET_LUMA,luma)) { |
267 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
|
268 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotSetLumaValuesFromTheKernelModule); |
6799 | 269 return VO_FALSE; |
270 } | |
271 | |
272 return VO_TRUE; | |
273 } | |
274 | |
275 case VOCTRL_GET_EQUALIZER: | |
276 { | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
277 vf_equalizer_t *eq=data; |
6799 | 278 short val; |
279 uint32_t luma; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
280 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
281 if ( strcmp( eq->item,"brightness" ) && strcmp( eq->item,"contrast" ) ) return VO_FALSE; |
6799 | 282 |
283 if (ioctl(f,MGA_VID_GET_LUMA,&luma)) { | |
284 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
|
285 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldNotGetLumaValuesFromTheKernelModule); |
6799 | 286 return VO_FALSE; |
287 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
288 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
289 if ( !strcmp( eq->item,"contrast" ) ) |
6799 | 290 val=(luma & 0xFFFF); |
291 else | |
292 val=(luma >> 16); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
293 |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32833
diff
changeset
|
294 eq->value = (val*200)/255; |
6799 | 295 |
296 return VO_TRUE; | |
297 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
298 |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
299 #ifndef VO_XMGA |
5987 | 300 case VOCTRL_FULLSCREEN: |
7680 | 301 if (vo_screenwidth && vo_screenheight) |
302 mga_fullscreen(); | |
303 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
|
304 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
|
305 return VO_TRUE; |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
306 case VOCTRL_GET_PANSCAN: |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
307 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
|
308 return VO_TRUE; |
5987 | 309 #endif |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
310 |
36870 | 311 #if defined(VO_XMGA) |
6009 | 312 case VOCTRL_GUISUPPORT: |
313 return VO_TRUE; | |
314 #endif | |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
315 |
6307 | 316 #ifdef VO_XMGA |
11542 | 317 case VOCTRL_ONTOP: |
318 vo_x11_ontop(); | |
319 return VO_TRUE; | |
6307 | 320 case VOCTRL_GET_PANSCAN: |
25962 | 321 if ( !initialized || !vo_fs ) return VO_FALSE; |
6307 | 322 return VO_TRUE; |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
323 case VOCTRL_FULLSCREEN: |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
324 vo_x11_fullscreen(); |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
325 vo_panscan_amount=0; |
32373 | 326 /* 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
|
327 #endif |
6307 | 328 case VOCTRL_SET_PANSCAN: |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6335
diff
changeset
|
329 if ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) // || ( !vo_fs && vo_panscan_amount ) ) |
6307 | 330 { |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8017
diff
changeset
|
331 // int old_y = vo_panscan_y; |
6307 | 332 panscan_calc(); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
333 // 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
|
334 set_window(); |
6307 | 335 } |
336 return VO_TRUE; | |
32367
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
337 case VOCTRL_UPDATE_SCREENINFO: |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
338 #ifdef VO_XMGA |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
339 update_xinerama_info(); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
340 #else |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
341 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
|
342 #endif |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
343 return VO_TRUE; |
4970 | 344 } |
345 return VO_NOTIMPL; | |
346 } | |
347 | |
348 | |
7679 | 349 static int mga_init(int width,int height,unsigned int format){ |
350 | |
32374 | 351 uint32_t bespitch = FFALIGN(width, 32); |
7679 | 352 switch(format){ |
353 case IMGFMT_YV12: | |
32374 | 354 width = FFALIGN(width, 2); |
355 height = FFALIGN(height, 2); | |
356 mga_vid_config.frame_size = bespitch * height + (bespitch * height) / 2; | |
7679 | 357 mga_vid_config.format=MGA_VID_FORMAT_I420; break; |
358 case IMGFMT_I420: | |
359 case IMGFMT_IYUV: | |
32374 | 360 width = FFALIGN(width, 2); |
361 height = FFALIGN(height, 2); | |
362 mga_vid_config.frame_size = bespitch * height + (bespitch * height) / 2; | |
7679 | 363 mga_vid_config.format=MGA_VID_FORMAT_YV12; break; |
364 case IMGFMT_YUY2: | |
32374 | 365 mga_vid_config.frame_size = bespitch * height * 2; |
7679 | 366 mga_vid_config.format=MGA_VID_FORMAT_YUY2; break; |
367 case IMGFMT_UYVY: | |
32374 | 368 mga_vid_config.frame_size = bespitch * height * 2; |
7679 | 369 mga_vid_config.format=MGA_VID_FORMAT_UYVY; break; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
370 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
|
371 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
|
372 return -1; |
7679 | 373 } |
374 | |
375 mga_vid_config.src_width = width; | |
376 mga_vid_config.src_height= height; | |
7680 | 377 if(!mga_vid_config.dest_width) |
378 mga_vid_config.dest_width = width; | |
379 if(!mga_vid_config.dest_height) | |
380 mga_vid_config.dest_height= height; | |
56 | 381 |
7680 | 382 mga_vid_config.colkey_on=0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
383 |
5432 | 384 mga_vid_config.num_frames=(vo_directrendering && !vo_doublebuffering)?1:3; |
56 | 385 mga_vid_config.version=MGA_VID_VERSION; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
386 |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
387 if(width > 1024 && height > 1024) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
388 { |
28088 | 389 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
|
390 return -1; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
391 } else if(height <= 1024) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
392 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
393 // try whether we have a G550 |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
394 int ret; |
24424 | 395 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
|
396 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
397 if(mga_vid_config.card_type != MGA_G550) |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
398 { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
399 // we don't have a G550, so our resolution is too high |
28088 | 400 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
|
401 return -1; |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
402 } else { |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
403 // there is a deeper problem |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
404 // 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
|
405 perror("Error in mga_vid_config ioctl()"); |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
406 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
|
407 return -1; |
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 // 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
|
410 // at this high resolution |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
411 } |
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
412 } else { |
22694 | 413 // configure mga_vid in case resolution is < 1024x1024 too |
414 if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config)) | |
415 { | |
416 perror("Error in mga_vid_config ioctl()"); | |
417 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_IncompatibleDriverVersion); | |
418 return -1; | |
419 } | |
22693
b73dca7dbb0f
allow horizontal resolutions >1024 in case we have a G550
attila
parents:
22142
diff
changeset
|
420 } |
31371
a6cb957ad186
Disable only G200 support when compiling against dynamic libswscale instead
reimar
parents:
31364
diff
changeset
|
421 if (mga_vid_config.card_type == MGA_G200) { |
32196 | 422 sws_ctx = sws_getContext(width, height, PIX_FMT_YUV420P, |
423 width, height, PIX_FMT_NV12, | |
424 SWS_BILINEAR, NULL, NULL, NULL); | |
425 if (!sws_ctx) { | |
426 mp_msg(MSGT_VO, MSGL_FATAL, | |
427 "Could not get swscale context to scale for G200.\n"); | |
428 return -1; | |
429 } | |
430 mp_msg(MSGT_VO, MSGL_WARN, "G200 cards support is untested. " | |
431 "Please report whether it works.\n"); | |
31371
a6cb957ad186
Disable only G200 support when compiling against dynamic libswscale instead
reimar
parents:
31364
diff
changeset
|
432 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
433 |
24321 | 434 mp_msg(MSGT_VO,MSGL_V,"[MGA] Using %d buffers.\n",mga_vid_config.num_frames); |
56 | 435 |
33712 | 436 frames[0] = mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0); |
56 | 437 frames[1] = frames[0] + 1*mga_vid_config.frame_size; |
438 frames[2] = frames[0] + 2*mga_vid_config.frame_size; | |
439 frames[3] = frames[0] + 3*mga_vid_config.frame_size; | |
440 mga_next_frame = 0; | |
441 vid_data = frames[mga_next_frame]; | |
442 | |
443 //clear the buffer | |
444 memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames); | |
445 | |
7777 | 446 #ifndef VO_XMGA |
7679 | 447 ioctl(f,MGA_VID_ON,0); |
7777 | 448 #endif |
7679 | 449 |
56 | 450 return 0; |
451 } | |
452 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28446
diff
changeset
|
453 static int mga_uninit(void){ |
7679 | 454 if(f>=0){ |
1637 | 455 ioctl( f,MGA_VID_OFF,0 ); |
456 munmap(frames[0],mga_vid_config.frame_size*mga_vid_config.num_frames); | |
457 close(f); | |
5389
7296c4262457
quick hack to make vo_mga accept multiple calls to config
rfelker
parents:
5335
diff
changeset
|
458 f = -1; |
7679 | 459 } |
32196 | 460 if (sws_ctx) { |
461 sws_freeContext(sws_ctx); | |
462 } | |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
6799
diff
changeset
|
463 return 0; |
1637 | 464 } |
4970 | 465 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
466 static int preinit(const char *vo_subdevice) |
4970 | 467 { |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
468 uint32_t ver; |
7695 | 469 const char *devname=vo_subdevice?vo_subdevice:"/dev/mga_vid"; |
5433 | 470 |
471 f = open(devname,O_RDWR); | |
472 if(f == -1) | |
473 { | |
474 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
|
475 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
|
476 return -1; |
5433 | 477 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
478 |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
479 // 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
|
480 // version as we expect |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
481 |
26831
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
482 ioctl(f,MGA_VID_GET_VERSION,&ver); |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
483 if(MGA_VID_VERSION != ver) |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
484 { |
28088 | 485 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
|
486 return -1; |
7b868c55d22b
make use of the new MGA_VID_VERSION ioctl to check
attila
parents:
26755
diff
changeset
|
487 } |
7679 | 488 |
489 #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
|
490 if (!vo_init()) { |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
491 close(f); |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
492 return -1; |
ff92d9b5ade5
don't keep mga_vid device open if x11 init fails (fixes "-vo xmga,mga")
rfelker
parents:
8123
diff
changeset
|
493 } |
7679 | 494 #endif |
495 | |
4970 | 496 return 0; |
497 } | |
498 | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
499 static void set_window( void ){ |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
500 |
32367
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
501 drwcX = vo_dx; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
502 drwcY = vo_dy; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
503 drwWidth = vo_dwidth; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
504 drwHeight = vo_dheight; |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
505 |
32367
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
506 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
|
507 panscan_calc_windowed(); |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
508 drwWidth += vo_panscan_x; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
509 drwHeight += vo_panscan_y; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
510 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
|
511 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
|
512 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
|
513 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
|
514 drwcX += drwX; |
4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
reimar
parents:
32196
diff
changeset
|
515 drwcY += drwY; |
8017
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 #ifdef VO_XMGA |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
518 #ifdef CONFIG_XINERAMA |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
519 if(XineramaIsActive(mDisplay)) |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
520 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
521 XineramaScreenInfo *screens; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
522 int num_screens; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
523 int i; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
524 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
525 screens = XineramaQueryScreens(mDisplay,&num_screens); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
526 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
527 /* 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
|
528 i = 0; |
8988 | 529 while(i<num_screens && |
530 ((screens[i].x_org < drwcX) || | |
531 (screens[i].y_org < drwcY) || | |
532 (screens[i].x_org + screens[i].width >= drwcX) || | |
533 (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
|
534 { |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
535 i++; |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
536 } |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
537 |
8988 | 538 if(i<num_screens) |
539 { | |
540 /* save the screen we are on */ | |
541 xinerama_screen = i; | |
542 } else { | |
543 /* oops.. couldnt find the screen we are on | |
544 * because the upper left corner left the | |
545 * visual range. assume we are still on the | |
546 * same screen | |
547 */ | |
548 i = xinerama_screen; | |
549 } | |
550 | |
24233 | 551 if(xinerama_screen == -1) |
552 { | |
553 // The default value of the xinerama_screen is | |
554 // still there. Which means we could never | |
555 // figure out on which screen we are. | |
556 // Choose the first screen as default | |
557 xinerama_screen = i = 0; | |
558 } | |
559 | |
8017
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
560 /* 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
|
561 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
|
562 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
|
563 XFree(screens); |
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 |
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 mDrawColorKey(); |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
569 #endif |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
570 |
a57aac3a927a
panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents:
7777
diff
changeset
|
571 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
|
572 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
|
573 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
|
574 mga_vid_config.dest_height=drwHeight; |
9047 | 575 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
|
576 } |