2009-02-20, Friday :: Video Acceleration and You

posted by Compn

There are several ways to speed up the playback of 1080 H.264 files in MPlayer.

First is to use the newly added VDPAU output. It allows the newer Nvidia video cards to decode the video without using much CPU. It is in SVN MPlayer (Nvidia binary driver 180.37 or newer required), you can find known bugs and report bugs HERE. (Linux, Solaris and FreeBSD only) How to get the SVN version is described on the download page and snapshot tarballs are available as well.

Second is to use MPlayer with the experimental multithreaded FFmpeg-mt branch, which allows you to use multiple cores/CPU. (all OS and CPU supported)

To install, copy and paste this line: git clone git://repo.or.cz/mplayer && cd mplayer && git checkout origin/mt && git submodule init && git submodule update && ./configure && make && make install To enable threading run mplayer -lavdopts threads=N file.mkv where N is the number of threads you want to use. NOTE: FFmpeg-mt has problems with packed b-frames.

A Windows build of MPlayer using FFmpeg-mt can be found at http://kovensky.project357.com.

Third is to use the multithreaded CoreAVC codec with the CoreAVC-for-linux project. The CoreAVC decoder costs $15 USD. (Linux ONLY)(Windows users only need this PATCH) http://www.coreavc.com/index.php?option=com_content&task=category&sectionid=4&id=21&Itemid=59

Fourth, FFmpeg has added some optimizations from the x264 project. To fully utilize these you will need to make sure a recent version of YASM is installed and detected by the latest SVN MPlayer when compiling. (32bit x86 CPU only!)

Fifth, using -lavdopts skiploopfilter=all:fast=1 may cause artifacts, but will allow you to play larger files in realtime. (all OS and CPU supported) (use -lavdopts skipframe=nonref:skiploopfilter=all:fast=1 for even more speedup, skipframe also works with VDPAU.)

There is also a rejected PATCH which adds support for the new multithreaded binary VC-1/WMV3 codec.


http://www.mplayerhq.hu/DOCS/tech/slave.txt

@@SLAVE MODE PROTOCOL


The -slave option switches on slave mode, in which MPlayer works as a backend for other programs. Instead of intercepting keyboard events, MPlayer will read commands separated by a newline (\n) from stdin.

To try slave mode out by hand, run

 mplayer -slave -quiet <movie>

and type slave commands into the console window.

You can also use a fifo file (named pipe):

 mkfifo </tmp/fifofile>
 mplayer -slave -input file=</tmp/fifofile> <movie>

Most slave mode commands are equivalent to command line options, though not necessarily under the same name. Detailed descriptions can be found in the man page.

All commands can be prefixed with one of "pausing ", "pausing_keep ", or "pausing_toggle ". "pausing " tells MPlayer to pause as soon as possible after processing the command. "pausing_keep " tells MPlayer to do so only if it was already in paused mode. "pausing_toggle " tells MPlayer to do so only if it was not already in paused mode. Please note that "as soon as possible" can be before the command is fully executed. As a temporary hack, there is also the _experimental_ "pausing_keep_force " prefix, with which MPlayer will not exit the pause loop at all. Like this you can avoid the "frame stepping" effect of "pausing_keep " but most commands will either not work at all or behave in unexpected ways. For "set_mouse_pos" and "key_down_event", "pausing_keep_force" is the default since other values do not make much sense for them.

Available commands ('mplayer -input cmdlist' will print a list):

alt_src_step <value> (ASX playlist only)

   When more than one source is available it selects the next/previous one.

audio_delay <value> abs

   Set/adjust the audio delay.
   If abs is not given or is zero, adjust the delay by <value> seconds.
   If abs is nonzero, set the delay to <value> seconds.

brightness <value> abs

   Set/adjust video parameters.
   If abs is not given or is zero, modifies parameter by <value>.
   If abs is non-zero, parameter is set to <value>.
   <value> is in the range -100, 100.

change_rectangle <val1> <val2>

   Change the position of the rectangle filter rectangle.
       <val1>
           Must be one of the following:
               0 = width
               1 = height
               2 = x position
               3 = y position
       <val2>
           If <val1> is 0 or 1:
               Integer amount to add/subtract from the width/height.
               Positive values add to width/height and negative values
               subtract from it.
           If <val1> is 2 or 3:
               Relative integer amount by which to move the upper left
               rectangle corner. Positive values move the rectangle
               right/down and negative values move the rectangle left/up.

dvb_set_channel <channel_number> <card_number>

   Set DVB channel.

dvdnav <button_name>

   Press the given dvdnav button.
       up
       down
       left
       right
       menu
       select
       prev
       mouse

edl_mark

   Write the current position into the EDL file.

frame_drop value

   Toggle/set frame dropping mode.

get_audio_bitrate

   Print out the audio bitrate of the current file.

get_audio_codec

   Print out the audio codec name of the current file.

get_audio_samples

   Print out the audio frequency and number of channels of the current file.

get_file_name

   Print out the name of the current file.

get_meta_album

   Print out the 'Album' metadata of the current file.

get_meta_artist

   Print out the 'Artist' metadata of the current file.

get_meta_comment

   Print out the 'Comment' metadata of the current file.

get_meta_genre

   Print out the 'Genre' metadata of the current file.

get_meta_title

   Print out the 'Title' metadata of the current file.

get_meta_track

   Print out the 'Track Number' metadata of the current file.

get_meta_year

   Print out the 'Year' metadata of the current file.

get_percent_pos

   Print out the current position in the file, as integer percentage [0-100).

get_property <property>

   Print out the current value of a property.

get_sub_visibility

   Print out subtitle visibility (1 == on, 0 == off).

get_time_length

   Print out the length of the current file in seconds.

get_time_pos

   Print out the current position in the file in seconds, as float.

get_vo_fullscreen

   Print out fullscreen status (1 == fullscreened, 0 == windowed).

get_video_bitrate

   Print out the video bitrate of the current file.

get_video_codec

   Print out the video codec name of the current file.

get_video_resolution

   Print out the video resolution of the current file.

screenshot <value>

   Take a screenshot. Requires the screenshot filter to be loaded.
       0 Take a single screenshot.
       1 Start/stop taking screenshot of each frame.

gui_about

   GUI actions

key_down_event <value>

   Inject <value> key code event into MPlayer.

loadfile <file|url> <append>

   Load the given file/URL, stopping playback of the current file/URL.
   If <append> is nonzero playback continues and the file/URL is
   appended to the current playlist instead.

loadlist <file> <append>

   Load the given playlist file, stopping playback of the current file.
   If <append> is nonzero playback continues and the playlist file is
   appended to the current playlist instead.

loop <value> abs

   Adjust/set how many times the movie should be looped. -1 means no loop,
   and 0 forever.

menu <command>

   Execute an OSD menu command.
       up     Move cursor up.
       down   Move cursor down.
       ok     Accept selection.
       cancel Cancel selection.
       hide   Hide the OSD menu.

set_menu <menu_name>

   Display the menu named <menu_name>.

mute value

   Toggle sound output muting or set it to value when value >= 0
   (1 == on, 0 == off).

osd level

   Toggle OSD mode or set it to level when level >= 0.

osd_show_property_text <string> duration level

   Show an expanded property string on the OSD, see -playing-msg for a
   description of the available expansions. If duration is >= 0 the text
   is shown for duration ms. level sets the minimum OSD level needed
   for the message to be visible (default: 0 - always show).

osd_show_text <string> duration level

   Show <string> on the OSD.

panscan <-1.0 - 1.0> | <0.0 - 1.0> <abs>

   Increase or decrease the pan-and-scan range by <value>, 1.0 is the maximum.
   Negative values decrease the pan-and-scan range.
   If <abs> is != 0, then the pan-and scan range is interpreted as an
   absolute range.

pause

   Pause/unpause the playback.

frame_step

   Play one frame, then pause again.

pt_step <value> force

   Go to the next/previous entry in the playtree. The sign of <value> tells
   the direction.  If no entry is available in the given direction it will do
   nothing unless force is non-zero.

pt_up_step <value> force

   Similar to pt_step but jumps to the next/previous entry in the parent list.
   Useful to break out of the inner loop in the playtree.

quit value

   Quit MPlayer. The optional integer value is used as the return code
   for the mplayer process (default: 0).

radio_set_channel <channel>

   Switch to <channel>. The 'channels' radio parameter needs to be set.

radio_set_freq <frequency in MHz>

   Set the radio tuner frequency.

radio_step_channel <-1|1>

   Step forwards (1) or backwards (-1) in channel list. Works only when the
   'channels' radio parameter was set.

radio_step_freq <value>

   Tune frequency by the <value> (positive - up, negative - down).

seek <value> type

   Seek to some place in the movie.
       0 is a relative seek of +/- <value> seconds (default).
       1 is a seek to <value> % in the movie.
       2 is a seek to an absolute position of <value> seconds.

seek_chapter <value> type

   Seek to the start of a chapter.
       0 is a relative seek of +/- <value> chapters (default).
       1 is a seek to chapter <value>.

switch_angle <value>

   Switch to the angle with the ID value. Cycle through the
   available angles if value is omitted or negative.

set_mouse_pos <x> <y>

   Tells MPlayer the coordinates of the mouse in the window.
   This command doesn't move the mouse!

set_property <property> <value>

   Set a property.

speed_incr <value>

   Add <value> to the current playback speed.

speed_mult <value>

   Multiply the current speed by <value>.

speed_set <value>

   Set the speed to <value>.

step_property <property> value direction

   Change a property by value, or increase by a default if value is
   not given or zero. The direction is reversed if direction is less
   than zero.

stop

   Stop playback.

sub_alignment value

   Toggle/set subtitle alignment.
       0 top alignment
       1 center alignment
       2 bottom alignment

sub_delay <value> abs

   Adjust the subtitle delay by +/- <value> seconds or set it to <value>
   seconds when abs is nonzero.

sub_load <subtitle_file>

   Loads subtitles from <subtitle_file>.

sub_log

   Logs the current or last displayed subtitle together with filename
   and time information to ~/.mplayer/subtitle_log. Intended purpose
   is to allow convenient marking of bogus subtitles which need to be
   fixed while watching the movie.

sub_pos <value> abs

   Adjust/set subtitle position.

sub_remove value

   If the value argument is present and non-negative, removes the subtitle
   file with index value. If the argument is omitted or negative, removes
   all subtitle files.

sub_select value

   Display subtitle with index value. Turn subtitle display off if
   value is -1 or greater than the highest available subtitle index.
   Cycle through the available subtitles if value is omitted or less
   than -1. Supported subtitle sources are -sub options on the command
   line, VOBsubs, DVD subtitles, and Ogg and Matroska text streams.
   This command is mainly for cycling all subtitles, if you want to set
   a specific subtitle, use sub_file, sub_vob, or sub_demux.

sub_source source

   Display first subtitle from source. Here source is an integer:
   SUB_SOURCE_SUBS   (0) for file subs
   SUB_SOURCE_VOBSUB (1) for VOBsub files
   SUB_SOURCE_DEMUX  (2) for subtitle embedded in the media file or DVD subs.
   If source is -1, will turn off subtitle display. If source less than -1,
   will cycle between the first subtitle of each currently available sources.

sub_file value

   Display subtitle specifid by value for file subs. The value is
   corresponding to ID_FILE_SUB_ID values reported by '-identify'.
   If value is -1, will turn off subtitle display. If value less than -1,
   will cycle all file subs.

sub_vob value

   Display subtitle specifid by value for vobsubs. The value is
   corresponding to ID_VOBSUB_ID values reported by '-identify'.
   If value is -1, will turn off subtitle display. If value less than -1,
   will cycle all vobsubs.

sub_demux value

   Display subtitle specifid by value for subtitles from DVD or embedded
   in media file. The value is corresponding to ID_SUBTITLE_ID values
   reported by '-identify'. If value is -1, will turn off subtitle display.
   If value less than -1, will cycle all DVD subs or embedded subs.

sub_scale <value> abs

   Adjust the subtitle size by +/- <value> or set it to <value> when abs
   is nonzero.

vobsub_lang

   This is a stub linked to sub_select for backwards compatibility.

sub_step <value>

   Step forward in the subtitle list by <value> steps or backwards if <value>
   is negative.

sub_visibility value

   Toggle/set subtitle visibility.

forced_subs_only value

   Toggle/set forced subtitles only.

switch_audio value (currently MPEG*, AVI, Matroska and streams handled by libavformat)

   Switch to the audio track with the ID value. Cycle through the
   available tracks if value is omitted or negative.

switch_angle value (DVDs only)

   Switch to the DVD angle with the ID value. Cycle through the
   available angles if value is omitted or negative.

switch_ratio value

   Change aspect ratio at runtime. value is the new aspect ratio expressed
   as a float (e.g. 1.77778 for 16/9).
   There might be problems with some video filters.

switch_title value (DVDNAV only)

   Switch to the DVD title with the ID value. Cycle through the
   available titles if value is omitted or negative.

switch_vsync value

   Toggle vsync (1 == on, 0 == off). If value is not provided,
   vsync status is inverted.

teletext_add_digit <value>

   Enter/leave teletext page number editing mode and append given digit to
   previously entered one.
   0..9 - Append apropriate digit. (Enables editing mode if called from normal
          mode, and switches to normal mode when third digit is entered.)
   -    - Delete last digit from page number. (Backspace emulation, works only
          in page number editing mode.)

teletext_go_link <1-6>

   Follow given link on current teletext page.

tv_start_scan

   Start automatic TV channel scanning.

tv_step_channel <channel>

   Select next/previous TV channel.

tv_step_norm

   Change TV norm.

tv_step_chanlist

   Change channel list.

tv_set_channel <channel>

   Set the current TV channel.

tv_last_channel

   Set the current TV channel to the last one.

tv_set_freq <frequency in MHz>

   Set the TV tuner frequency.

tv_step_freq <frequency offset in MHz>

   Set the TV tuner frequency relative to current value.

tv_set_norm <norm>

   Set the TV tuner norm (PAL, SECAM, NTSC, ...).

tv_set_brightness <-100 - 100> abs

   Set TV tuner brightness or adjust it if abs is set to 0.

tv_set_contrast <-100 -100> abs

   Set TV tuner contrast or adjust it if abs is set to 0.

tv_set_hue <-100 - 100> abs

   Set TV tuner hue or adjust it if abs is set to 0.

tv_set_saturation <-100 - 100> abs

   Set TV tuner saturation or adjust it if abs is set to 0.

use_master

   Switch volume control between master and PCM.

vo_border value

   Toggle/set borderless display.

vo_fullscreen value

   Toggle/set fullscreen mode.

vo_ontop value

   Toggle/set stay-on-top.

vo_rootwin value

   Toggle/set playback on the root window.

volume <value> abs

   Increase/decrease volume or set it to <value> if abs is nonzero.

The following commands are really only useful for OSD menu console mode:

help

   Displays help text, currently empty.

exit

   Exits from OSD menu console. Unlike 'quit', does not quit MPlayer.

hide

   Hides the OSD menu console. Clicking a menu command unhides it. Other
   keybindings act as usual.

run <value>

   Run <value> as shell command. In OSD menu console mode stdout and stdin
   are through the video output driver.

Available properties:

name type min max get set step comment =================================================================

osdlevel int 0 3 X X X as -osdlevel speed float 0.01 100 X X X as -speed loop int -1 X X X as -loop pause flag 0 1 X 1 if paused, use with pausing_keep_force filename string X file playing wo path path string X file playing demuxer string X demuxer used stream_pos pos 0 X X position in stream stream_start pos 0 X start pos in stream stream_end pos 0 X end pos in stream stream_length pos 0 X (end - start) chapter int 0 X X X select chapter chapters int X number of chapters angle int 0 X X X select angle length time X length of file in seconds percent_pos int 0 100 X X X position in percent time_pos time 0 X X X position in seconds metadata str list X list of metadata key/value metadata/* string X metadata values volume float 0 100 X X X change volume balance float -1 1 X X X change audio balance mute flag 0 1 X X X audio_delay float -100 100 X X X audio_format int X audio_codec string X audio_bitrate int X samplerate int X channels int X switch_audio int -2 255 X X X select audio stream switch_angle int -2 255 X X X select DVD angle switch_title int -2 255 X X X select DVD title fullscreen flag 0 1 X X X deinterlace flag 0 1 X X X ontop flag 0 1 X X X rootwin flag 0 1 X X X border flag 0 1 X X X framedropping int 0 2 X X X 1 = soft, 2 = hard gamma int -100 100 X X X brightness int -100 100 X X X contrast int -100 100 X X X saturation int -100 100 X X X hue int -100 100 X X X panscan float 0 1 X X X vsync flag 0 1 X X X video_format int X video_codec string X video_bitrate int X width int X "display" width height int X "display" height fps float X aspect float X switch_video int -2 255 X X X select video stream switch_program int -1 65535 X X X (see TAB default keybind) sub int -1 X X X select subtitle stream sub_source int -1 2 X X X select subtitle source sub_file int -1 X X X select file subtitles sub_vob int -1 X X X select vobsubs sub_demux int -1 X X X select subs from demux sub_delay float X X X sub_pos int 0 100 X X X subtitle position sub_alignment int 0 2 X X X subtitle alignment sub_visibility flag 0 1 X X X show/hide subtitles sub_forced_only flag 0 1 X X X sub_scale float 0 100 X X X subtitles font size tv_brightness int -100 100 X X X tv_contrast int -100 100 X X X tv_saturation int -100 100 X X X tv_hue int -100 100 X X X teletext_page int 0 799 X X X teletext_subpage int 0 64 X X X teletext_mode flag 0 1 X X X 0 - off, 1 - on teletext_format int 0 3 X X X 0 - opaque,

                                                         1 - transparent, 
                                                         2 - opaque inverted,
                                                         3 - transp. inv.

teletext_half_page int 0 2 X X X 0 - off, 1 - top half,

                                                         2- bottom half

@@


http://en.wikipedia.org/wiki/VDPAU

VDPAU From Wikipedia, the free encyclopedia Jump to: navigation, search

VDPAU (Video Decode and Presentation API for Unix) is an API designed by NVIDIA for its GeForce 8 series and later GPU hardware, targeted at the X Window System on Unix operating-systems (including Linux, FreeBSD, and Solaris).123 This VDPAU API allows video programs to offload portions of the video decoding process and video post-processing to the GPU video-hardware.

Currently, the portions designed to be offloaded by VDPAU onto the GPU are motion compensation (mo comp), inverse discrete cosine transform (iDCT) and VLD (Variable-Length Decoding) for MPEG-1, MPEG-2, MPEG-4 AVC (H.264), VC-1, and WMV3/WMV9 encoded videos.1

VDPAU is the X Window System equivalent of the Microsoft's DirectX Video Acceleration (DxVA) API for Windows.1 Contents hide

   * 1 Device drivers
   * 2 Software supporting VDPAU
   * 3 See also
   * 4 References
   * 5 External links

edit Device drivers

Each hardware video GPU capable of VDPAU video acceleration requires a X11 software device driver to enable these features. Currently only second generation of PureVideo HD bit-stream processor in some of NVIDIA's GeForce 8 series and later graphics cards hardware that has support since the Beta device driver version 180.06.1 Unsupported hardware from the GeForce 8 series includes the 8800GTS 320/640MB editions and the 8800GTX. Later cards based on the G9x series cores eg the 8400GS and the 8800GTS 512mb (G92 core) are supported. Nvidia currently has no plans to introduce support for the unsupported hardware.4

edit Software supporting VDPAU

   * MythTV (Linux)5
   * Xine (Linux)6
   * MPlayer (Linux)
   * VLC media player (Linux)7
   * FFmpeg (Linux)8
   * XBMC Media Center (Linux)91011

VDPAU can be used as a backend for the Video Acceleration API (VA API); so any software that supports VA API also supports VDPAU.12

edit See also

   * PureVideo - the bit-stream technology from NVIDIA used in their graphics chips to accelerate video decoding with VDPAU.
   * DirectX Video Acceleration (DxVA) - the VDPAU equivalent API for Microsoft Windows operating-system.
   * X-Video Bitstream Acceleration (XvBA) - AMD's competing API for Linux/UNIX operating-system.
   * Video Acceleration API (VA API) - an alternative video acceleration API for Linux/UNIX operating-system.
   * X-Video Motion Compensation (XvMC) API - an alternative video acceleration API for Linux/UNIX operating-system.