[EMAIL PROTECTED] ([EMAIL PROTECTED]):
> What I don't understand is why there is such an issue about root
> permissions. v4l devices, for example, have been user-accessible for a
> while. [...]
Please consider the root issue a separate matter: I don't want it to
hinder my suggestions for improving video output quality.
That said, let me explain my reasoning:
Consider a video player attempting to play a TV feed at 59.94fps. A
frame must be blit every 16ms. With current scheduling under linux,
nanosleep has an accuracy of 1/HZ, which for most systems is 10ms.
Film-source material at 24fps (41.6ms/blit) suffers similarily. The
+/-5ms error here is visible, especially on big cinematic pans.
Clearly, smooth video output is only possible with better accuracy.
My current plan of attack is simple:
* Use /dev/rtc to cause an interupt at 1024hz (need root for >64hz).
* Set your render thread SCHED_FIFO so that when the timer interrupt
occurs, you will preempt everything (requires root).
I get +/-1ms accuracy for my frame blits. This brute force method
works fine, but I still suffer slightly from not being synced to the
refresh rate. If HZ was set to something reasonable (like, say, 1024),
then being SCHED_FIFO would only be required when you want to guarentee
that you're never very far off, which you probably only need when you're
going to sit down with your family for a sunday night movie.
If we had the vsync as an interrupt (/dev/vsync or something), then
quality would increase with less system load! Very nice! But
SCHED_FIFO would still be needed to guarentee accurate blits.
Not all video and multimedia applications require root access.
Single-frame video grabbers, teletext decoders, and some specific
hardware-assisted players are examples. But you do need something
special for realtime audio effects processors, MIDI synthesizers, and
high quality (even TV quality!) video players.
Check out deinterlace.sf.net (aka dscaler.sf.net). It's an example of
a (Windows-based) video deinterlacer, something I've kinda got working
under linux. For realtime deinterlacing, you have about 16ms _total_ to
grab a field from the capture card, process it, and send it to the
display. This demands alot from the CPU, and will definitely require
root access to ensure accurate timing. We can't buffer more than maybe
2 fields, since unlike using a software DVD player we have no control of
the audio (which goes direct from your DVD player into your AC3 decoder
etc). Ouch!!
Branden Robinson mentioned the following:
> FWIW, I've heard that the pre-emptible kernel patches to Linux improve
> latency a great deal.
If you're talking about the low-latency kernel patches, these only
guarentee performance benefits to SCHED_FIFO processes running as root,
AFAIK.
> What I'm telling you is that DVD playback software that has to be
> setuid root, or run only by the root user, is a very unpalatable
> prospect to most general-purpose distributions. I think that is the
> audience that most interests the current developers of XvMC, but I
> urge them to correct me if I'm wrong.
Hey, I'm just saying that for 'high quality' output, that is, at
television framerates or theatre-smooth video, you need root. You can
play things just fine as a user but your quality will be nowhere near
what you can achieve.
Back to [EMAIL PROTECTED]:
> Bill - if you are willing to settle for your application to
> work with one video card (i.e. ATI) you could get such functionality
> much sooner. Just e-mail me what you want (in terms of sync), and I'll
> try to include this in our "extended" v4l module (http://gatos.sf.net)
Vladimir, the idea of a /dev/vsync device is looking very promising.
Maybe we should look at standardizing something in this line, but
ideally I want my software to work with all video cards eventually (so
long as they don't suck and can provide me with the vsync status or an
interrupt).
Thoughts?
--
Billy Biggs [EMAIL PROTECTED]
http://www.billybiggs.com/ [EMAIL PROTECTED]
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert