Hi..
I'm currently trying to figure out a way to implement the capture code for
voodoo3500tv and am in need of some general guidelines.
Some background:
Voodoo-chip automatically takes care of receiving the picture data from
video-decoder and places it in the framebuffer(up to triple-buffering). It
can then automatically flip the latest data to an overlay surface and/or
generate an interrupt (upon frame completion) for further processing(such as
capture).
I've implemented a basic read function that use voodoos 2d operations to
convert yuv to rgb(16/24) and then copy this to the user. All is nice but a
little too slow for any video-capture. Stills work decently, though...
So now I want to implement mmap-interface. Basically the code in bttv is a
good example of how to do it except for the actual capture part(so different
from voodoo w/ all risc code, etc...).
So now if I get an interrupt signaling of a frame captured to framebuffer
what should I do next?
1) Transfer all of the frame during that interrupt to a separate buffer in
main memory (something in my head says moving 640x240x2 during an interrupt
is not good).
2) have maybe a kernel thread that takes care of that an have my interrupt
handler just wake up the thread?
3) Could I just map parts of the framebuffer memory with mmap to users to
skip this extra copying? Setting up, say, 10 buffers in framebuffer and use
the onchip 2d-routines to copy/transform data into these. Rather less time
consuming then doing it in main memory.
There's no way, it seems, to have voodoo-chip transfer data to main
memory(3dfx didn't even implement extra texture storage in main memory like
they could have according to agp specs) by itself so controlling programs
have to take care of that..
Should I take some extra steps to prevent blocking, say, disk i/o during
copying large amounts of data?
How do I ensure smp-compatibility?
- Juha
_______________________________________________
Video4linux-list mailing list
[EMAIL PROTECTED]
https://listman.redhat.com/mailman/listinfo/video4linux-list