annotate libvo/mga_common.c @ 8763:19e96e60a3d0

Speed optimizations (runs twise as fast) and bugfix (wrong cutoff frequency buffer over run noise and garbeled output when wrong input format)
author anders
date Sat, 04 Jan 2003 06:19:25 +0000
parents 9fc45fe0d444
children ff92d9b5ade5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
413
7785656abf11 fastmemcpy added
arpi_esp
parents: 326
diff changeset
1
566
0375ced94bd7 ehh fixed ;)
arpi_esp
parents: 470
diff changeset
2 #include "fastmemcpy.h"
2625
a8145a712f25 mmx opt ,untested, i have no mga
michael
parents: 1637
diff changeset
3 #include "../mmx_defs.h"
5405
c7455d4079ae using interleaveBytes() for G200 draw_slice
arpi
parents: 5389
diff changeset
4 #include "../postproc/rgb2rgb.h"
8017
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
5 #include "mp_msg.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 // mga_vid drawing functions
8017
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
8 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
9 #ifdef VO_XMGA
8017
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
10 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
11 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
13 static int mga_next_frame=0;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
14
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
15 static mga_vid_config_t mga_vid_config;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
16 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
17 static int f = -1;
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
18
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8017
diff changeset
19 static uint32_t drwX,drwY,drwWidth,drwHeight;
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8017
diff changeset
20 #ifdef VO_XMGA
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8017
diff changeset
21 static uint32_t drwBorderWidth,drwDepth;
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8017
diff changeset
22 #endif
8017
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
23 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
24
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents: 56
diff changeset
25 static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents: 56
diff changeset
26 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31;
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
27 switch(mga_vid_config.format){
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
28 case MGA_VID_FORMAT_YV12:
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
29 case MGA_VID_FORMAT_IYUV:
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
30 case MGA_VID_FORMAT_I420:
326
f6b5c2dbc88e OSD alpha renderers moved to osd.c
arpi_esp
parents: 284
diff changeset
31 vo_draw_alpha_yv12(w,h,src,srca,stride,vid_data+bespitch*y0+x0,bespitch);
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
32 break;
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
33 case MGA_VID_FORMAT_YUY2:
326
f6b5c2dbc88e OSD alpha renderers moved to osd.c
arpi_esp
parents: 284
diff changeset
34 vo_draw_alpha_yuy2(w,h,src,srca,stride,vid_data+2*(bespitch*y0+x0),2*bespitch);
466
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
35 break;
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
36 case MGA_VID_FORMAT_UYVY:
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
37 vo_draw_alpha_yuy2(w,h,src,srca,stride,vid_data+2*(bespitch*y0+x0)+1,2*bespitch);
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
38 break;
c7c03bf70bb7 UYVY support
arpi_esp
parents: 448
diff changeset
39 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41
7680
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
42 static void draw_osd(void)
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
43 {
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
44 vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha);
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
45 }
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
46
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
47
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 //static void
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 //write_slice_g200(uint8_t *y,uint8_t *cr, uint8_t *cb,uint32_t slice_num)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 static void
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 draw_slice_g200(uint8_t *image[], int stride[], int width,int height,int x,int y)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 uint8_t *dest;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 6799
diff changeset
55 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56
284
1ddac77b0d43 fixed the bespitch*y*x bug
arpi_esp
parents: 275
diff changeset
57 dest = vid_data + bespitch*y + x;
4949
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
58 mem2agpcpy_pic(dest, image[0], width, height, bespitch, stride[0]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 width/=2;height/=2;x/=2;y/=2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
284
1ddac77b0d43 fixed the bespitch*y*x bug
arpi_esp
parents: 275
diff changeset
62 dest = vid_data + bespitch*mga_vid_config.src_height + bespitch*y + 2*x;
5405
c7455d4079ae using interleaveBytes() for G200 draw_slice
arpi
parents: 5389
diff changeset
63
c7455d4079ae using interleaveBytes() for G200 draw_slice
arpi
parents: 5389
diff changeset
64 interleaveBytes(image[1],image[2],dest,
5406
arpi
parents: 5405
diff changeset
65 width, height,
5405
c7455d4079ae using interleaveBytes() for G200 draw_slice
arpi
parents: 5389
diff changeset
66 stride[1], stride[2], bespitch);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 static void
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 draw_slice_g400(uint8_t *image[], int stride[], int w,int h,int x,int y)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 uint8_t *dest;
5317
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
73 uint8_t *dest2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 uint32_t bespitch,bespitch2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 bespitch = (mga_vid_config.src_width + 31) & ~31;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 bespitch2 = bespitch/2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 dest = vid_data + bespitch * y + x;
4949
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
80 mem2agpcpy_pic(dest, image[0], w, h, bespitch, stride[0]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 w/=2;h/=2;x/=2;y/=2;
5317
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
83
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 dest = vid_data + bespitch*mga_vid_config.src_height + bespitch2 * y + x;
5317
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
85 dest2= dest + bespitch2*mga_vid_config.src_height / 2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86
5317
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
87 if(mga_vid_config.format==MGA_VID_FORMAT_YV12){
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
88 // mga_vid's YV12 assumes Y,U,V order (insteda of Y,V,U) :(
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
89 mem2agpcpy_pic(dest, image[1], w, h, bespitch2, stride[1]);
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
90 mem2agpcpy_pic(dest2,image[2], w, h, bespitch2, stride[2]);
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
91 } else {
4949
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
92 mem2agpcpy_pic(dest, image[2], w, h, bespitch2, stride[2]);
5317
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
93 mem2agpcpy_pic(dest2,image[1], w, h, bespitch2, stride[1]);
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
94 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 static uint32_t
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 {
4949
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
101
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
102 #if 0
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
103 printf("vo: %p/%d %p/%d %p/%d %dx%d/%d;%d \n",
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
104 src[0],stride[0],
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
105 src[1],stride[1],
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
106 src[2],stride[2],
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
107 w,h,x,y);
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
108 #endif
48bfd1d278d1 using mem2agpcpy_pic()
arpi
parents: 2625
diff changeset
109
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 if (mga_vid_config.card_type == MGA_G200)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 draw_slice_g200(src,stride,w,h,x,y);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113 draw_slice_g400(src,stride,w,h,x,y);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 static void
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
118 vo_mga_flip_page(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119 {
47
9d68da5d8a9a vsync in mga/xmga
arpi_esp
parents: 31
diff changeset
120
9d68da5d8a9a vsync in mga/xmga
arpi_esp
parents: 31
diff changeset
121 // printf("-- flip to %d --\n",mga_next_frame);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122
47
9d68da5d8a9a vsync in mga/xmga
arpi_esp
parents: 31
diff changeset
123 #if 1
9d68da5d8a9a vsync in mga/xmga
arpi_esp
parents: 31
diff changeset
124 ioctl(f,MGA_VID_FSEL,&mga_next_frame);
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
125 mga_next_frame=(mga_next_frame+1)%mga_vid_config.num_frames;
47
9d68da5d8a9a vsync in mga/xmga
arpi_esp
parents: 31
diff changeset
126 vid_data=frames[mga_next_frame];
9d68da5d8a9a vsync in mga/xmga
arpi_esp
parents: 31
diff changeset
127 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 static uint32_t
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 draw_frame(uint8_t *src[])
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 {
7681
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
134 printf("!!! 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
135 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137
7681
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
138 static uint32_t get_image(mp_image_t *mpi){
4971
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
139 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
140 uint32_t bespitch2 = bespitch/2;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
141 // printf("mga: get_image() called\n");
4975
877f0f643fef accept STATIC buffers if num_buffers==1
arpi
parents: 4971
diff changeset
142 if(mpi->type==MP_IMGTYPE_STATIC && mga_vid_config.num_frames>1) return VO_FALSE; // it is not static
4971
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
143 if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram
5335
da218aa7f9db disabel DR and UV swapping for g200 planar modes
arpi
parents: 5317
diff changeset
144 if(mga_vid_config.card_type == MGA_G200 && mpi->flags&MP_IMGFLAG_PLANAR) return VO_FALSE;
4971
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
145 // printf("width=%d vs. bespitch=%d, flags=0x%X \n",mpi->width,bespitch,mpi->flags);
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
146 if((mpi->width==bespitch) ||
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
147 (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH))){
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
148 // we're lucky or codec accepts stride => ok, let's go!
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
149 if(mpi->flags&MP_IMGFLAG_PLANAR){
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
150 mpi->planes[0]=vid_data;
5317
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
151 if(mpi->flags&MP_IMGFLAG_SWAPPED){
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
152 mpi->planes[1]=vid_data + bespitch*mga_vid_config.src_height;
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
153 mpi->planes[2]=mpi->planes[1] + bespitch2*mga_vid_config.src_height/2;
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
154 } else {
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
155 mpi->planes[2]=vid_data + bespitch*mga_vid_config.src_height;
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
156 mpi->planes[1]=mpi->planes[2] + bespitch2*mga_vid_config.src_height/2;
80fbb03b385a U,V plane odrer fixed
arpi
parents: 5014
diff changeset
157 }
4971
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
158 mpi->width=mpi->stride[0]=bespitch;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
159 mpi->stride[1]=mpi->stride[2]=bespitch2;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
160 } else {
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
161 mpi->planes[0]=vid_data;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
162 mpi->width=bespitch;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
163 mpi->stride[0]=mpi->width*(mpi->bpp/8);
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
164 }
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
165 mpi->flags|=MP_IMGFLAG_DIRECT;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
166 // printf("mga: get_image() SUCCESS -> Direct Rendering ENABLED\n");
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
167 return VO_TRUE;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
168 }
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
169 return VO_FALSE;
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
170 }
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
171
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
172 static uint32_t
7681
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
173 draw_image(mp_image_t *mpi){
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
174 uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31;
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
175
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
176 // if -dr or -slices then do nothing:
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
177 if(mpi->flags&(MP_IMGFLAG_DIRECT|MP_IMGFLAG_DRAW_CALLBACK)) return VO_TRUE;
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
178
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
179 if(mpi->flags&MP_IMGFLAG_PLANAR){
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
180 // copy planar:
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
181 draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,mpi->x,mpi->y);
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
182 } else {
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
183 // copy packed:
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
184 mem2agpcpy_pic(vid_data, mpi->planes[0], // dst,src
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
185 mpi->w*(mpi->bpp/8), mpi->h, // w,h
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
186 bespitch*2, mpi->stride[0]); // dstride,sstride
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
187 }
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
188 return VO_TRUE;
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
189 }
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
190
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
191 static uint32_t
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 query_format(uint32_t format)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 switch(format){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 case IMGFMT_YV12:
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
196 case IMGFMT_I420:
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 466
diff changeset
197 case IMGFMT_IYUV:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 case IMGFMT_YUY2:
448
198b46b739d8 qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents: 413
diff changeset
199 case IMGFMT_UYVY:
7694
b64f14fdadfb also set VFCAP_ACCEPT_STRIDE when draw_image() is implemented
arpi
parents: 7681
diff changeset
200 return 3 | VFCAP_OSD|VFCAP_HWSCALE_UP|VFCAP_HWSCALE_DOWN|VFCAP_ACCEPT_STRIDE;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
205 static void mga_fullscreen()
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
206 {
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
207 uint32_t w,h;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
208 if ( !vo_fs ) {
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
209 vo_fs=VO_TRUE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
210 w=vo_screenwidth; h=vo_screenheight;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
211 aspect(&w,&h,A_ZOOM);
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
212 } else {
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
213 vo_fs=VO_FALSE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
214 w=vo_dwidth; h=vo_dheight;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
215 aspect(&w,&h,A_NOZOOM);
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
216 }
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
217 mga_vid_config.dest_width = w;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
218 mga_vid_config.dest_height= h;
7680
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
219 mga_vid_config.x_org=(vo_screenwidth-w)/2;
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
220 mga_vid_config.y_org=(vo_screenheight-h)/2;
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
221 if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) )
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
222 printf( "Error in mga_vid_config ioctl (wrong mga_vid.o version?)" );
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
223 }
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
224
4970
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
225 static uint32_t control(uint32_t request, void *data, ...)
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
226 {
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
227 switch (request) {
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
228 case VOCTRL_QUERY_FORMAT:
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
229 return query_format(*((uint32_t*)data));
4971
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
230 case VOCTRL_GET_IMAGE:
fa002f25631e direct rendering support
arpi
parents: 4970
diff changeset
231 return get_image(data);
7681
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
232 case VOCTRL_DRAW_IMAGE:
62be493f77c3 draw_image() implementation (new libvo API)
arpi
parents: 7680
diff changeset
233 return draw_image(data);
6799
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
234 case VOCTRL_SET_EQUALIZER:
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
235 {
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
236 va_list ap;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
237 short value;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
238 uint32_t luma,prev;
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
239
6799
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
240 if ( strcmp( data,"brightness" ) && strcmp( data,"contrast" ) ) return VO_FALSE;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
241
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
242 if (ioctl(f,MGA_VID_GET_LUMA,&prev)) {
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
243 perror("Error in mga_vid_config ioctl()");
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
244 printf("Could not get luma values from the kernel module!\n");
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
245 return VO_FALSE;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
246 }
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
247
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
248 // printf("GET: 0x%4X 0x%4X \n",(prev>>16),(prev&0xffff));
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
249
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
250 va_start(ap, data);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
251 value = va_arg(ap, int);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
252 va_end(ap);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
253
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
254 // printf("value: %d -> ",value);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
255 value=((value+100)*255)/200-128; // maps -100=>-128 and +100=>127
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
256 // printf("%d \n",value);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
257
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
258 if(!strcmp(data,"contrast"))
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
259 luma = (prev&0xFFFF0000)|(value&0xFFFF);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
260 else
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
261 luma = (prev&0xFFFF)|(value<<16);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
262
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
263 if (ioctl(f,MGA_VID_SET_LUMA,luma)) {
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
264 perror("Error in mga_vid_config ioctl()");
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
265 printf("Could not set luma values in the kernel module!\n");
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
266 return VO_FALSE;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
267 }
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
268
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
269 return VO_TRUE;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
270 }
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
271
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
272 case VOCTRL_GET_EQUALIZER:
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
273 {
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
274 va_list ap;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
275 int * value;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
276 short val;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
277 uint32_t luma;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
278
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
279 if ( strcmp( data,"brightness" ) && strcmp( data,"contrast" ) ) return VO_FALSE;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
280
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
281 if (ioctl(f,MGA_VID_GET_LUMA,&luma)) {
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
282 perror("Error in mga_vid_config ioctl()");
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
283 printf("Could not get luma values from the kernel module!\n");
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
284 return VO_FALSE;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
285 }
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
286
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
287 if ( !strcmp( data,"contrast" ) )
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
288 val=(luma & 0xFFFF);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
289 else
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
290 val=(luma >> 16);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
291
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
292 va_start(ap, data);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
293 value = va_arg(ap, int*);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
294 va_end(ap);
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
295
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
296 *value = (val*200)/255;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
297
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
298 return VO_TRUE;
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
299 }
60a7886834af eq fixed, based on patch by .so
arpi
parents: 6755
diff changeset
300
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
301 #ifndef VO_XMGA
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
302 case VOCTRL_FULLSCREEN:
7680
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
303 if (vo_screenwidth && vo_screenheight)
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
304 mga_fullscreen();
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
305 else
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
306 printf("Screen width/height unknown!\n");
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
307 return VO_TRUE;
8017
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
308 case VOCTRL_GET_PANSCAN:
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
309 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
310 return VO_TRUE;
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5607
diff changeset
311 #endif
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
312
6009
bb1f3552f118 wm detection -- round two
pontscho
parents: 5987
diff changeset
313 #if defined( VO_XMGA ) && defined( HAVE_NEW_GUI )
bb1f3552f118 wm detection -- round two
pontscho
parents: 5987
diff changeset
314 case VOCTRL_GUISUPPORT:
bb1f3552f118 wm detection -- round two
pontscho
parents: 5987
diff changeset
315 return VO_TRUE;
bb1f3552f118 wm detection -- round two
pontscho
parents: 5987
diff changeset
316 #endif
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
317
6307
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
318 #ifdef VO_XMGA
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
319 case VOCTRL_GET_PANSCAN:
6311
da2dda48b7ec add mute support ( step 1 ) and fixed panscan bugs (1000l for me)
pontscho
parents: 6307
diff changeset
320 if ( !inited || !vo_fs ) return VO_FALSE;
6307
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
321 return VO_TRUE;
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
322 case VOCTRL_FULLSCREEN:
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
323 vo_x11_fullscreen();
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
324 vo_panscan_amount=0;
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
325 /* 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
326 #endif
6307
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
327 case VOCTRL_SET_PANSCAN:
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
328 if ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) // || ( !vo_fs && vo_panscan_amount ) )
6307
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
329 {
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8017
diff changeset
330 // int old_y = vo_panscan_y;
6307
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
331 panscan_calc();
6382
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
332 // if ( old_y != vo_panscan_y )
86d5fc5b54e2 fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents: 6335
diff changeset
333 set_window();
6307
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
334 }
72c87b2ec779 added panscan support for xmga/xvidix
pontscho
parents: 6009
diff changeset
335 return VO_TRUE;
4970
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
336 }
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
337 return VO_NOTIMPL;
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
338 }
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
339
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
340
7679
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
341 static int mga_init(int width,int height,unsigned int format){
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
342
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
343 switch(format){
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
344 case IMGFMT_YV12:
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
345 width+=width&1;height+=height&1;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
346 mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
347 mga_vid_config.format=MGA_VID_FORMAT_I420; break;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
348 case IMGFMT_I420:
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
349 case IMGFMT_IYUV:
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
350 width+=width&1;height+=height&1;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
351 mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
352 mga_vid_config.format=MGA_VID_FORMAT_YV12; break;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
353 case IMGFMT_YUY2:
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
354 mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
355 mga_vid_config.format=MGA_VID_FORMAT_YUY2; break;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
356 case IMGFMT_UYVY:
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
357 mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
358 mga_vid_config.format=MGA_VID_FORMAT_UYVY; break;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
359 default:
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
360 printf("mga: invalid output format %0X\n",format);
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
361 return (-1);
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
362 }
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
363
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
364 mga_vid_config.src_width = width;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
365 mga_vid_config.src_height= height;
7680
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
366 if(!mga_vid_config.dest_width)
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
367 mga_vid_config.dest_width = width;
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
368 if(!mga_vid_config.dest_height)
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
369 mga_vid_config.dest_height= height;
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
370
7680
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
371 mga_vid_config.colkey_on=0;
d60cfb1f8b37 more cleanup, some -vo mga fullscreen fixes
arpi
parents: 7679
diff changeset
372
5432
0c5025974a83 use only 1 buffers if dr=yes and double=no
arpi
parents: 5406
diff changeset
373 mga_vid_config.num_frames=(vo_directrendering && !vo_doublebuffering)?1:3;
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
374 mga_vid_config.version=MGA_VID_VERSION;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
375 if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config))
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
376 {
275
edd442cd99f0 lamer_protection++
arpi_esp
parents: 249
diff changeset
377 perror("Error in mga_vid_config ioctl()");
edd442cd99f0 lamer_protection++
arpi_esp
parents: 249
diff changeset
378 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
379 return -1;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
380 }
5432
0c5025974a83 use only 1 buffers if dr=yes and double=no
arpi
parents: 5406
diff changeset
381
0c5025974a83 use only 1 buffers if dr=yes and double=no
arpi
parents: 5406
diff changeset
382 printf("[mga] Using %d buffers.\n",mga_vid_config.num_frames);
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
383
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
384 frames[0] = (char*)mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0);
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
385 frames[1] = frames[0] + 1*mga_vid_config.frame_size;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
386 frames[2] = frames[0] + 2*mga_vid_config.frame_size;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
387 frames[3] = frames[0] + 3*mga_vid_config.frame_size;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
388 mga_next_frame = 0;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
389 vid_data = frames[mga_next_frame];
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
390
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
391 //clear the buffer
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
392 memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
393
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7695
diff changeset
394 #ifndef VO_XMGA
7679
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
395 ioctl(f,MGA_VID_ON,0);
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7695
diff changeset
396 #endif
7679
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
397
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
398 return 0;
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
399 }
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
400
1637
248972c26eee fixed mga uninit
arpi
parents: 566
diff changeset
401 static int mga_uninit(){
7679
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
402 if(f>=0){
1637
248972c26eee fixed mga uninit
arpi
parents: 566
diff changeset
403 ioctl( f,MGA_VID_OFF,0 );
248972c26eee fixed mga uninit
arpi
parents: 566
diff changeset
404 munmap(frames[0],mga_vid_config.frame_size*mga_vid_config.num_frames);
248972c26eee fixed mga uninit
arpi
parents: 566
diff changeset
405 close(f);
5389
7296c4262457 quick hack to make vo_mga accept multiple calls to config
rfelker
parents: 5335
diff changeset
406 f = -1;
7679
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
407 }
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 6799
diff changeset
408 return 0;
1637
248972c26eee fixed mga uninit
arpi
parents: 566
diff changeset
409 }
4970
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
410
7676
711b3d844c47 preinit() has an arg... use it.
arpi
parents: 7472
diff changeset
411 static uint32_t preinit(const char *vo_subdevice)
4970
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
412 {
7695
368d333d92c2 compiler warning found by Dominik
arpi
parents: 7694
diff changeset
413 const char *devname=vo_subdevice?vo_subdevice:"/dev/mga_vid";
5433
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5432
diff changeset
414
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5432
diff changeset
415 f = open(devname,O_RDWR);
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5432
diff changeset
416 if(f == -1)
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5432
diff changeset
417 {
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5432
diff changeset
418 perror("open");
7676
711b3d844c47 preinit() has an arg... use it.
arpi
parents: 7472
diff changeset
419 printf("vo_mga: Couldn't open %s\n",devname);
5433
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5432
diff changeset
420 return(-1);
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5432
diff changeset
421 }
7679
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
422
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
423 #ifdef VO_XMGA
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
424 if (!vo_init()) return -1;
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
425 #endif
e4e70b0e1786 some cleanup
arpi
parents: 7676
diff changeset
426
4970
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
427 return 0;
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
428 }
f21d15f0cba6 control+preinit moved to mga_common.c
arpi
parents: 4949
diff changeset
429
8017
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
430 static void set_window( void ){
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
431
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
432 #ifdef VO_XMGA
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
433 if ( WinID )
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
434 {
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
435 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
436 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
437 drwX=0; drwY=0;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
438 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
439 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
440
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
441 }
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
442 else
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
443 #endif
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
444 { 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
445
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
446 aspect(&dwidth,&dheight,A_NOZOOM);
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
447 if ( vo_fs )
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
448 {
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
449 aspect(&dwidth,&dheight,A_ZOOM);
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
450 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
451 drwcX+=drwX;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
452 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
453 drwcY+=drwY;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
454 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
455 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
456 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
457 }
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
458 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
459
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
460 #ifdef VO_XMGA
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
461 #ifdef HAVE_XINERAMA
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
462 if(XineramaIsActive(mDisplay))
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
463 {
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
464 XineramaScreenInfo *screens;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
465 int num_screens;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
466 int i;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
467
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
468 screens = XineramaQueryScreens(mDisplay,&num_screens);
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
469
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
470 /* 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
471 i = 0;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
472 while(!(screens[i].x_org <= drwcX && screens[i].y_org <= drwcY &&
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
473 screens[i].x_org + screens[i].width >= drwcX &&
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
474 screens[i].y_org + screens[i].height >= drwcY ))
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
475 {
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
476 i++;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
477 }
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
478
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
479 /* 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
480 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
481 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
482 XFree(screens);
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
483 }
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
484
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
485 #endif
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
486
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
487 mDrawColorKey();
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
488 #endif
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
489
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
490 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
491 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
492 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
493 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
494 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
495 {
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
496 drwX-=vo_panscan_x>>1;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
497 drwY-=vo_panscan_y>>1;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
498 drwWidth+=vo_panscan_x;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
499 drwHeight+=vo_panscan_y;
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
500
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
501 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
502 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
503 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
504 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
505 #ifdef VO_XMGA
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
506 mDrawColorKey();
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
507 #endif
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
508 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?)" );
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
509 }
a57aac3a927a panscan support in -vo mga (actually moved common code to mga_common.c)
arpi
parents: 7777
diff changeset
510 }