basically, i have xinetd setup to listen on a tcp port and invoke the somagic-capture tool. i then use the libvlc source method to connect to tcp://localhost:### and use the rawvideo demux with all the appropriate flags:
--demux=rawvideo,--rawvid-chroma=UYVY,--rawvid-width=720,--rawvid-height=480,--rawvid-fps=30000/1001,--rawvid-aspect=4:3
and bingo, zoneminder is happy. each usb dongle uses about 20% of a core for somagic-capture. i made a small code change to somagic-capture to be able to specify which usb dongle to read from, so that multiple ones can be used on a single server.
if anyone else is interested, i can write this up and put stuff into the wiki, but if i'm the only one, then i'll just sit quietly in the corner
