Brooktree Bt878
Started off life as a good old analogue audio+video chip in the BT848 days, used by stacks of different cards (just look at video4linux). When DVB came along, I guess the manufacturers of the TV cards were used to working with this chip so the digital audio input interface was co-opted to take the MPEG2 transport stream.
It has a pretty nice programmable DMA engine. You basically build a very simple RISC program (very RISC - has like 8 instructions) that copies data between the BT848 and your RAM somewhere. It is still based on lines and frames (e.g. 500 lines of 752 bytes each), although for DVB usages they're arbitrary so it's just a pain. The original idea behind it was that when you had a window obscured on your display, or you wanted to crop a bit of the input image, you could build a RISC program that just copied the parts of the video lines you wanted, and thus not waste any PCI bandwidth.
It declares more than one function onto the PCI bus, one each for video and audio. The two functions have different memory mappings although they have many similar registers - e.g. the i2c bus is only available via the video function and the DVB stream is only available via the audio function. ('function' is a PCI term ... most PCI devices have only one of them...)
It supports both 'software' and 'hardware' i2c Protocols. Software means that you write to the SCL & SDA lines directly and the CPU/driver has to time everything itself. Hardware means you give it a byte or two to read/write and it goes away and does that and gets back to you with an interrupt when it's done. Unfortunately the hardware i2c does not support writing just one byte (the address byte but no data) so you cannot do safe write or read probes of i2c client addresses (it could confuse an i2c client that does not have sub addresses - e.g. a PLL)
Not sure what the difference between this and the Conexant Fusion 878 is