Driver implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



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





[Index of Archives]     [Linux DVB]     [Video Disk Recorder]     [Asterisk]     [Photo]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Free Photo Albums]     [Fedora Users]     [Fedora Women]     [ALSA Users]     [ALSA Devel]     [Linux USB]

Powered by Linux