I'm developing a program to record from an infrared camera to check my home when I'm away. I have four bt848 on the same PCI card. My kernel is 2.4.18 (from Slackware) and bttv is the one with it. Everything works right and is well-configured. Since I had some problems as regards input selections I have a few questions: Why is there a mdelay(10) in the function bt848_muxel? Here it is: static void bt848_muxsel(struct bttv *btv, unsigned int input) { .... /* This seems to get rid of some synchronization problems */ btand(~(3<<5), BT848_IFORM); -->> mdelay(10); // it's too much to get the 1st right! <<-- input %= bttv_tvcards[btv->type].video_inputs; if (input==bttv_tvcards[btv->type].svhs) { btor(BT848_CONTROL_COMP, BT848_E_CONTROL); btor(BT848_CONTROL_COMP, BT848_O_CONTROL); } else { btand(~BT848_CONTROL_COMP, BT848_E_CONTROL); btand(~BT848_CONTROL_COMP, BT848_O_CONTROL); } btaor((bttv_tvcards[btv->type].muxsel[input&7]&3)<<5, ~(3<<5), BT848_IFORM); audio(btv, (input!=bttv_tvcards[btv->type].tuner) ? AUDIO_EXTERN : AUDIO_TUNER, 1); ... } It should avoid syncro problems but I can catch a correct 1st frame only removing it. The little problems I had without it could be removed avoiding the use of DMA by my hard disk (some sync() in the right place). Shouldn't this pause (the mdelay(10)) be selectable (maybe with a flag fast/slow change)? I patched my driver removing it and it's right for me, but nobody else can use the program well. It's important because I have two cameras for each bttv and I'd like to take 1 frame from one and then 1 from the other. I'd like to block other program accesses to the disks during the channel change and grabbing sequence, releasing it after that. Is there any way of doing this? I've already tried changing scheduling modes but the DMA is something on the OS side so I don't know how to do it (if I can). This is because I'd like to see what has been recorded (with a MPEG viewer) while I'm recording. Thanks for the attention paid! Stefano