mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 08:12:17 +00:00
d9cea6a98b
Create a single large bitmap surface for EOSD objects and pack all the bitmap rectangles inside that. The old code created a separate bitmap surface for every bitmap and then resized the cached surfaces when drawing later frames. The number of surfaces could be large (at least about 2000 for one sample subtitle script) so this was very inefficient. The old code also used a very simple strategy for pairing existing surfaces to new bitmaps; it could resize tiny surfaces to hold large glyphs while using existing large surfaces to hold tiny glyphs and as a result allocate arbitrarily much more total surface area than was necessary. The new code only supports using a single surface, freeing it and allocating a larger one if necessary. It would be possible to support multiple surfaces in case of hitting the maximum bitmap surface size, but I'll wait to see if that is actually needed before implementing it. NVIDIA seems to support bitmap surface sizes up to 8192x8192, so it would take either a really pathological subtitle script rendered at a high resolution or an implementation with lower limits before multiple surfaces would be necessary. The packing algorithm should successfully pack the bitmaps into a surface of size w*h as long as the total area of the bitmaps does not exceed 16/17 (w-max_bitmap_width)*(h-max_bitmap_height), so there should be no totally catastrophic failure cases. The 16/17 factor comes from approximate sorting used in the algorithm. On average performance should be better than this minimum guaranteed level. |
||
---|---|---|
.. | ||
realcodecs | ||
aconvert.sh | ||
alaw-gen.c | ||
asfinfo.c | ||
avi-fix.c | ||
avisubdump.c | ||
binary_codecs.sh | ||
bmovl-test.c | ||
calcbpp.pl | ||
checktree.sh | ||
compare.c | ||
countquant.pl | ||
divx2svcd.sh | ||
dump_mp4.c | ||
dvd2divxscript.pl | ||
edgedetect.fp | ||
edgeenh.fp | ||
emboss.fp | ||
fastmemcpybench.c | ||
mencvcd.sh | ||
midentify.sh | ||
modify_reg.c | ||
movinfo.c | ||
mpconsole.sh | ||
mphelp_check.py | ||
mplmult.sh | ||
netstream.c | ||
plotpsnr.pl | ||
psnr-video.sh | ||
qepdvcd.sh | ||
README | ||
subedit.pl | ||
subrip.c | ||
subsearch.sh | ||
vdpau_functions.py | ||
vfw2menc.c | ||
vivodump.c | ||
vobshift.py | ||
w32codec_dl.pl | ||
wma2ogg.pl |
README for the TOOLS directory ============================== Preamble -------- In this directory you can find some nice scripts and code that makes using MPlayer and MEncoder easier, for example scripts for DVD track encoding in three pass mode or creating SVCDs from a movie. FIXME: Document the following tools: bmovl-test MPlayer scripts in the TOOLS dir -------------------------------- edgedetect.fp, emboss.fp Author: Reimar Döffinger Description: Examples of custom fragment program for OpenGL video out driver Usage: mplayer -vo gl:yuv=4:customprog=edgedetect.fp midentify.sh Author: Tobias Diedrich Description: Runs 'mplayer -identify' for all arguments while preventing video window flashing. Usage: midentify.sh file1 [file2 ...] mpconsole.sh Author: Rich Felker Description: Script to run MPlayer on the console (fbdev/mga_vid/etc.) without the console text and/or flashing cursor getting in the way. Usage: mpconsole.sh [mplayer options] mplmult.sh Author: Reimar Döffinger Description: Example how to output video on multiple windows in sync. Might be even more useful in combination with -vo ggi to distribute the video arbitrarily. Usage: mplmult.sh <n> <options> n Number of MPlayer instances that display the video. options Any options you would pass to MPlayer, more than one file will usually not work. subsearch.sh Author: Alex Beregszaszi Description: Collects subtitle files from the directory given as argument ('.' if none is given) and its subdirectories and prints them as a comma separated list to stdout. Usage: subsearch.sh [directory] mplayer -sub `subsearch.sh` movie wma2ogg.pl Author: Peter Simon Description: Converts WMA files to Ogg or MP3. Usage: wma2ogg [options] <-f FILE1 | -f FILE2 ... | -a> -f, -file filename -a converts all WMA files in the current directory -t output filetype (ogg, mp3) [default=ogg] -lame I wanna use L.A.M.E. sure enough! -br bitrate (kb/s) [default=from the WMA] -del remove WMA file(s) after the transcoding MEncoder scripts in the TOOLS dir --------------------------------- divx2svcd.sh Author: Miklos Vajna Description: A simple utility that creates an SVCD from a video in an AVI container. Usage: divx2svcd.sh <input_avi> [options] see 'divx2svcd.sh -h' for more info mencvcd.sh Author: Jürgen Hammelmann Description: Converts DVD (or anything else that MPlayer plays) to (S)VCD Usage: mencvcd.sh <basename> [mencvcd.sh options] [mplayer options] see 'mencvcd.sh -h' for more info Note: Requires MPlayer, mjpegtools, VCDImager, cdrdao, and optionally LAME, tooLAME and SoX. dvd2divxscript.pl Author: Florian Schilhabel Description: Yet another DVD to divx helper script. This script encodes a DVD track in three pass mode to MPEG-4 with libavcodec. Optionally it writes the resulting movie file to CD-ROM the corresponding audio track to MP3. It can also shut down the computer when it finishes. If you like, you can watch the MEncoder output on /dev/tty8. Usage: --help show help --abr (AudioBitRate) Please enter the desired bitrate this can be either [96|128|192] kbit/sec (default: 128). --lang Specify the Language of the audio track this can be for example <en> or <de> (default: <de>). --dvd Specify the DVD track you want to encode. --cdsize Specify the size of your CD-ROM (default: 700MB). --shutdown Shutdown the system, when the encoding process has finished. Needs appropriate privileges. --out Specify the name of your encoded movie. The file extension will be appended automatically. --writecd Takes the newly created movie and writes it to a CD-ROM. --writedev cdrecord device identifier, for example 0,1,0 --speed writing speed (default: 4) --dvd-device device to pull the video off (default: /dev/dvd) aconvert.sh Author: Jonas Jermann Description: A hack to allow MEncoder to read respectively encode from audio only files. Usage: aconvert.sh <"input file"> <"output file"> <"options"> If no options are specified the following is assumed: -oac lavc -lavcopts acodec=mp3:abitrate=192 Note: The script is probably bash dependent and it's just a quick hack, feel free to improve it (or much better: fix MEncoder ;). qepdvcd.sh Author: Reynaldo H. Verdejo Pinochet Description: converter from any supported format to VCD/SVCD PAL/NTSC Usage: qepdvcd.sh file <options> Run with no arguments to see the list of options. Note: You will need vcdimager/cdrecord to master/burn the resulting files. Tech scripts in the TOOLS dir ----------------------------- calcbpp.pl Author: Moritz Bunkus Description: A script that calculates the $bpp for a movie, mentioned in DOCS/tech/encoding-tips.txt, see that document for more info. Usage: calcbpp.pl <resolution> <aspect ratio> <bitrate> <fps> resolution: the cropped but unscaled resolution (use '-vf cropdetect') aspect ratio: the encoded aspect ratio. All DVDs come at 720x576 but contain a flag that tells the player wether it should display the DVD at an aspect ratio of 4/3 (1.333) or at 16/9 (1.777). Have a look at MPlayer's output - there's something about 'prescaling'. That's what you are looking for. bitrate: the video bitrate in kbit/s fps: the fps example: calcbpp.pl 720x440 16/9 896 25 countquant.pl Author: Moritz Bunkus Description: Counts the quantizers used for the encoding, mentioned in DOCS/tech/encoding-tips.txt, see that document for more info. Usage: countquant.pl < divx2pass.log It will print out which quantizer was used how often. If you see that e.g. the lowest quantizer (vqmin=2) gets used for > 95% of the frames then you can safely increase your picture size. plotpsnr.pl Author: Jonas Jermann Description: Draw PSNR log graphs using gnuplot. Usage: plotpsnr.pl [options] <file> -h, --help Display this help message -quant Display quantizers -size Display size -psnr Display PSNR -iframes Display I-frames -pframes Display P-frames -bframes Display B-frames -aframes Display all frames in different colors -cmp <file2> Compare two files -qs <style> Quantizer style -ss <style> Size style -ps <style> PSNR style Default: -quant -size -psnr -qs "p" -ss "i" -ps "p" Note: Requires gnuplot. Comparison is based on file2. Comparison assumes that the frame numbers of both files fit. psnr-video.sh Author: Matthias Wieser Description: Calculates the PSNR between two existing video files. The PSNR is calculated frame by frame. Also prints the overall PSNR. The script can be used to: * Compare different softwarescalers (should I use -sws 1 or -sws 2 ?) * Compare different resolutions (is it better to scale down to 640x360 or to 560x320) * Compare different deinterlacers * Compare different video codecs * Compare video filters (is it better to use -vf hqdn3d or lavcopts:nr=400) * [...] Usage: psnr-video.sh <file1> <file2> [<frames>] [<options1>] [<options2>] <file1> and <file2> are the video files for which the PSNR should be calculated. [<frames>] is the number of frames to process, starting from frame 1. [<options1>] are additional MPlayer options for <file1> [<options2>] are additional MPlayer options for <file2> A file called ./psnr.dat will be created with the following content: File;Y;Cb;Cr 00000001.ppm;34.23;39.54;40.06;35.426 00000002.ppm;33.03;38.71;39.26;34.271 00000003.ppm;33.45;38.91;39.28;34.655 00000004.ppm;32.72;38.69;38.85;33.972 [...] 00000247.ppm;35.55;40.84;42.15;36.785 PSNR:;35.9887 Note: This script relies on the the tool "pnmpsnr" for the frame-by-frame PSNR calculation. Be aware that psnr-video.sh needs a lot of temporary space in /tmp/. asfinfo Author: Arpi Description: a simple ASF header display program Usage: asfinfo <filename.asf> Note: Also see MPlayer's -identify option. avi-fix Author: Arpi Description: A simple tool to fix chunk sizes in RIFF AVI files. Usage: avi-fix [-fix] <badfile.avi> Note: It does not check or fix the index, to do this use 'mencoder -forceidx -oac copy -ovc copy'. checktree.sh Author: Ivo van Poorten Description: Check the source tree for anomalies. Usage: checktree.sh -help Note: This script is meant for developers to check the current source tree and/or the patches they are working on. mphelp_check.py Author: Uoti Urpala Description: Check console message translations for common errors. Usage: mphelp_check.py [--missing] <master file> <files to check> Note: Compares MPlayer translation files against a master file and reports conflicting arguments, extra strings not present in the base file and (optionally) missing strings. cpuinfo Author: Jürgen Keil Description: the prototype ../cpuinfo.c Note: Used by configure to emulate /proc/cpuinfo on non-Linux systems. dump_mp4 Author: Arpi Description: MPEG4-ES stream inspector, dumps the stream startcodes. fastmemcpybench Author: Felix Bünemann Description: benchmark/testbed for fastmemcpy stuff Note: Also see fastmem.sh. movinfo Author: Arpi Description: Show QuickTime MOV file structure. Usage: movinfo <filename.mov> vivodump Author: Arpi Description: Dump H.263 frame headers from VIVO files. Usage: vivodump <input_file> <output_file> Miscellaneous scripts in the TOOLS dir -------------------------------------- subedit.pl Author: Michael Klepikov Description: A script for pipelined editing of subtitle files. Usage: subedit.pl [switches] -if,--input-format <fmt> input format; supported: SRT (default: SRT) -of,--output-format <fmt> output format; supported: SRT (default: input format) -s,--shift <time> shift all subtitles by <time> (format: [-]hh:mm:ss,fraction) -c,--scale <time> scale by adding <time> to overall duration -f,--split-from <time> drop subtitles that end before <time> -t,--split-to <time> drop subtitles that start after <time> (will truncate timing if it overlaps a boundary) -r,--renumber renumber SRT subtitles in output -d,--debug enable debug output -h,--help help message w32codec_dl.pl Author: Tom Lees Description: This script will use the Windows Media Player codec download infrastructure to aquire the codecs listed in codecs.conf and put them in a directory named "codecs/" below the current directory. Usage: w32codec_dl.pl <codecs.conf location> Note: You will need the libwww-perl stuff and the cabextract utility which can be found at http://www.kyz.uklinux.net/cabextract.php3. binary_codecs.sh Author: Andrea Menucci, thuglife Description: Downloads binary codecs from mplayerhq.hu and installs them on a Debian system. Usage: binary_codecs.sh install binary_codecs.sh uninstall vobshift.py Author: Gábor Farkas Description: Adjust the time-info in vobsub files Usage: vobshift.py in.idx out.idx +8.3 Will shift the time by 8.3 seconds subrip.c Author: Kim Minh Kaplan Description: Transform VOBsub subtitles into Subrip text subtitles using GOCR/JOCR. Usage: subrip <vobsub basename> [subid [output filename] ] Note: Requires at least JOCR/GOCR 0.37. You will have to change the 'vobsub_id' value if you want a subtitle different from number 0. Hint: You can view the subtitle that is being decoded with "display subtitle-*.pgm". alaw-gen.c Author: Arpi Description: Generates alaw/ulaw tables. Note: Created to work around a past license issue, no longer useful. avisubdump.c Author: Tobias Diedrich Description: Dumps vobsub soft subtitles streams embedded in AVI files. Usage: avisubdump <movie.avi> vfw2menc.c Author: Gianluigi Tiesi Description: Creates a codec settings file from the Video for Windows codecs found in the mplayer codec packs. Usage: vfw2menc -f <fourcc> -d <codec.dll> -s <settingsfile.mcf> -h|--help - displays this help -d|--driver filename - dll or drv to load -f|--fourcc fourcc - fourcc of selected driver -s|--save filename - save settings to file -c|--check filename - load and show setting in filename -v|--view - displays the config dialog and do nothing Notes: Works on Windows/Linux x86 only. modify_reg.c Author: Alan Nisota Description: Modifies registry file (usually ~/.mplayer/registry) Usage: modify_reg -r <registry_file> -l modify_reg -r <registry_file> -k <key> [-d|-v <value>[-t <type>]] -r|--registry - path to registry file -l|--list - shows all keys and values -k|--key - registry key -d|--del - delete key -v|--value - new value for key -t|--type - key type: string (default) or dword Notes: Necessary to use CoreAVC with MPlayer compare.c Author: Michael Niedermayer Description: Simple file compare program that detects the number of rounding errors and dies if the error is too large. Usage: compare <file1> <file2> realcodecs/ Author: miscellaneous Description: Wrappers for Linux Real binary codecs used to analyze, alter and dump the data flow between RealPlayer and its codecs. Usage: - Set the path to the RealPlayer codecs directory in the C files. - Run 'make realcodecs'. - Rename the original codecs to match the names expected in the wrapper sources. The default is to give them a "real" prefix, e.g. realcook.so.6.0. - Put the wrappers in the RealPlayer codecs directory. Notes: Known to work at least on Linux x86 with RealPlayer8. netstream - access remote streams --------------------------------- NOTE: netstream does not link at the moment - help welcome. netstream allows you to access most MPlayer stream types from a remote host. The main purpose of this feature is to make it possible to directly use the CD or DVD drive of another computer on the network (provided you have the required bandwidth). On the downside some stream types (currently TV and MF) are not usable remotely because they are implemented at the demuxer level. Be aware that currently the server is not secure at all. Compile the server by running 'make netstream' and then copy the netstream binary to the right place on your system (usually /usr/local/bin on Unix). Start the netstream server on the computer you intend to access remotely. There are no command line arguments. Play the second track of a VCD on the server with: mplayer -cache 5000 mpst://servername/vcd://2 Access files on this server with: mplayer -cache 5000 mpst://servername//usr/local/movies/lol.avi Note that paths which do not start with a / will be interpreted as relative to the directory where the server is running. The '-cache' option is not needed but highly recommended.