Mercurial > mplayer.hg
view TVout/fbset/modeline2fb @ 7964:143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
using the window's colormap (DirectColor).
this method is using the video card's hardware gamma ramp so it involves
no performance penalties at all.
patch by lucho <lucho@haemimont.bg>
author | arpi |
---|---|
date | Tue, 29 Oct 2002 20:27:47 +0000 |
parents | 3b5f5d1c5041 |
children |
line wrap: on
line source
#!/usr/bin/perl # Simple modeline-to-fb.modes translator # (c) 1998 by Patrick Reynolds # distributed under the GNU General Public License # mapping of modeline options to fb.modes options %options_map = ( "-hsync" => "hsync low", "-vsync" => "vsync low", "+hsync" => "hsync high", "+vsync" => "vsync high", "interlace" => "laced true", "doublescan" => "double true" ); @possible_vxres = ( 640, 800, 1024, 1152, 1280, 1600, 1920, 2048 ); # default settings (override with -d and -r) $depth = 8; $rounding = 128; # parse options while ($ARGV[0] =~ /^-/) { $arg = shift; if ($arg eq "-d" || $arg eq "--depth") { if (!($arg = shift @ARGV)) { usage("-d requires an argument"); } $depth = $arg; } elsif ($arg eq "-r" || $arg eq "--rounding") { if (!($arg = shift @ARGV)) { usage("-r requires an argument"); } $rounding = $arg; } elsif ($arg eq "-x" || $arg eq "--vxres") { if (!($arg = shift @ARGV)) { usage("-x requires an argument"); } push @possible_vxres, (split/,/,$arg); @possible_vxres = sort { $a <=> $b } @possible_vxres; print "new vxres: " . (join ",", @possible_vxres) . "\n"; } elsif ($arg eq "-h" || $arg eq "--help") { usage(); } else { usage("unknown option: $arg"); } } # find out how much video memory is available open(FBSET, "fbset -i|") || die "could not detect available video memory"; while (<FBSET>) { if (/Size\s*:\s*(\d+)/) { $size = $1; last; } } if (!$size) { die "could not detect available video memory"; } # huge kludge (hey, that rhymes!) ... # subtract 16384 from the available memory $size # why? the default 640x480 mode uses all but 16384, and when I set it # to use more than that, it oopses (!). So... for safety's sake, and # because you probably don't use those 15-25 lines anyway... $size -= 16384; print "# modes.fb - video mode descriptions for fbset # # See fbset(8) and fb.modes(5) for more information "; $flag = 0; # read all XF86Config files while(<>) { chomp; next if !(($name, $clock, $xres, $xsyncstart, $xsyncend, $xfres, $yres, $ysyncstart, $ysyncend, $yfres, $extra) = /^\s*modeline\s+"([^"]+)"\s+([0-9.]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*(.*)$/i); $flag = 1; # timing transformations, as described in the fb HOWTO $pixtime = int(1000000/$clock); $left = $xfres - $xsyncend; $right = $xsyncstart - $xres; $hsynclen = $xsyncend - $xsyncstart; $top = $yfres - $ysyncend; $bottom = $ysyncstart - $yres; $vsynclen = $ysyncend - $ysyncstart; # pick a virtual X and Y resolution $vxres = get_vxres($xres); if ($vxres < 0) { print STDERR "Could not guess a good virtual resolution for mode $name.\n"; print STDERR "Use the advanced options --rounding and --vxres.\n"; next; } $vyres = int($size/$vxres); # print out our entry print "mode \"$name\"\n"; print " geometry $xres $yres $vxres $vyres $depth\n"; print " timings $pixtime $left $right $top $bottom $hsynclen $vsynclen\n"; # handle extra options at the end of the modeline $extra =~ tr/A-Z/a-z/; @options = split/\s+/,$extra; foreach (@options) { if ($options_map{$_}) { print " $options_map{$_}\n"; } else { print " # unknown option: $_\n"; } } print "endmode\n\n"; } if (!$flag) { print STDERR "No modelines found.\n"; print STDERR "Make sure the file you specified was an XF86Config file and\n"; print STDERR "used the single-line Modeline format.\n\n"; print STDERR "Use \"$0 --help\" for help.\n"; } sub get_vxres { foreach (@possible_vxres) { return $_ if ($_ >= $_[0] && ($_ % $rounding) == 0); } return -1; } sub usage { print STDERR "$_[0]\n" if ($_[0]); print STDERR "$0 [OPTION] [FILES]\n\n"; print STDERR " -d,--depth depth use a certain display depth (default is 8)\n"; print STDERR " -h,--help what you see here\n\n"; print STDERR "Advanced options:\n"; print STDERR " -r,--rounding div vxres divisor (default is 128)\n"; print STDERR " -x,--vxres X,X,X,... extra possible vxres values\n\n"; print STDERR "[FILES] refers to one or more XF86Config files. Note that\n"; print STDERR "all modelines must be in single-line format.\n\n"; print STDERR "Example:\n"; print STDERR " $0 -d 16 /etc/X11/XF86Config\n"; exit 0; }