[MPlayer-dev-eng] [PATCH][RESEND] XV page flipping sync
Joey Parrish
joey at nicewarrior.org
Mon Jun 21 02:26:18 CEST 2004
Hello,
This mail has been sitting in my inbox for some time now. There was no
[PATCH] in the subject, which may be why it's not committed.
The original mail is from Piotr Neuman <sikkh at wp.pl> on Mar 14.
> On my desktop machine (Athlon XP 2000+, Gigabyte VIA VT266a, Radeon 9000,
> XFree 4.3, kernel 2.6.4-ck1) there were some problems in synchronization of
> video output (XV driver) - I could see for example 'tearing' (when double
> buffering was used).
> After some investigaton into it with help of Con Kolivas we were able to
> conclude that on my kernel/hw configuration, there is priviledge inversion
> issue (mplayer niced to +1 would work just fine). Such problems are usually
> caused by how programs are written.
> It boils down to the usage of XFlush() in libvo/vo_xv.c . The problem is that
> when synchronizing mplayer video buffer with X display, this function can't
> ensure that X server will be given timeslice soon enough.
> Mplayer can continue rendering of next frame/frames (when page flipping is
> used) after calling XFlush but X server may not be able to update screen on
> time, so few pages may be 'lost' (flipped at wrong time intervals beetween
> each other).
> My patch changes XFlush() call into XSync() which ensures that page will be
> flipped properly on time (ie. when using -double switch), becose this call
> waits till X has reported completion and gives free hand for system scheduler
> to assing timeslice for X (thanks to blocking mplayer - preempting it).
> Performance degradation is neglible, according to my limited testing. For
> example for Matrix mirage trailer (matrix_tr_mirage_480.mov) (sound output
> thru alsa1x):
> before patching:
> BENCHMARKs: VC: 13,746s VO: 1,344s A: 0,954s Sys: 43,573s = 59,617s
> BENCHMARK%: VC: 23,0570% VO: 2,2551% A: 1,5997% Sys: 73,0882% = 100,0000%
> after:
> BENCHMARKs: VC: 11,691s VO: 4,802s A: 0,912s Sys: 42,216s = 59,621s
> BENCHMARK%: VC: 19,6089% VO: 8,0539% A: 1,5296% Sys: 70,8077% = 100,0000%
> With this change the output is synchronized very well, even though mplayer
> uses usleep() timing (note that 2.6 kernels have clock set to 1000Hz, so
> using rtc is uneceseary - A-V sync is ~ +- 0,005 at worst). The issue of
> prority inversion is gone.
> The patch also contains removal of unneceseary calls to XFlush function just
> before XSync is called (XSync() alone suffices).
> Regards.
> Piotr Neuman
I can't remember if anyone responded to this, but I saw some improvement
on my box. But I don't know much about XV. Any reason not to apply this?
--Joey
--
"There are trivial truths and there are great truths. The opposite of a
trivial truth is plainly false. The opposite of a great truth is also true."
--Neils Bohr
More information about the MPlayer-dev-eng
mailing list