Main things added are custom frame dropping for VDPAU to work around
the display FPS limit, frame timing adjustment to avoid jitter when
video frame times keep falling near vsyncs, and use of VDPAU's timing
feature to keep one future frame queued in advance.
NVIDIA's VDPAU implementation refuses to change the displayed frame
more than once per vsync. This set a limit on how much video could be
sped up, and caused problems for nearly all videos on low-FPS video
projectors (playing 24 FPS video on a 24 FPS projector would not work
reliably as MPlayer may need to slightly speed up the video for AV
sync). This commit adds a framedrop mechanism that drops some frames
so that no more than one is sent for display per vsync. The code
tries to select the dropped frames smartly, selecting the best one to
show for each vsync. Because of the timing features needed the drop
functionality currently does not work if the correct-pts option is
disabled.
The code also adjusts frame timing slightly to avoid jitter. If you
for example play 24 FPS video content on a 72 FPS display then
normally a frame would be shown for 3 vsyncs, but if the frame times
happen to fall near vsyncs and change between just before and just
after then there could be frames alternating between 2 and 4
vsyncs. The code changes frame timing by up to one quarter vsync
interval to avoid this.
The above functionality depends on having reliable vsync timing
information available. The display refresh rate is not directly
provided by the VDPAU API. The current code uses information from the
XF86VidMode extension if available; I'm not sure how common cases
where that is inaccurate are. The refresh rate can be specified
manually if necessary.
After the changes in this commit MPlayer now always tries to keep one
frame queued for future display using VDPAU's internal timing
mechanism (however no more than 50 ms to the future). This should make
video playback somewhat more robust against timing inaccuracies caused
by system load.
Clean up code related to frame buffering and generate pts information
also for the next frame in the output queue. The timing information
will be used in a following framedrop patch.
This commit adds one frame of buffering delay in vo_vdpau and
increases the number of buffered vdpau video surfaces from 3 to 4. The
delay increase makes it more important to fix remaining code in
MPlayer that doesn't deal well with filter/VO delay; OTOH it should
help any decoding/filtering parallelism in the underlying VDPAU
implementation as now filtering a frame for display can happen while
the next one is being decoded.
There's apparently a new OpenAL version which contains some constructor
code that runs at startup if the binary links with OpenAL at all (even
if no OpenAL function is called). This startup code does some
nontrivial interaction with ALSA libraries and as a side effect this
idiocy also breaks test binaries run by configure, causing features to
not be detected. Avoid the problems by disabling OpenAL by default.
It's not a particularly good audio output method anyway and there are
almost certainly fewer users who would benefit from it automatically
being available than users who'd suffer from some kind of breakage
caused by it.
As part of merging subtitle-in-terminal changes make
update_subtitles() only clear existing subtitles if called with the
reset argument, and not try to set new ones. Later calls should set
the needed new subtitles, and this change avoids some problems with
trying to set subtitles when mp_property_sub() in command.c gets
called from initialization code before full initialization.
all other filters that should apply to it
(fix PEBCAK as seen on #mplayer)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29752 b3059339-0415-0410-9bf9-f77b7e298cf2
except for the last chunk.
Should fix high CPU usage reported e.g. here: http://bugs.gentoo.org/show_bug.cgi?id=286020
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29748 b3059339-0415-0410-9bf9-f77b7e298cf2
otherwise we might end up at some random position (where lavf last ended
up while trying to build the index).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29741 b3059339-0415-0410-9bf9-f77b7e298cf2
violation (thus making gcc 4.4.x compile the code correctly) and allows to get
rid of some casts at the expense of making the code less clear.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29733 b3059339-0415-0410-9bf9-f77b7e298cf2
This still needs some additional checking that subtitle selection via dvdnav works.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29732 b3059339-0415-0410-9bf9-f77b7e298cf2
This does not yet seem to work for audio-only files, subtitles seem
not to be loaded then.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29726 b3059339-0415-0410-9bf9-f77b7e298cf2
AF_CONTROL_PLAYBACK_SPEED), put them in-order again and add a bit of padding in-between.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29718 b3059339-0415-0410-9bf9-f77b7e298cf2