annotate libvo/vo_mga.c @ 33672:e576232a39d5

Prevent balance from hopping. Only recalculate the balance if the balance has changed, not if just the volume has changed. Because (at least with my soundcard) not all volume values can be stored, but seem to be mapped onto a discrete value set, recalculation the balance from the volume isn't accurate enough.
author ib
date Tue, 28 Jun 2011 18:16:06 +0000
parents fbe5c829c69b
children 5d3f93051de9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
1 /*
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
2 * video output through mga_vid kernel driver
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
3 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
4 * This file is part of MPlayer.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
5 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
7 * it under the terms of the GNU General Public License as published by
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
9 * (at your option) any later version.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
10 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
14 * GNU General Public License for more details.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
15 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
16 * You should have received a copy of the GNU General Public License along
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 25220
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 #include "config.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 "mp_msg.h"
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
27 #include "help_mp.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 #include <sys/ioctl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 #include <unistd.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 #include <fcntl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 #include <sys/mman.h>
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
35 #include <linux/fb.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 #include "drivers/mga_vid.h"
32467
fbe5c829c69b Move libvo/sub.[ch] from libvo to sub.
cigaes
parents: 31364
diff changeset
38 #include "sub/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
39 #include "aspect.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
41 static const vo_info_t info =
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 {
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
43 "Matrox G200/G4x0/G550 overlay (/dev/mga_vid)",
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 "mga",
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
45 "A'rpi",
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
46 "Based on some code by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
49 const LIBVO_EXTERN(mga)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50
31364
317649676214 Rename libvo/mga_common.c --> libvo/mga_template.c.
diego
parents: 30633
diff changeset
51 #include "mga_template.c"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
53 #define FBDEV "/dev/fb0"
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
54
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15218
diff changeset
55 static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57
5433
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5389
diff changeset
58 // if (f >= 0) mga_uninit();
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
59 if(!vo_screenwidth || !vo_screenheight) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
60 int fd;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
61 struct fb_var_screeninfo fbinfo;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
62
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
63 if(-1 != (fd = open(FBDEV, O_RDONLY))) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
64 if(0 == ioctl(fd, FBIOGET_VSCREENINFO, &fbinfo)) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
65 if(!vo_screenwidth) vo_screenwidth = fbinfo.xres;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
66 if(!vo_screenheight) vo_screenheight = fbinfo.yres;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
67 } else {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
68 perror("FBIOGET_VSCREENINFO");
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
69 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
70 close(fd);
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
71 } else {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
72 perror(FBDEV);
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
73 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
74 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
75
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
76 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
77 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
78 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
79 aspect_save_screenres(vo_screenwidth,vo_screenheight);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
80
15218
090c8df3f6fe 100l to Jindrich! Changing the parameter name in the body, too.
rathann
parents: 15212
diff changeset
81 if(flags&VOFLAG_FULLSCREEN) { /* -fs */
2318
atmos4
parents: 2317
diff changeset
82 aspect(&d_width,&d_height,A_ZOOM);
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
83 vo_fs = VO_TRUE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
84 } 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
85 aspect(&d_width,&d_height,A_NOZOOM);
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
86 vo_fs = VO_FALSE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
87 }
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
88 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_MGA_AspectResized,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
89 }
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
90
9994
275766100443 fix panscan font resizing with vo_mga
rfelker
parents: 8148
diff changeset
91 vo_dwidth=d_width; vo_dheight=d_height;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 mga_vid_config.dest_width = d_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 mga_vid_config.dest_height= d_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 mga_vid_config.x_org= 0; // (720-mga_vid_config.dest_width)/2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 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
96 if(vo_screenwidth && vo_screenheight){
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
97 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
98 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
99 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
100
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
101 return mga_init(width,height,format);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
104 static void uninit(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 {
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
106 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_MGA_Uninit);
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
107 mga_uninit();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
110 static void flip_page(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
111 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
112 vo_mga_flip_page();
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
113 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
115
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
116 static void check_events(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
117 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
118 }