annotate libvo/vo_mga.c @ 6263:f58be367acba

The "(use this option if it does not compile)" text only made sense when the default was enabled. Now it's nonsense, removed.
author rfelker
date Sat, 01 Jun 2002 23:51:55 +0000
parents 08c552788216
children eca7dbad0166
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2 //#define memcpy(a,b,c)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 * video_out_mga.c
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 * Copyright (C) Aaron Holtzman - Aug 1999
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 * mpeg2dec is free software; you can redistribute it and/or modify
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 * the Free Software Foundation; either version 2, or (at your option)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 * any later version.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 * mpeg2dec is distributed in the hope that it will be useful,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 * GNU General Public License for more details.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 * along with GNU Make; see the file COPYING. If not, write to
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35 LIBVO_EXTERN(mga)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 #include <sys/ioctl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 #include <unistd.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39 #include <fcntl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 #include <sys/mman.h>
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
41 #include <linux/fb.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 #include "drivers/mga_vid.h"
616
41d6eec69b60 clean up
pontscho
parents: 614
diff changeset
44 #include "sub.h"
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
45 #include "aspect.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 static vo_info_t vo_info =
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 "Matrox G200/G400 overlay (/dev/mga_vid)",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50 "mga",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 "Aaron Holtzman <aholtzma@ess.engr.uvic.ca>",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 ""
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 #include "mga_common.c"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
58 #define FBDEV "/dev/fb0"
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
59
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 static uint32_t
4447
87447fe383a1 change init to config in vo_mga like in the other vo_ modules -- fixes crash caused by the changeover
rfelker
parents: 4433
diff changeset
61 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format,const vo_tune_info_t *info)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63
5433
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5389
diff changeset
64 // if (f >= 0) mga_uninit();
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
65 if(!vo_screenwidth || !vo_screenheight) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
66 int fd;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
67 struct fb_var_screeninfo fbinfo;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
68
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
69 if(-1 != (fd = open(FBDEV, O_RDONLY))) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
70 if(0 == ioctl(fd, FBIOGET_VSCREENINFO, &fbinfo)) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
71 if(!vo_screenwidth) vo_screenwidth = fbinfo.xres;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
72 if(!vo_screenheight) vo_screenheight = fbinfo.yres;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
73 } else {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
74 perror("FBIOGET_VSCREENINFO");
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
75 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
76 close(fd);
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
77 } else {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
78 perror(FBDEV);
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
79 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
80 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
81
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
82 if(vo_screenwidth && vo_screenheight){
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
83 aspect_save_orig(width,height);
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
84 aspect_save_prescale(d_width,d_height);
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
85 aspect_save_screenres(vo_screenwidth,vo_screenheight);
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
86
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
87 if(fullscreen&0x01) { /* -fs */
2318
atmos4
parents: 2317
diff changeset
88 aspect(&d_width,&d_height,A_ZOOM);
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
89 vo_fs = VO_TRUE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
90 } else {
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
91 aspect(&d_width,&d_height,A_NOZOOM);
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
92 vo_fs = VO_FALSE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
93 }
2319
9c76ec4846b3 Add some info putput for aspect().
atmos4
parents: 2318
diff changeset
94 printf("vo_mga aspect(): resized to %dx%d\n",d_width,d_height);
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
95 }
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
96
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
97
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 switch(format){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 case IMGFMT_YV12:
4947
2cc47599b571 workaround for Lara Croft CVID sample... - one more problem to solve
arpi
parents: 4596
diff changeset
100 width+=width&1;height+=height&1;
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
101 mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
5318
207c13e15ffc U,V plane odrer fixed
arpi
parents: 4970
diff changeset
102 mga_vid_config.format=MGA_VID_FORMAT_I420; break;
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 448
diff changeset
103 case IMGFMT_I420:
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 448
diff changeset
104 case IMGFMT_IYUV:
4947
2cc47599b571 workaround for Lara Croft CVID sample... - one more problem to solve
arpi
parents: 4596
diff changeset
105 width+=width&1;height+=height&1;
470
8e101a5d9dc2 I420/IYUV support
arpi_esp
parents: 448
diff changeset
106 mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
5318
207c13e15ffc U,V plane odrer fixed
arpi
parents: 4970
diff changeset
107 mga_vid_config.format=MGA_VID_FORMAT_YV12; break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 case IMGFMT_YUY2:
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
109 mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 mga_vid_config.format=MGA_VID_FORMAT_YUY2; break;
448
198b46b739d8 qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents: 213
diff changeset
111 case IMGFMT_UYVY:
198b46b739d8 qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents: 213
diff changeset
112 mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
198b46b739d8 qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents: 213
diff changeset
113 mga_vid_config.format=MGA_VID_FORMAT_UYVY; break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 default:
614
f83ec60bce49 fprintf(stderr converted to printf(
szabii
parents: 612
diff changeset
115 printf("mga: invalid output format %0X\n",format);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 return (-1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118
197
ba889a88ef91 colkey_on=0 fix
arpi_esp
parents: 56
diff changeset
119 mga_vid_config.colkey_on=0;
ba889a88ef91 colkey_on=0 fix
arpi_esp
parents: 56
diff changeset
120
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 mga_vid_config.src_width = width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 mga_vid_config.src_height= height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 mga_vid_config.dest_width = d_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 mga_vid_config.dest_height= d_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 mga_vid_config.x_org= 0; // (720-mga_vid_config.dest_width)/2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 mga_vid_config.y_org= 0; // (576-mga_vid_config.dest_height)/2;
2351
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
127 if(vo_screenwidth && vo_screenheight){
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
128 mga_vid_config.x_org=(vo_screenwidth-d_width)/2;
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
129 mga_vid_config.y_org=(vo_screenheight-d_height)/2;
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
130 }
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
131
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
132 mga_vid_config.version=MGA_VID_VERSION;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
134 return mga_init();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 static const vo_info_t*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 get_info(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 return &vo_info;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 static void
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 uninit(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 {
1637
248972c26eee fixed mga uninit
arpi
parents: 1501
diff changeset
146 mga_uninit();
248972c26eee fixed mga uninit
arpi
parents: 1501
diff changeset
147 printf("vo: uninit!\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1210
diff changeset
150 static void draw_osd(void)
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1210
diff changeset
151 {
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1210
diff changeset
152 vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha);
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1210
diff changeset
153 }
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1210
diff changeset
154
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
155 static void flip_page(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
156 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
157 vo_mga_flip_page();
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
158 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
160
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
161 static void check_events(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
162 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
163 }
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
164